美文网首页
JSP快速入门

JSP快速入门

作者: 凛_冬_将_至 | 来源:发表于2017-02-06 22:54 被阅读257次

    一、概述

    JSP是Java Server Pages的简称,是一种动态网页开发技术,运行在服务端。以Java语言作为脚本语言,使用JSP标签在HTML网页中插入Java代码。

    JSP是一种Java servlet,主要用于实现web应用程序的用户界面部分。可以响应客户端请求,动态生成HTML、XML或其他格式文档的web网页。

    • 可以直接在HTML网页中动态嵌入元素,性能更加优越
    • 服务器调用的是已经编译好的JSP文件
    • 拥有强大的企业级Java API
    • JSP页面可以与处理业务逻辑的servlet一起使用
    • 编写和修改HTML网页比较容易,不需要在servlet中使用大量的输出语句
    • JSP开发的web应用可以跨平台使用

    二、处理流程

    1. 浏览器发送一个HTTP请求
    2. web服务器将请求传递给JSP引擎
    3. JSP引擎将JSP文件转化成servlet
    4. JSP引擎将servlet编译成可执行类,并将请求传递给servlet引擎
    5. servlet引擎载入并执行servlet类,生成HTML格式的输出并嵌入到HTTP响应中,上传给web服务器
    6. web服务器以静态HTML网页的形式将HTTP响应返回到浏览器

    三、生命周期

    JSP的生命周期就是从创建到销毁的整个过程。与servlet的生命周期类似,只是还包括将JSP文件编译成servlet的阶段。

    1、编译阶段

    当浏览器请求JSP页面时,JSP引擎首先会检查是否需要编译这个JSP文件。只有在该文件从没有被编译过,或在上次编译之后有过变更,才会编译该文件。

    编译过程包括三个步骤:

    • 解析JSP文件
    • 将JSP文件转化成servlet
    • 编译servlet

    2、初始化阶段

    加载编译生成的servlet类,调用jspInit()方法进行初始化,如建立数据库连接或打开文件等。和servlet一样,程序一般只初始化一次。

    public void jspInit() {
        // 初始化代码
    }
    

    3、执行阶段

    调用_jspService()方法,处理与请求相关的交互行为。该方法在每个请求中被调用一次并产生与之对应的响应。

    void _jspService(HttpServletRequest request, HttpServletResponse response) {
        // 服务端处理代码
    }
    

    4、销毁阶段

    调用jspDestroy()方法执行清理工作,如释放数据库连接或关闭文件等。

    public void jspDestroy() {
        // 清理代码
    }
    

    四、基本语法

    1、脚本程序

    脚本程序包含任意的Java语句、变量、方法或表达式。任何文本、HTML标签、JSP元素必须写在脚本程序的外面。

    <% %>
    

    2、JSP声明

    声明语句可以声明任意变量、方法,供后面的Java代码使用。

    <%! declaration; %>
    

    3、JSP表达式

    表达式的值先被转化成String,再将其插入到表达式所在的地方。

    <%= expression %>
    

    4、JSP注释

    可以为代码行注释,也可以为代码块注释。

    <%-- annotation --%>
    

    5、JSP指令

    用来设置与整个JSP页面相关的属性。JSP有三种指令标签:page、include和taglib。

    5.1 page指令

    定义页面的依赖属性,提供当前页面的使用说明,如脚本语言、error页面、缓存等。

    <%@ page attribute="value" %>
    

    与page指令相关的属性:

    • buffer,指定out对象使用的缓冲区大小
    • autoFlush,控制out对象的缓冲区
    • contentType,指定当前页面的MIME类型和字符编码
    • errorPage,指定当页面发生异常时转向的错误处理页面
    • isErrorPage,指定当前页面是否可以作为其他页面的错误处理页面
    • extends,指定servlet继承的类
    • import,导入使用的Java类
    • info,定义页面的描述信息
    • language,定义页面使用的脚本语言,默认是Java
    • session,指定页面是否使用session
    • isThreadSafe,指定页面的访问是否为线程安全
    • isELIgnored,指定是否执行EL表达式
    • isScriptingEnabled,指定脚本元素能否被使用

    5.2 include指令

    通过该指令来包含其他文件,被包含的文件如同页面的一部分,会被同时编译执行。

    <%@ include file="name" %>
    

    指令中的文件名实际上是一个相对的URL地址,默认是当前路径。

    5.3 taglib指令

    引入标签库,可以是自定义标签。

    <%@ taglib uri="uri" prefix="prefixOfTag" %>
    

    uri属性确定标签库的位置,prefix属性指定标签库的前缀。

    6、JSP行为

    JSP行为标签是一些预定义的函数,用来控制servlet引擎,实现特殊操作。

    <jsp:action_name attribute="value" />
    

    所有的动作元素都有两个属性:id和scope。id属性是元素的唯一标识,scope属性是元素的生命周期。

    6.1 jsp:include元素

    在当前页面中包含静态或动态资源。插入文件的时间是在页面被请求的时候。

    <jsp:include page="url" flush="true" />
    

    page属性是被包含的资源的相对URL地址。flush属性是定义在包含资源前是否刷新缓冲区。

    6.2 jsp:useBean元素

    用来加载一个在页面中使用的JavaBean组件。

    <jsp:useBean id="name" class="package.class" />
    

    class属性指定Bean的完整包名。type属性指定引用该对象的变量类型。

    6.3 jsp:setProperty元素

    用来设置已经实例化的Bean对象的属性。

    <jsp:setProperty name="beanName" property="property" />
    

    name属性表示要设置属性的Bean。property属性表示要设置哪个属性。value属性用来指定Bean属性的值。param属性指定用哪个请求参数来设置Bean属性的值。

    如果jsp:setProperty元素位于jsp:useBean元素外部,不管是新创建一个Bean实例,还是已有一个Bean实例,都会执行。如果jsp:setProperty元素位于jsp:useBean元素内部,只有在新创建一个Bean实例时才会执行。

    6.4 jsp:getProperty元素

    获取指定Bean对象的属性值。

    <jsp:getProperty name="beanName" property="property" />
    

    name属性是要检索的Bean的名称。property属性表示要获取的属性。

    6.5 jsp:forward元素

    将请求转发给其他页面。

    <jsp:forward page="url" />
    

    page属性是一个相对URL。

    6.6 jsp:plugin元素

    用于在生成的HTML页面中包含JavaBean对象。

    6.7 jsp:element、jsp:attribute、jsp:body元素

    定义动态的XML元素、元素的属性以及元素的内容。

    6.8 JSP:text元素

    允许在JSP页面和文档中使用写入文本的模板,该模板只能包含文本和EL表达式。

    <jsp:text>template</jsp:text>
    

    7、JSP隐含对象

    JSP包含九个预定义的对象,对应servlet中的类:

    • request,是HttpServletRequest类的实例
    • response,是HttpServletResponse类的实例
    • session,是HttpSession类的实例
    • application,是ServletContext类的实例
    • out,是PrintWriter类的实例,用于把结果输出到网页上
    • config,是ServletConfig的实例
    • pageContext,是PageContext类的实例,提供对页面所有对象的访问
    • Exception,是Exception类的实例
    • page,类似于Java类中的this关键字

    五、表单处理

    在浏览网页的时候,经常需要向服务器提交信息,由后台程序进行处理。

    1、GET和POST方法

    GET方法是浏览器默认的传递参数的方法。将请求的信息添加到URL后面,之间用“?”分隔,参数之间用“&”分隔。

    http://url?key1=value1&key2=value2
    

    POST提交的数据是不可见的,即不在url显示。

    2、读取表单数据

    JSP读取表单数据有以下几种方法:

    • getParameter(),获取表单参数的值
    • getParameterValues(),获取名字相同但有多个值的数据,返回数组
    • getParameterNames(),获取所有变量的名称,返回枚举
    • getInputStream(),获取来自客户端的二进制数据流

    六、过滤器

    过滤器可以动态地拦截请求和响应。可以将一个或多个过滤器附加到一个servlet或一组servlet,也可以附加到JSP文件和HTML页面。

    过滤器通过web.xml中的标签声明,然后映射到servlet或url。当web容器启动web应用程序时,会为声明的每一个过滤器创建一个实例。过滤器的执行顺序与配置文件中的配置顺序一致。

    过滤器是一个实现javax.servet.Filter接口的类,接口定义了三个方法,分别对应了过滤器生命周期的三个阶段。

    初始化阶段:

    public void init(FilterConfig filterConfig)
    

    web应用程序启动时,web服务器会创建Filter的实例对象并调用其init()方法,读取配置文件,完成对象的初始化,从而为拦截请求做好准备。

    过滤阶段:

    public void doFilter (ServletRequest, ServletResponse, FilterChain)
    

    当客户端的请求方法与过滤器的设置匹配时,servlet容器会调用过滤器的doFilter()方法,完成过滤操作。参数FilterChain用来访问后续过滤器。

    销毁阶段:

    public void destroy()
    

    servlet容器在销毁过滤器实例前调用该方法,释放过滤器占用的资源。

    七、跳转

    按照跳转的处理方式分成两类:客户端跳转和服务器跳转。

    1、客户端跳转

    使用超链接:

    <a href="newPage.jsp">跳转</a>
    

    使用JavaScript脚本:

    <script>
        function onSubmit() {
            submit();
        }
    </script>
    <form name="form1" method="post" action="onSubmit();">
        <input type="submit">
    </form>
    

    提交表单:

    <form name="form1" method="post" action="newPage.jsp">
        <input type="text" name="username">
        <input type="text" name="password">
        <input type="submit">
    </form>
    

    使用jsp的内置对象response:

    <%
        response.sendRedirect("http://www.google.cn");
    %>
    

    或者

    <%
        response.sendHeader("Refresh","1;url=http://www.google.cn");
    %>
    

    2、服务器跳转

    使用RequestDispatcher类的forward方法。

    RequestDispatcher rd = request.getRequestDispatcher("/newPage.jsp");
    rd.forward(request, response);
    

    3、sendRedirect和forward的区别

    sendRedirect:

    • 执行完所有代码再跳转到目标页面
    • 跳转后浏览器的url会改变
    • 在浏览器中重定向
    • 可以跳转到其他服务器

    forward:

    • 直接跳转到目标页面,不执行后续代码
    • 跳转后url不会改变
    • 在服务器端重定向
    • 不能跳转到其他服务器

    参考文章:

    JSP常用跳转方式

    相关文章

      网友评论

          本文标题:JSP快速入门

          本文链接:https://www.haomeiwen.com/subject/uyauittx.html