二.jsp和Servlet
jsp servlet 是javaEE开发的两个基本成员
jsp servlet filter listener及自定义标签库是本章要讲的内容,他们必须在web应用中才能使用
web.xml文件是配置描述符
配置和管理 jsp servlet fileter listener 自定义标签库 jsp的属性 web首页等
1.1jsp的基本原理
jsp本质上是Servlet,分为两部分, 静态部分包括HTML的标签和静态内容
动态部分由java程序控制动态生成
JSP必须生成servlet才可以执行
每个Jsp页面第一次访问比较慢,因为要等待编译成servlet
jsp输送到客户端的是标准HTML页面
1.2.jsp的使用
<% %> jsp的声明
<% = 表达式%> jsp的输出
jsp的3个编译指令
page 该指令是针对当前页面的指令
include 包含另一个页面 <%@ include file=”demo.jsp”%>
taglib 自定义标签库导入
jsp的七个动态指令
jsp: forward 执行页面转向
jsp:param 传递参数,必须和其他支持参数的标签一起使用
jsp:include 用于动态引入一个jsp页面
jsp:plugin 用于下载一个javabean或applet到客户端执行
jsp:useBean 创建一个javabean实例
jsp:setProperty 设置javabean实例的属性值
jsp:getPrpperty 输出javabean实例的属性值
1)jsp:forward
<jsp:forward page=”relativeUrl |<% =表达式%> ”>
<jsp:param ...>
<jsp:forward />
对于请求参数 param可以通过 HttpServletRequest类的getParameterr()方法获得
2)jsp:include
使用 <%@include...%> 静态包含
简单的理解就是你可以认为 这两个页面代码是写在同一个页面里。
使用 <jsp:include...> 动态包含
当 向这个页面发出请求后。会转发到 include 的哪个页面去执行。 执行完了后又接着执行本页面余下的代码。
<jsp:useBean id=”javaBean的实例名” class=”实现类” scope=”page | request| session| applocation”>
<jsp: setProperty name= “” property=”” value=””>
<jsp:getProperty name= “” property=””>
jsp的9个内置对象
application :
config
exception
out代表jsp页面的输出流用于输出内容形成HTML
page
pageContext该对象表示jsp页面上下文,使用该对象可以访问页面上的共享数据包括page request session applocation
request
response
session 一次会话
PageContext
pageContext.getAttribute(String name) 取page范围的name属性
pageContext.getAttribute(String name ,int scope) scope的取值:
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.APLLOCATION_SCOPE
并且有相对应的setAttribute方法来设置相应的数据
并且PageContext对象通过get方法可以获得其他九个内置对象
如getSession()
getServletContext()//获得application对象
Request
string getParameter(String paramName)
Map getParameterMap()//获取参数名和参数值组成的map对象
String [] getParameterValues( Sting paramName)//获取请求参数名对应的值,当值有多个时,返回多个值
String getHeader(String name) //获取请求头的值
Enumeration getHeaderNames()获取请求头的名称
enumeration getHeaders(String name) 获取指定名称的请求头的多个值
可以代替jsp的动态指令,完成forward和include
getRequestDispatcher(“/a.jsp”).include( request,response);
getRequestDispatcher( “ /a.jsp”).forward(request,response)
Response
getOutputStream() //响应输出字节流
重定向 response.sendRedirect(“a.jsp”);
设置cookie
Cookie c= new Cookie(“username”,”name”);
c.setMaxAge(24*3600);
response.addCookie(c);
Session
Map map= new HashMap();
session.setAttribute(“map”,”map”);
Map map= (Map ) ession.getAttribute(“map”);
2.servlet
servlet是运行在服务器的程序,用来处理客户端的请求和响应,是个特殊的类,继承HttpServlet类,在javaee开发中servlet只是作为控制器
doGet()方法响应get请求
doPost()方法响应post请求
service() 处理请求和响应
init()初始化操作
destroy()销毁操作
servlet和jsp的区别
servlet没有内置对象,必须显式创建 servlet生成静态页面必须通过输出流逐行输出
2.1servlet配置
1)servlet3.0两种配置方法 :注解配置 和web.xml配置
注解配置 @WebServlet ( name=” servlet的名字” value| urlPatterns=” servlet要处理的url”)
在servlet上声明即可
2)web.xml方式配置
<servlet>
<servlet-name> servlet名字</servlet-name>
<servlet-class>servlet类</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> servlet名字</servlet-name>
<url-pattern> /servlet映射的url</url-pattern>
</servlet-mapping>
2.2servlet和jsp的生命周期
servlet创建实例:在客户端第一次发送请求时候或者在web应用启动时(load-on-startup Servlet)
init初始化
处理请求和响应
销毁
配置load-on-startup的两种方式
@WebServlet( loadOnStartup=1)
或者
<servlet>
<load-on-startup>1</load-on-startup>
</servlet>
2.3配置servlet的参数
@WebServlet( initParams=”
@WebInitParam( name= “” value=””),
@WebInitParam( name= “” value=””),
” )
或者 <servlet>
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param >
</servlet>
要想获得参数 需要ServletConfig类的getInitParameter(“参数名”)方法
servletConfig类获得的是当前servlet的配置参数
servletContext类获得的是整个web应用的配置参数
比如数据库的链接信息可以配置里面,增加代码的可移植性
2,4jsp的自定义标签库
自定义标签库是为了取代丑陋的jsp脚本
jsp2开发自定义标签步骤
开发自定义标签处理类
建立一个*.tld文件
在jsp中使用自定义标签
自定义标签类继承一个父类SimpleTagSupport,重写doTag()方法,如果有属性,属性要有setter getter方法
在WEB-INF下创建tld文件,从tomcat例子中复制一个修改之
<%@ taglib uri=”” prefix=””%>
3.Filter
使用Filter的完整流程:Filter对用户请求进行预处理,并将请求交给servlet接收和响应请求,最后Filter对服务器的响应进行后处理
3.1创建Filter类
必须实现Filter接口
该接口定义有三个方法 init destroy doFilter( ServletRequest req,ServletResponse res, FilterChain chain)
3.2配置Filter
注解配置
@WebFilter( filterName=”” urlPattern| value=””)
或者web.xml
<filter></filter>
<filter-mapping><filter-mapping>
类似于servlet的配置
4.Listener
创建实现类
有很多监听器接口
例如:ServletContextListener 这个接口负责监听web应用的开启和关闭
,在开启和关闭时可以做一些动作
配置这个类
@WebListener()修饰listener实现类
或者使用web.xml
<listener>
<listener-class></listerner-class>
</listener>
5.EL表达式语言 expression laguage
el是一种简化的数据访问格式,可以方便的访问jsp的内置对象和javabean组件,避免使用jsp脚本
格式: ${ expression}
5.1支持算术运算符和逻辑运算符
例如${ (1==2)?2:5} 三目运算符
5.2表达式语言可以获取内置对象 共11个
pageContext
pageScope
requestScope
sessionScope
applicationScope
param //用于获取请求参数值
paramValues // 用于获取请求参数值,获得的是一个数组
header 用于获得请求头的参数值
headValues
initParam 用于获取web应用的初始化参数
cookie 用于获得指定的cookie值
例如 ${param[“name”] 等价 ${param.name}
${sessionScope[“user”]}
${cookie[“name”].value}
5.3表达式语言的自定义函数
类似于自定义标签库 编写函数处理类
使用标签库定义函数 tld
使用函数
6.Tag File
简化的自定义标签 不用写标签处理类和标签库文件
建立tag文件 tag file 代替标签处理类
在页面使用这个标签 需要先导入标签库<%@ taglib prefix=”” tagdir=”path”%>