美文网首页
深入理解JSP和Servlet

深入理解JSP和Servlet

作者: exmexm | 来源:发表于2017-05-19 10:41 被阅读0次

    开始编写比较复杂的jsp啦。

    全称:javaserver pages
    在传统的网页HTML文件(.htm,.html)中加入java程序片段(Scriptlet)和jsp标签,就构成了jsp网页。

    1、因为可以嵌入java代码,由此具备动态特性。
    java程序段可以操纵数据库、重新定向网页以及发送E-mail等,实现建立动态网站所需要的功能。

    2、所有程序操作都是在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端并不支持java也可以访问jsp网页。

    3、在里面嵌入的标签是<%%>

    4、强大的组件(java Bean)支持功能。

    比如下面就是在页面循环输出两个你好。

    <%
    for(;i<2;) {
    %>
    你好</br>
    <%
    }
    %>
    

    jsp的一般执行过程:接受request后,就先把jsp文件经过jsp parser转换为java文件(即Servlet文件),然后该文件被被jsdk(Servlet分析器)编译成class文件,然后被执行,再response回客户端。执行过程都是在服务器上执行的。

    图片.png

    其中 查找jsp文件后还会发生以下检查:jsp是否是修改或创建后的第一次调用。

    jsp查找过程

    jsp原始代码包含jsp元素和模板(Template)Data两类。

    template data值得是jsp引擎不处理的部分,即<% %>以外的部分。例如代码的HTML部分,这些数据会直接送到客户端。

    jsp元素是指<% %>部分。由jsp引擎直接处理,这部分必须符合java语法,否则会出现编译错误。



    jsp的语法:
    1、编译器指令(directive)
    例如<%@page import = "java.io."%>
    该指令无论在jsp的哪一个地方,它的作用范围都是整个jsp文件。
    编译器指令包含“包含指令”,“页指令”和“taglib指令”
    他们包含在<%@ page [import] [pageEncoding]%>卷标里。
    两个主要的指令是page与include。
    例:import = "java.io.
    "
    已经默认import了
    java.lang.*
    javax.serlet.jsp.*
    javax.servlet.http.*

    就是jsp中用的request、out等tomcat已经定义好了。内置了的。

    taglib指令:
    <%@taglib uri = "URITOTagLibrary" prefix="tagPrefix"%>
    用于引入定制标签库。

    2、脚本语法(scripting)
    html注释
    (jsp)隐藏注释<%--comments--%>

    jsp表达式<%=comments%>

    jsp声明:<%!declaration,declaration%>
    如:<%! int a = 3;%> 和<% int a = 3;%>这两个是有差别的。转换为servlet后编译的class文件是不一样的哦。
    第一句话是把a声明为成员变量额,而第二句话则是把定义 为_jspService方法里面的局部变量。
    一般定义为脚本段,而不是声明。。。。比较稳。
    因为Servlet是单实例的,单实例的,单实例。。。

    包含:<%@include file="相对位置"%>

    3、动作语法(Action)
    例如<jsp:forwward>,<jsp:getProperty>,<jsp:include>
    (1)<jsp: forward page={"relativeURL" | "<%=expression %>" } />
    (2)<jsp:param name="paramterName" value="{parameterValue | <%= expression %> }" />
    [ <jsp:param...../> ]

    page属性是指转到某一个页面中。
    page=“value”,value可以i一个表达式或是一个字符串用于说明你将要定向的文件或者URL。这个文件可以是jsp,或者是程序段。
    同时在转时,可以发送多个参数。
    [ <jsp:param...../> ]
    例子:转到forwardto.jsp,并传去参数名为username的值为winney的参数。

    <jsp:forward page="forwardto.jsp">
    <jsp:param name="username" value="winney" />
    </jsp:forward/>
    

    注:转到页面后,原本的那个页面剩下的代码是不会被执行的。因为页面的流程都已经转到另外一个页面里去了。

    本质原因: 在jsp被翻译为class文件后的源码是在转页面的代码后直接加一个return语句。

    (2)<jsp: include>
    包含一个静态或者动态文件
    <jsp:include page="{relativeURL |<%=expression%>}" flush="true" />

    <jsp:include page="{relativeURL |<%=expression%>}" flush="true" />
    <jsp: param name="parameterName" value="{parameterValue} | <%= expression %/>" />
    [<jsp: param.../>]指可以有多个“<jsp:param/>”标记、

    param可以将参数传到被包含的静态或者动态文件中。

    关于servlet:
    Servlet的框架是由两个java包组成的:
    javax.servlet包:定义了所有的Servlet类都必须实现或拓展的通用接口类。
    javax.servlet.http包:定义了采用HTTP协议通信的HttpServlet类。

    每一个servlet都必须实现javax.servlet.Servlet接口,GenericServlet是个通用的,不特定于任何协议的Servlet,它实现了Servlet接口,而HttpServlet继承于GenericServlet,因此HttpServlet也实现了servlet接口,因此我们定义的servlet只需要继承HttpServlet父类即可。

    Servlet接口中定义了service方法,HttpServlet对该方法进行实现:
    将servletRequest和ServletReaponse转换为HttpServletRequest和HttpServletResponse。
    转换完毕后,会调用HttpServlet自己定义的service方法;
    在service方法中,首先获得请求方法名,然后根据方法名调用对应的Do方法。
    在HttpServlet类中调用的doGet、doPost方法都是返回错误信息,所以我们自定义的servlet要override HttpServlet里面的doGet、doPost方法。

    图片.png

    Servlet的启动:
    在下列时刻Servlet容器装载Servlet:
    --Servlet容器启动时自动装载某些Servlet
    --在Servlet容器启动后,客户首次向Servlet发出请求
    --Servlet的类文件被更新后,重新装载Servlet

    Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期中,init方法只会被调用一次。

    相关文章

      网友评论

          本文标题:深入理解JSP和Servlet

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