JSP技术大全集

JSP的起源:

思考:新技术的出现肯定是有原因的,那么为什么JSP会出现呢?

Servlet输出复杂的Html内容非常的麻烦,1、Html标记的内容需要out.println()输出。2、Html内容的双引号都需要转义。开发特别的麻烦,Servlet也不利于维护。

于是,开发人员迫切的希望能有一种技术,既能完成Servlet所能完成的web服务器端的编程功能,又能非常简单的输出动态定制的Html内容。于是sun公司推出JavaServletPage(JSP)技术。

JSP与Servlet的联系:

Servlet和Jsp是实现同一种编程效果的不同的两种实现。Servlet是在java代码中输出Html内容,JSP是让开发人员将普通的java代码镶嵌到Html页面中。JSP是因为Servlet带来的相关问题而诞生的,所以JSP是Servlet的更加高级的拓展,JSP从表面代码看,像是Html文件,但本质上它就是Servlet,因为JSP在web服务器中运行的时候,是先转化为Servlet,再调用转化后的Servlet的方法,把输出的动态的Html内容返回给客户的浏览器。所以只要Servlet能实现的功能,JSP也能实现。

JSP内部运行机制:

注:在我们使用JSP进行开发之前,我们先来了解一下JSP内部的运行机制

当浏览器向web服务器发出请求,要求调用jsp页面,web服务器会根据请求文件的.jsp扩展名知道浏览器请求的是一个JSP文件;web浏览器把这个请求给web容器,web容器会把请求的JSP文件转化为Servlet的源文件,同时对源文件进行编译,生成转化后的class文件。转化和编译的过程发生在JSP文件第一次被浏览器请求的时候,所以第一次调用JSP文件花费更多的时间才能看到内容。


JSP语法:

JSP代码注释:​​​​​​

//     :单行注释(传统java注释,在转化生成的Servlet源文件可以看到注释内容)

/* */ :多行注释(传统java注释,在转化生成的Servlet源文件可以看到注释内容)

<%--    --%>  :JSP特有注释(转化生成的Servlet源文件不包含注释内容)

<!--    -->  :Html注释(一直保留发送到客户端浏览器中)

指令(Directive)标记:所有的JSP指令的作用范围为当前的JSP页面,使用@符号开始,一共有6个:page、include、taglib、tag、attribute、variable,常用的为前面三个

Page指令:主要提供当前JSP文件的有关信息,可以在页面的任意位置,一般置于页面开头。

  1. 语法:<%@directive attribut="value" %>

include指令:设置当前JSP页面包含的其他的JSP或者Html文件。语法:<@ include file="relativeURL">

  1. relativeURL为被包含文件的相对路径,如果地址以“/”开始,相对于应用的根目录,如果没有以“/”开始,路径相对于JSP页面。
  2. 包含的过程发生在JSP页面转化为Servlet的时候,这个包含过程是静态的。静态的意思是指被包含的内容是增加到 JSP页面的。如果被包含的额文件是JSP页面,JSP页面中有JSP元素,这些元素会被转化以后再包含到JSP页面中。

taglib指令:设置使用定制标记。

声明(Declaration)标记:声明标记来定义当前JSP页面使用的变量和方法。

  1. 这个标记定义的变量为JSP页面的全局变量,JSP转化为Servlet以后,定义的变量转化为类变量,方法转为Servlet类中的方法。
  2. 语法:<%!     //java code      %>声明区中只能包含属性和方法的声明,不能直接嵌入java代码和使用JSP内置对象。

Scriptlet标记:JSP页面使用的最多的标记。

  1. 此标记可以包含任意多行的java代码。标记中可以定义变量、方法和输出表达式的数值,还可以使用JSP的内置对象。
  2. Scriptlet标记中的代码在JSP页面转化为Servlet的时候,出现在_jspService()方法中。
  3. 语法:<%    //java code    %>

表达式标记:(Exception):通过这个标记直接输出一个表达式的值。

  1. 如果表达式的输出不是String类型,会调用表达式的返回对象的toString()方法。
  2. 语法:<%="exception"%>:“ <% ”和“ = ”之间不能有空格,表达式的结尾不能有“ ; ”号。

动作(action):动作是特殊的标记,通过一个动作可以实现多行java代码实现的效果。动作标记就是JSP内置的定制标记库的标记。动作标记一共有14个,但是主要使用的动作标记只有5个,分别是:include、useBean、getProperty,setProperty和forward。

<jsp:include>动作:把指定的静态文件或者动态文件包含到当前的JSP页面中,这种包含为动态的包含方式。

  1. 如果包含的是静态文件(如Html文件),内容直接包含到include动作的指定位置。
  2. 如果包含的是动态文件(如JSP文件),则把调用所包含JSP网页的输出内容插入到输出内容中。
  3. include动作可以传递参数,使用include动作的JSP页面,通过request.getParameter("name")获取包含文件传递的参数值。
    <jsp:include page="/header.jsp">
    <jsp:param name="author" value="zhangsan" />
    </jsp:include>

拓展:include指令与<jsp:include>动作的区别:

  • include指令:include指令标记读入指定页面的内容并把这些内容和原来的页面融合到一起。这个过程发生在JSP转化为Servlet的阶段,最终所合成的JSP文件被Servlet容器转化成Servlet。如果一个JSP页面使用include指令包含了另外一个JSP页面,最终只会产生一个Servlet的Java源文件和一个class文件。
  • <jsp:include>:<jsp:include>动作包含其他JSP页面,其本质是调用了被包含的文件所转化的Servlet对象的jspServlet()方法。也就是说,所包含的JSP文件也对应生成Servlet源文件和class文件。如果一个JSP页面使用include动作包含了另一个JSP页面,一共会产生两个Servlet源文件和两个class文件。通过查看使用include动作的JSP页面生成的Servlet源文件,发现jspService()方法有类似以下的代码:JspRuntimeLibrary.include(request,response,"header.jsp",out,true),表明使用include动作它并没有将包含的SP文件的代码融入自身,只是运行时引入了被包含页面运行后所产生的结果。

<jsp:forward>动作:使用此动作,可以由当前JSP页面转向同一个web应用中的其他html或者JSP页面。

  1. 转向的同时可以传递参数:
    <jsp:forward page="/register.jsp">
    <jsp:param name="author" value="zhangsan" />
    </jsp:forward>
     
  2. 此动作相当于servlet中的容器内转发:request.getRequestDispacher("/register.jsp").forward(request,response);

<jsp:useBean>动作:<操作JavaBeans>

动作例子:<jsp:useBean class="entity.User" id="user" scope="page" />

解释:class属性代表JavaBean的类型,id表示生成的JavaBean对象的名称,JSP页面转换为Servlet文件以后,JavaBean对象成为Servlet中的一个对象。在执行时,Web容器检查此JavaBean是否存在,存在则使用,不存在则创建。scope指定JavaBean对象的有效范围。

<jsp:getProperty>动作:<操作JavaBeans>

动作例子:<jsp:setProperty name="user" property="name" value="zhangsan" />

解释:name属性说明使用哪个JavaBean对象,property属性说明要对JavaBean的哪个属性赋值,value为所赋的值。如果property属性设定为”*“,表示将自动对应JavaBean属性赋值方法进行赋值。

<jsp:setProperty>动作:<操作JavaBeans>

动作例子:<jsp:getProperty name="user" property="name" />

解释:name属性说明使用哪个对象,property说明读取JavaBean的哪个属性。


JSP内置对象:jsp技术中提供就9个隐含的内置对象,内置对象的含义是指这些对象已经由JSP自动生成好了,开发人员在JSP页面不用声明不用构造就可以直接使用的对象。

对象名称对象类型
outjavax.servlet.jsp.JspWriter
requestjavax.servlet.ServletRequest
responsejavax.servlet.ServletResponse
sessionjavax.servlet.http.HttpSession
applicationjavax.servlet.ServletContext
configjavax.servlet.ServletConfig
pagejava.lang.Object
pageContextjavax.servlet.jsp.PageContext
exceptionjava.lang.Throwable

out对象:

调用这个方法的print()和println()方法,将参数内容输出到web服务器传递到客户的浏览器上。out对象具有缓冲功能。

例:<%out.println("hello world")%>

request对象:

request对象封装客户端发出的请求,有关客户端请求的消息都可以通过request对象获取。request与Servlet中的HttpServletRequest用法一样。

例:<%out.println(request.getParammeter("name"));%>

response对象:

response对象封装对客户端响应的内容,利用它可以设定一些要返回给客户端的信息。response对象的用法和Servlet中HttpServletResponse对象用法一样。

例:<%response.sendRedirect("http://www.baidu.com");%>

session对象:

session对象用法与Servlet中的用法完全一样。在一次会话中,我们访问同一个web应用中的Servlet和JSP页面时,所使用的session对象是同一个session对象。

例:<%session.setAttribute("name","zhangsan")%>

application对象:

通过application对象可以获取当前web应用相关的信息。application对象是web应用的封装对象。

作用一:传递参数,通过application对象可以保存跨用户的共享数据,通过application对象保存的数据,所有用户可以共享。例:<%application.setAttribute("name","zhangsan");application.getAttribute("name")%>

作用二:设置context初始化参数。为一个web应用中所有的Servlet和JSP页面设置共享初始值。例:

<context-param>
<param-name>name</param-name>
<param-value>zhangsan</param-value>
</context-param>

取值:<%out.println(application.getInitParamrter("name"));%> 

作用三:使用log()方法记录日志。application对象提供log()方法,实现日志记录功能,在Tomcat服务器中,记录的日志保存在Tomcat根目录的logs目录下。例:<%application.log("记录日志");%>

config对象:

此对象可以获取Servlet设定的信息,用法与Servlet中的ServletConfig对象用法一致。

page对象:

page对象代表当前所在的JSP页面,其作业等同于java编程中的this关键字的作用。

pageContext对象:

其他内置对象都被自动的加入到pageContext对象中,可以通过它获取其他的JSP内置对象。

exception对象:

专门集中处理异常的内置对象。

例:简单异常信息:<%=exception%>     异常的堆栈信息:<%exception.printStrack(new PrintWriter(out))%>

注:jsp的基本知识点总结,读书笔记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值