plugin>元素用于在浏览器中播放或显示一个对象(典型的就是applet和Bean),而这种显示需要在浏览器的java插件,因此有可能的话还要下载一个java插件用于执行它。
2.3Jsp内置对象
JSP内置对象是指由JSP容器加载的,不用声明就可以直接在JSP页面中使用的对象。
JSP中有9个内置对象,下表所示。
JSP内置对象
属性名
说明
作用域
request
客户端的请求,包含所有从浏览器发往服务器的请求信息
request
response
返回客户端的响应
page
session
会话对象,表示用户的会话状态
session
application
应用上下文对象,作用于整个应用程序
application
out
输出流,向客户端输出数据
page
pageContext
用于存储当前JSP页面的相关信息
page
config
JSP页面的配置信息对象
page
page
表示JSP页面的当前实例
page
exception
异常对象,用于处理JSP页面中的错误
page
2.3.1request对象
request对象是javax.servlet.httpServletRequest类型的对象。
该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。
(包括头信息、系统信息、请求方式以及请求参数等)。
request对象的作用域为一次请求。
2.3.2response对象
response代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。
response对象也具有作用域,它只在JSP页面内有效。
2.3.3session对象
session对象是由服务器自动创建的与用户请求相关的对象。
服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。
session对象内部使用Map类来保存数据,因此保存数据的格式为“Key/value”。
session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
2.3.4application对象
application对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。
与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
2.3.5out对象
out对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。
在使用out对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。
待数据输出完毕后,要及时关闭输出流。
2.3.6pageContext对象
pageContext对象的作用是取得任何范围的参数,通过它可以获取JSP页面的out、request、reponse、session、application等对象。
pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用pageContext对象。
2.3.7config对象
config对象的主要作用是取得服务器的配置信息。
通过pageConext对象的getServletConfig()方法可以获取一个config对象。
当一个Servlet初始化时,容器把某些信息通过config对象传递给这个Servlet。
开发者可以在web.xml文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
2.3.8page对象
page对象代表JSP本身,只有在JSP页面内才是合法的。
page隐含对象本质上包含当前Servlet接口引用的变量,类似于Java编程中的this指针。
2.3.9exception对象
exception对象的作用是显示异常信息,只有在包含isErrorPage="true"的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。
excepation对象和Java的所有对象一样,都具有系统提供的继承结构。
exception对象几乎定义了所有异常情况。
在Java程序中,可以使用try/catch关键字来处理异常情况;如果在JSP页面中出现没有捕获到的异常,就会生成exception对象,并把exception对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的exception对象。
例如:
在jsp4.jsp页面,添加<%@pageerrorPage="error.jsp"%>指定错误处理页面,并在当前页面发生一个异常信息。
在error.jsp页面添加<%@pageisErrorPage="true"%>指定当前页面是错误处理页面,将错误信息显示出来。
二、Servlet知识点回顾
3.1Servlet使用配置
创建Servlet需要首先需要创建一个Servlet类,并且这个类需要继承HttpServlet,然后重写doGet()/doPost()方法实现业务逻辑流程。
TestServlet.java代码如下:
publicclassTestServletextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
publicvoidinit(ServletConfigconfig)throwsServletException{
//TODOAuto-generatedmethodstub
System.out.println("进入TestServlet。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
");
}
publicvoiddestroy(){
//TODOAuto-generatedmethodstub
System.out.println("销毁TestServlet。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
");
}
protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
//TODOAuto-generatedmethodstub
System.out.println("调用service()方法。
。
。
。
。
。
");
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriterout=response.getWriter();
out.append("welcometo英谷教育");
out.flush();
}
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
System.out.println("调用doGet()方法。
。
。
。
。
。
。
。
。
。
。
。
");
}
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
System.out.println("调用doPost()方法.................");
}
}
其次需要配置Web.xml文件,在该文件中指定自定义的Servlet的信息即可。
Web.xml中Servlet的配置信息如下:
TestServlet
com.hyg.servlet.TestServlet
TestServlet
/TestServlet
注意:
是自定义的servlet名称(唯一);用于指定当前servlet所在的类路径;用于指定进入当前servelt时访问的url地址。
3.2Servlet生命周期
Servlet生命周期概括为以下几个阶段:
1)装载Servlet:
这项操作一般是动态执行的,有些服务器提供了相应的管理功能,可以在启动的时候就装载Servlet;
2)创建一个Servlet实例:
容器创建Servlet的一个实例对象;
3)初始化:
容器调用init()方法对Servlet实例进行初始化;
4)服务:
当容器接收到对此Servlet的请求时,将调用service()方法响应客户的请求;
5)销毁:
容器调用destroy()方法销毁Servlet实例。
3.3重定向和请求转发
3.3.1重定向
重定向是指页面重新定位到某个新地址,之前的Request失效,进入一个新的Request,且跳转后浏览器地址栏内容将变为新的指定地址。
重定向是通过HttpServletResponse对象的sendRedirect()来实现,该方法用于生成302响应码和Location响应头,从而通知客户端去重新访问Location响应头中指定的URL,其语法格式如下:
pubilcvoidsendRedirect(java.lang.Stringlocation)throwsjava.io.IOException
其中:
✧location参数指定了重定向的URL,它可以是相对路径也可是绝对路径。
sendRedirect()不仅可以重定向到当前应用程序中的其他资源,还可以重定向到其他应用程序中的资源,例如:
response.sendRedirect("");
3.3.2请求转发
请求转发是指将请求再转发到另一页面,此过程依然在Request范围内,转发后浏览器地址栏内容不变。
请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发到另外一个资源,并让该资源对浏览器的请求进行响应。
RequestDispatcher接口有两个方法:
✧forward()方法:
请求转发,可以从当前Servlet跳转到其它Servlet;
✧include()方法:
引入其他Servlet的内容。
RequestDispatcher是一个接口,通过使用HttpRequest对象的getRequestDispalcher()方法可以获得该接口的实例对象,例如:
RequestDispatcherrd=request.getRequestDispatcher(path);
rd.forward(request,response);
3.3.3重定向和请求转发的区别
1、请求转发只能将请求转发给同一个Web应用中的组件,而重定向不仅可以重定向到当前应用程序中的其他资源,还可以重定向到其他站点的资源。
2、重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而请求转发访问过程结束后,浏览器地址栏保持初始的URL地址不变。
3、请求转发的调用者与被调用者之间共享相同的request对象和response对象;而重定向的调用者和被调用者使用各自的request对象和response对象,它们属于两个独立的请求和响应过程。
3.4Session
3.4.1session生命周期
Session生命周期经过以下几个过程:
1)客户端向服务器第一次发送请求的时候,request中并无SessionID。
2)此时服务器会创建一个Session对象,并分配一个SessionID。
Serssion对象保存在服务器端,此时为新建状态,调用session.isNew()返回true。
3)当服务器端处理完毕后,会将SessionID通过response对象传回到客户端,浏览器负责保存到当前进程中。
4)当客户端再次发送请求时,会同时将SessionID发送给服务器。
5)服务器根据传递过来的SessionID将这次请求(request)与保存在服务器端的Session对象联系起来。
此时Session已不处于新建状态,调用session.isNew()返回false。
6)循环执行过程3-5,直到Session超时或销毁。
3.4.2Session的常用方法
3.4.2.1获取session
HttpSessionsession=request.getSession();//获取当前Session
3.4.2.2在session中存取数据
用于存取数据的方法有:
✧setAttribute():
用于在Session对象中保存数据,数据以Key/Value映射形式存放。
✧getAttribute():
从Session中提取指定Key对应的Value值。
向Session对象中保存数据的示例代码