javaWeb1之Jsp

Java Server Page

放在除WEB-INF(放web项目的隐私文件)外的其他任何目录中。
Java服务器端网页,实现在HTML页面编写Java代码实现动态内容,一种简化Servlet编写的技术(不用在java里拼写html)
本质上是一个Servlet,每个JSP页面在第一次被访问时,JSP引擎会将它翻译成一个Servlet程序(java文件),接着编译为class文件,然后由web容器(Servlet引擎,tomcat)去装载、执行。

workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\项目名\org\apache\jsp\xxx_jsp.java

运行tomcat后,被装载在:

tomcat_home\work\Catalina\localhost\项目名\org\apache\xxx_jsp.java

整个过程在Servlet容器的控制下将请求的JSP资源转变为Servlet之后,同样会经历Servlet的实例化、初始化、就绪、销毁四部分的生命周期。从图中可以看到,之所以第一次请求一个JSP页面会比之后的请求响应慢一些,就是要经过转译成Servlet,编译成class这样一个过程。

JSP页面的隐含对象

没有声明就可以引用的,源码:

public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;

    //...
    
    //使用  <% %> 编写的代码在此位置. 可以用到 request, response, pageContext, session
    //application, config, out, page 这 8 个隐含对象. (实际上还可以使用一个叫 exception 的隐含对象)
    
}

1.request:HttpServletRequest,属性的作用范围仅限于同一个请求。
2.response:HttpServletResponse,JSP页面里几乎不用。
3.pageContext:PageContext,页面的上下文,可以从该对象中获取其他8个隐含对象和当前页面其他信息(标签),属性作业范围仅限于当前JSP页面。
4.session:HttpSession,代表浏览器和服务器的一次会话(浏览器打开直到关闭即一次会话)
5.application:ServletContext,代表当前Web应用,属性作业范围仅限于当前Web应用。只要在一处设置属性, 在其他各处的 JSP 或 Servlet 中
都可以获取到。
6.config:当前JSP对应的Servlet的ServletConfig对象(几乎不用)。若需访问当前JSP配置的初始化参数,需要通过映射地址(url-pattern)。
7.out:JspWriter对象,调用out.print(),直接把字符串打印在浏览器上。
8.page:指向当前JSP对应的Servlet对象的引用,但为Object类型,只能调用Object类的方法(几乎不用)。
9.exception:在声明了page指令的isErrorPage="true"时才可用。

<%@ page isErrorPage="true" %>

pageContext, request, session, application(对属性的作用域的范围从小到大) ,都有这些方法!这四个对象也称之为域对象:

void setAttribute(String name, Object o): 设置属性  
Object getAttribute(String name): 获取指定的属性
Enumeration getAttributeNames(): 获取所有的属性的名字组成的 Enumeration 对象
removeAttribute(String name): 移除指定的属性 
pageContext, request, session, application 对象

JSP模版元素:

JSP页面中的静态HTML内容称 。

JSP脚本片断(scriptlet)

是指嵌套在<% 和 %>之中的一条或多条Java程序代码。 多个脚本片断中的代码可以相互访问。

<% 
    String ageStr = request.getParameter("age");
    Integer age = Integer.parseInt(ageStr);
    
    if(age >= 18){
%>
        成人...
<%
    }else{
%>
        未成人...
<%
    }
%>

JSP表达式

提供了将一个 java 变量或表达式的计算结果输出到客户端的简化方式,它将要输出的变量或表达式直接封装在<%= 和 %>之中。

<% 
    Date date = new Date();
    out.print(date);
%>
<!--jsp表达式-->
<%= date %>

JSP 声明

JSP 声明将 Java 代码封装在<%!和 %>之中,它里面的代码将被插入进 Servle t的 _jspService 方法的外面(在 JSP 页面中几乎从不这样使用)。

JSP指令

JSP注释

<%-- JSP 注释 --%>
区别: JSP 注释可以阻止 Java 代码的执行.。

JSP标签

JSP标签可代替java代码,使JSP文件变得简洁,便于维护和代码复用。

include标签

1).

2). 动态引入: 并不是像 include 指令生成一个 Servlet 源文件, 而是生成两个 Servlet 源文件, 然后通过一个方法的方式把目标页面包含进来.

org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "b.jsp", out, false);

forward标签

1).

相当于.

<% 
    request.getRequestDispatcher("/include/b.jsp").forward(request, response);
%>

2). 但使用 jsp:forward 可以使用 jsp:param 子标签向 b.jsp 传入一些参数. 同样 jsp:include 也可以使用 jsp:param 子标签.

<jsp:forward page="/include/b.jsp">
    <jsp:param value="abcd" name="username"/>
</jsp:forward>  

OR

<jsp:include page="/include/b.jsp">
    <jsp:param value="abcd" name="username"/>
</jsp:include>

在 b.jsp 页面可以通过 request.getParameter("username") 获取到传入的请求参数.

自定义JSP标签

请求转发与全球重定向

猜你喜欢

转载自www.cnblogs.com/xiaobingzi/p/10752555.html