为什么要使用JSP
既然我们有Servlet,可以对客户端做出响应,为什么还要使用JSP,我们首先来分析HTML、Servlet和JSP的特点:
HTML:HTML是静态页面,是“死”的,不能够编程,页面上不能存在变量,但是请求十分方便
Servlet:灵活,可以编程来控制程序的执行,但是如果需要向客户端响应大量的HTML页面,那会十分麻烦,
JSP:可以在JSP页面直接使用HTML,jsp编译器会自动将HTML的文本转换为out.write()方法中的内容发送给客户端,同时JSP页面也可以存在Java脚本,
我们可以看出,JSP的优点,即可以存在HTML文本,有可以存在Java脚本,这是其他两种方式所不能替代的。
JSP的文格式更加简单,同时JSP易于生成在Web浏览器中显示的内容。JSP可以 改善编程速度、效率和开发过程的准确性。
JSP和Servlet的分工
JSP一般作为请求的发起页面和请求的结束页面来显示数据,中间的请求处理过程就交给Servlet了,Servlet将请求处理的结果转发到JSP,然后通过JSP来显示处理结果,JSP不直接处理请求,一般在页面上点击超链接,提交表单都是在请求Servlet,这样就形成了两个层次,JSP负责用户视图,Servlet负责服务的提供。
JSP的组成
JSP页面中可以存在HTML、Java脚本、JSP标签和指令
在_jspService方法中,可以使用的对象有:
- HttpServletRequest request:_jspService方法的参数
- HttpServletResponse response:同上
- PageContext pageContext;// 当前页面的域对象
- HttpSession session:表示当前会话,所以客户端直接访问JSP时,客户端就会直接创建session,设置Cookie,将JSESSIONID发送给客户端
- ServletContext application:最大的域对象
- ServletConfig config:获取servlet(JSP)配置信息
- JspWriter out:用来向客户端响应内容
- page = this:当前对象
- Throwable exception:当Page中,存在isErrorPage属性时,就有这个对象
JSP中的三种Java脚本:
- <%...%>
- <%=...%>
- <%!...%>
我们分别来实验,这三种脚本的使用方式:
  首先在index.jsp 中添加如下代码
  
<%
  int a = 10;
  class A {
      int b = 1;
  }
  System.out.println("111");
%>
然后我们再去查看经过编译后的Servlet的代码,发现上面的代码部分出现在了_jspService 方法的try块中,那么可以推测,<%..%> 这个脚本实际上就是在_jspService方法中写一些Java代码,
我们再添加如下代码
  <%= 111%>
  发现111被使用out,输出到了客户端,可以推测,<%=%>这个脚本中的内容其实都会出现在out.print方法中,
再添加如下代码:
<%! int a = 10;%>
我们该代码出现在index_jsp.java 类中,即声明了一个变量a
总结:
<%...%>脚本的内容会被输出到_jspService方法中
<%=..%>脚本的内容会被输出到out.print方法中
<%! ...%> 脚本的内容会被输出到类体中,即
class A {
成员
方法
构造方法
构造块(初始化块)
静态块
内部类
}
需要注意的是:JSP在第一次被请求时,被即时转换并编译,对于之后的请求,直接使用编译好的JSP,所以第一次请求的响应往往都稍慢一些,当然也有的Web容器提供了预编译JSP的功能,但是项目部署的速度也就会降低。
我们再来分析请求JSP时,服务器做的事,我们之前说过,所有的JSP请求,实际上都会被一个tomcat的默认Servlet处理:
    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <load-on-startup>3</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!-- The mappings for the JSP servlet -->
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>
可以猜测到tomcat配置的默认的Servlet将会解析请求的URL,然后转发给对应的由JSP转换过来的Servlet处理。
客户端第一次请求JSP时:
- JSP文件将会被编译成.java文件
- 然后再继续编译成.class文件
- 然后创建该对象
- 调用service方法,完成响应
第二次请求JSP时,直接调用service方法
JSP中注释的使用
<!--这是一个注释--> --->这种注释会被发送到客户端,只不过浏览器会忽略这个注释,但是查看源代码,可以看到
<%--这也是一条注释--%> ---> 这种注释不会被发送到客户端,当服务器把JSP编译成Java文件时,就已经忽略了注释了,
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号