• JSP/Servlet相关


    1 简介

    JSP(Java Server Page)和Servlet是JavaEE规范的两个基本成员,是JavaWeb开发的重点。

    JSP的本质是Servlet,当用户向指定的Servlet发送请求时,Servlet利用输出流动态的生成HTML页面,包括每一个静态的HRML标签和所有在HTMl页面中出现的内容。

     

    JSP页面内容由2个部分构成

    • 静态部分:标准的HTML标签、静态的页面内容。
    • 动态部分:受Java程序控制的内容,有Java脚本动态生成。

     

    工作原理

    1. JSP文件必须在JSP服务器内运行。

    2. JSP文件必须生成Servlet才能执行。

    3. 每个JSP页面的第一个访问者速度很慢,因为必须等JSP编译生成Servlet。

    4. JSP页面的访问者无需安装任何客户端(包括Java环境),因为JSP页面输送到客户端的是标准的HTML页面。

     

    基本语法

    JSP的基本语法与JAVA类似,以下为特殊的几个语法。

     

    3.1 注释

    <%-- JSP注释部分,生成HTML后不显示 --%>
    
    <!-- 增加JSP注释,生成HTML后显示 -->

    3.2 声明部分

    <%! 声明部分 %>
    
     
    
    <%-- 例子 --%>
    
    <%!
    
        public int count = 0;
    
        
    
        public String Greet()
    
        {
    
            count++;
    
            return "Hello for " + count + " times!";
    
        }
    
    %>
    View Code

    该声明的部分所声明的成员变量及成员方法会转换成对于Servlet类的成员变量及成员方法。

    当多次进入包含该声明部分的JSP页面时,可以发现count成员变量的值在持续改变。因为所有的客户端共享了同一个Servlet类,即共享同一个成员变量及成员方法等。这些变量及方法只有在Servlet类销毁后才不再保存。

     

    3.3 输出表达式

    <%= 表达式 %>
    
    <%-- 例子 --%>
    
    <%-- 将在页面输出3 --%>
    <%= 1 + 2 %>
    
    <%-- 将在页面输出1 --%>
    <%!
        public int a = 1;
    %>
    
    <%= a %>
    View Code

    3.4 JSP脚本 

    可以利用<%%>中包含任何可执行的java代码。并且所有可执行的Java代码都可以利用JSP脚本嵌入HTML页面之中。

    <ul>
        <%
            for (int i = 0; i < 10; i++)
            {
        %>
            <li><p>这是第<%= i %>行</p></li>
        <%
            }
        %>
    </ul>
    View Code

    需要注意的是,JSP脚本部分声明的变量为局部变量,不能使用publicprivate这些访问控制符修饰,也不可使用static修饰。

     

    3.5 JSP的3个编译指令 

    • page:该指令是针对当前页面的指令
    • include:用于指定包含另一个页面
    • taglib:用于定义和访问自定义标签

    使用以上编译指令格式如下

    <%@ 编译指令名 属性名="属性值" %>

     

    3.5.1 page指令 

    page指令位于JSP页面代码顶端,一个JSP页面可使用多条page指令。

    属性名 属性值 默认值
    language 声明当前JSP页面使用脚本语言的种类 JAVA
    extends 指定JSP页面编译所产生的JAVA类所基础的父类
    import 用来导入包 默认导入java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*
    contentType 设定生成网页的文件格式和编码字符集 格式:text/html,字符集:ISO-8859-1
    pageEncoding 生成网页的编码字符集
    session 设定这个JSP页面是否需要HTTPSession
    buffer 指定输出缓冲区的大小,可设置none 8KB
    autoFlush 当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容,true为正常输出,false溢出时抛出溢出
    info 设置该JSP程序的信息,可看作说明,调用getSerletInfo()可获取
    errorPage 指定错误处理页面
    isErrorPage 设定本JSP页面是否为错误处理程序,若该页面已是错误处理程序,则无需设置errorPage值

     

    <%-- 例子 --%>
    
    <%@ page contentType="text/html; charset=utf8" language="java" errorPage="">
    
    <%@ page import="java.util.*" %>
    View Code

    3.5.2 include指令

    该指令可以使用在文件的任何位置。使用该指令,可以将一个外部文件嵌入到当前的JSP文件中,同时解析这个页面中的JSP语句。

    include可以包含静态页面,也可以包含动态的JSP页面。

    若被嵌入文件经常需要改变,则建议使用<jsp:include>,因为它是动态的包含。

    <%-- 例子 --%>
    <%@ include file="exampleJSP" %>
    
    <jsp:include file="exampleJSP">
    View Code

     

    3.6 JSP的7个动作指令

    • jsp:forward
    • jsp:param
    • jsp:include
    • jsp:plugin
    • jsp:useBean
    • jsp:setProperty
    • jsp:getProperty

     

    3.6.1 forward指令

    用于将页面响应转发到另外的页面(静态、动态或者Servlet)。

    <%-- 例子 --%>
    
    <%-- jsp 1.0 --%>
    <jsp:forward page="">
    
    <%-- jsp 1.1 及以上 --%>
    <jsp:forward page="xxx.jsp">
        <jsp:param name="xx" value="xxx" />
    </jsp:forward>
    View Code

    该指令转发请求,但客户端的请求参数不会改变,即用户请求的地址不会改变。

     

    3.6.2 include指令

    该指令是一个动态include指令。

    <%-- 例子 --%>
    <jsp:inlcude page="xx.jsp" flush="true">
        <jsp:param name="xxxx" value="xxx" />
    </jsp:include>
    View Code

    flush属性用于指定输出缓存是否转移到被导入文件中。

    true,则包含在其中。false,反之。

     

    3.6.3 useBean、setProperty、getProperty

    待更新

     

    3.7 JSP脚本中的9个内置对象

    待更新 

     

    4 Servlet介绍

    Servlet为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户端的请求。

    Servlet提供不同的方法用于响应客户端请求。

    • doGet:响应客户端Get请求。
    • doPost:响应客户端POST请求。
    • doPut:响应客户端的PUT请求。
    • doDelete:响应客户端的DELETE请求。

    另外两个方法。

    • init(ServletConfig config):创建Servlet实例时,调用该方法的初始化Servlet资源。重写该方法时,需首先调用super.init(config)
    • destroy():销毁Servlet实例时,自动调用该方法的回收资源。

     

    5 Filter介绍 

    可看作“加强版“的Servlet,主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理

    作用

    • 在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest
    • 根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
    • 在HttpServletResponse到达客户端之前,拦截HttpServletResponse
    • 根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

    种类:用户授权的Filter,日志Filter,负责解码的Filter,能改变XML内容的XSLT Filter等等。

    三种基本方法

    • void init(FilterConfig config):用于完成初始化。
    • void destroy():用于Filter销毁前,完成某些资源的回收。
    • void doFilter(ServletRequest request, ServletResponse response, FilterChain chain):实现过滤功能,对每个请求及响应增加的额外处理。

    5.1 Url Rewrite 

    利用url rewrite可实现url的伪静态。

     

    6 Listener

    常用的Web事件监听器接口:

    • ServletContextListener:用于监听Web应用的启动和关闭。
    • ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变。
    • ServletRequestListener:用于监听用户请求。
    • ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变。
    • HttpSessionListener:用于监听用户session的开始和结束。
    • HttpSessionAttributeListener:用于监听HttpSession范围(session)内属性的改变。

     

     

  • 相关阅读:
    C++ 并发编程 01 线程api
    C# CS1591 缺少对公共可见类型或成员的 XML 注释 问题解决
    Web Api HelpPage
    C++11新特性介绍 02
    C++11新特性介绍 01
    Autofac框架详解
    Linux gdb调试器用法全面解析
    BCM_SDK命令
    VLAN
    java_Observer Design Pattern
  • 原文地址:https://www.cnblogs.com/wsy06/p/5295521.html
Copyright © 2020-2023  润新知