java servlet学习(一)
Servlet学习(二)Request和Response
Servlet学习(三)Servlet请求与cookie
Servlet学习(三)图解Session
Servlet学习(四)ServletContext 和ServletConfig
JavaWeb信息管理系统

JSP

JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

特点

  1. 本质上还是 Servlet
  2. 跨平台,一次编写处处运行
  3. 组件跨平台
  4. 健壮性和安全性
  5. 页面中的动(控制变动内容的部分)/静(内容不需变动的部分)区域以分散但又有序的形式组合在一起,能使人更直观地看出页面代码的整体结构,也使得设计页面效果和程序逻辑这2部分工作容易分离(外观视图与逻辑分离)。从而方便分配人员并发挥各自长处,实现高效地分工合作。
  6. 可与其它企业级Java技术相互配合。JSP可以只专门负责页面中的数据呈现,实现分层开发。

JSP访问原理

浏览器发起请求,请求 JSP,请求被 Tomcat 服务器接收,执行JspServlet 将请求的 JSP 文件转义成为对应的 java 文件(也是Servlet),然后执行转义好的 java 文件。

JSP指令

JSP指令控制JSP编译器如何去生成servlet

Jsp的静态引入(JSP的包含指令)

静态引入
<%@include file=“要引入的jsp文件的相对路径” %>
特点:
会将引入的jsp文件和当前jsp文件转译成一个java(Servlet)文件使用。
在网页中也就显示了合并后的显示效果。
注意:
静态引入的jsp文化不会单独转译成java(Servlet)文件。
当前文件和静态引入的jsp文件中不能够使用java代码块声明同名变量。

Jsp的page指令

<%@page 属性名=“属性值” 属性名=“属性值”…%>
language:声明jsp要被转译的语言。
import:声明转译的java文件要导入的包,不同的包使用逗号隔开。
pageEncoding:设置jsp文件的数据编码格式。
contentType=“text/html; charset=utf-8” 设置jsp数据响应给浏览器时,浏览器的解析和编码格式。
session:设置转译的servlet中是否开启session支持,默认开启,true表示开启。false表示关闭。
errorPage:设置jsp运行错误跳转的页面.
extends:设置jsp转译的java文件要继承的父类(包名+类名)。

注意:
在同一个JSP文件中只有“import”导入页面指令可以被多次使用。

标签库指令

标签库指令taglib –标签库指令描述了要使用的JSP标签库。该指令需要指定一个前缀prefix(和C++的命名空间很类似)和标签库的描述URI:
eg: <%@ taglib prefix = “myprefix” uri = “taglib/mytag.tld” %>

JSP代码块

局部代码块

eg: <% java代码 %>
局部代码块中声明的java代码会被原样转译到jsp对应的servlet文件的_JspService方法中代码块中声明的变量都是局部变量。
局部代码块在servlet进行请求逻辑处理,使用jsp进行页面展现。but书写麻烦,阅读困难。

全局代码块

eg:<%! java代码 %>
声明的java代码作为全局代码转译到对应的servlet类中。全局代码块声明的代码,需要使用局部代码块调用。

脚本段语句

eg:<%=变量名或方法 %>
快速的获取变量或者方法的返回值作为数据响应给浏览器。

JSP动作

JSP动作是一系列可以调用内建于网络服务器中的功能的XML标签。

jsp:include

动态引入
<jsp:include page=“要引入的jsp文件的相对路径”></jsp:include>
特点:
会将引入的jsp文件单独转译,在当前文件转译好的java文件中调用引入的jsp文件的转译文件。
在网页中显示合并后的显示效果。
注意:
动态引入允许文件中声明同名变量。

jsp:param

可以在jsp:include, jsp:forward或jsp:params块之间使用。指定一个将加入请求的当前参数组中的参数。


<jsp:forward page="subpage.jsp" > 
     <jsp:param  name= "forwardedFrom"  value= "this.jsp"  /> 
</jsp:forward>

jsp:forward

转发标签
使用:
<jsp:forward page=“要转发的jsp文件的相对路径”></jsp:forward>
特点:
一次请求
地址栏信息不改变。
注意:
在转发标签的两个标签中间除了写<jsp:param name=“str” value=“aaa” />子标签不会报错,其他任意字符都会报错。
<jsp:param name=“str” value=“aaa” />
name属性为附带的数据的键名
value为附带的数据内容
注意:会将数据以?的形式拼接在转发路径的后面。

javaBean

jsp:getProperty 从指定的JavaBean中获取一个属性值。
jsp:setProperty 在指定的JavaBean中设置一个属性值。
jsp:useBean 创建或者复用一个JavaBean变量到JSP页。

eg:


<jsp:useBean id="myBean" class="com.foo.MyBean" scope="request" /> 
<jsp:getProperty name="myBean" property="lastChanged" /> 
<jsp:setProperty name="myBean" property="lastChanged" value="<%= new Date()%> " />

scope属性可以是request, page, session or application,它有以下用意:

  • request— 该属性在请求的生命周期内有效,一旦请求被所有的JSP页处理完后,那么该属性就不可引用。
  • page— 该属性只是当前页中有效。
  • session— 该属性在用户会话的生命周期内有效。
  • application—该属性在各种情况下都有效,并且永远不会被变为不可引用,和全局变量global variable相同。

上述例子将会用一个创建一个类的实例,并且把该实例存储在属性中,该属性将在该请求的生命周期内有效。它可以在所有被包含或者从主页面(最先接收请求的页面)转向到的JSP页之间共享。

JSP的内置对象

jsp文件在转译成其对应的Servlet文件的时候自动生成的并声明的对象。可在jsp页面中直接使用。
内置对象在jsp页面中使用,使用局部代码块或者脚本段语句来使用。不能够在全局代码块中使用。

  • pageContext:页面上下文对象,封存了其他内置对象。封存了当前jsp的运行信息。
    注意:每个Jsp文件单独拥有一个pageContext对象。
    作用域:当前页面。
  • request:封存当前请求数据的对象。由tomcat服务器创建。一次请求
  • session:此对象用来存储用户的不同请求的共享数据的。一次会话
  • application:也就是ServletContext对象,一个项目只有一个。存储用户共享数据的对象,以及完成其他操作。项目内
  • response:响应对象,用来响应请求处理结果给浏览器的对象。设置响应头,重定向。
  • out:响应对象,Jsp内部使用。带有缓冲区的响应对象,效率高于response对象。
  • page:代表当前Jsp的对象。相当于java中的this。
  • exception:异常对象。存储了当前运行的异常信息。
    注意:使用此对象需要在page指定中使用属性isErrorPage="true"开启。
  • config:也就是ServletConfig,主要是用来获取web.xml中的配置数据,完成一些初始化数据的读取。

作用域对象

  • pageContext:当前页面.解决了在当前页面内的数据共享问题。获取其他内置对象。
  • request:一次请求。一次请求的servlet的数据共享。通过请求转发,将数据流转给下一个servlet。
  • session:一次会话.一个用户的不同请求的数据共享。将数据从一次请求流转给其他请求。
  • application:项目内.不同用户的数据共享问题。将数据从一个用户流转给其他用户。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐