JavaEEJSPServlet常见题Word格式.docx
- 文档编号:20965843
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:31
- 大小:166.53KB
JavaEEJSPServlet常见题Word格式.docx
《JavaEEJSPServlet常见题Word格式.docx》由会员分享,可在线阅读,更多相关《JavaEEJSPServlet常见题Word格式.docx(31页珍藏版)》请在冰豆网上搜索。
4.列出Servlet的常用类库。
A.Servlet基本类:
Servlet基本类是Servlet需要直接或间接继承的接口和抽象类.
i.Javax.servlet.Servlet接口
Voidinit(ServletConfigconfig)throwsServletException
初始化Servlet
ServletConfiggetServletConfig()
返回传递到Servlet的init()方法的ServletConfig对象
Voidservice(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException
处理Request对象中描述的请求,使用Response对象返回请求的结果
StringgetServetInfo()
返回描述Servlet的一个字符串
Voiddestroy()
当Servlet将要卸载时有Servlet引擎调用
ii.Javax.Servlet.GenericServlet抽象类
Voiddestroy()
卸载Servlet
StringgetInitParameter(Stringname)
返回具有制定名称的初始化参数值.通过调用config.getInitParameter(name)实现
ServletConfiggetServletConfig()
返回传递到init()方法的ServletConfig对象
StringgetServletInfo()
Voidinit()throwsServletException
默认方法,可以使用super.init(config)调用父类的初始化信息
Voidlog(Stringmsg)
编写注册Servlet的入口,为此调用Servlet上下文的log()方法,Servlet的名字被加到消息文本的开头.
Voidlog(Stringmsg,Throwablet)
编写一个入口和Servlet注册的栈轨迹.此方法也是ServletContext中相应方法的一个副本
Abstractvoidservice(Requestrequest,Responseresponse)throwsServletException,IOException
用Servlet引擎调用为请求对象描述的请求提供服务.这是GenericServlet中唯一的抽象方法.也是唯一被子类覆盖的方法.
iii.Javax.servlet.httpHttpServlet抽象类
doGet()方法
通过service()方法调用,用于HTTP的GET请求.GET请求可供客户端向服务器发送表单数据.有了GET请求.这些表单数据就会附带在浏览器发送的URL后面,作为查询字符串发送给服务器.可发送的表单数据的数量有URL允许的最大长度来限制.
ProtectedvoiddoGet(HttpServletRequestrequest,HttpservletResponseresponse)throwsServletException,java.io.IOException
doPost()方法
由服务器通过service()方法调用,用于处理HTTP的POST请求.POST请求使客户端向服务器发送表单数据.有了POST请求,这些表单数据就会别单独发送给服务器,而不是被追加到URL后面,这样就可以实现发送大量表单数据的目的.
ProtectedvoiddoPost(HttpServletRequestrequest,HttpservletResponseresponse)throwsServletException,java.io.IOException
doHead()方法
由服务器通过service()方法调用,用于处理HTTP的HEAD请求.HEAD请求使客户端仅能检索响应信息的标题,而不是检索主体信息.
ProtectedvoiddoHead(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,java.io.IOException
doPut()方法
由服务器通过service()方法调用,用于处理HTTP的PUT请求.PUT请求可供客户端把一个文件放到服务器上,类似通过FTP向服务器发送文件
ProtectedvoiddoPut(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,java.io.IOException
doOptions()方法
由服务器通过service()方法调用,用于处理HTTP的OPTIONS请求.OPTIONS请求确定服务器支持哪个doXXX()方法,并通过一个标题向客户端传送信息.
ProtectedvoiddoOptions(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,java.io.IOException
doDelete()方法
由服务器通过service()方法调用,用于处理HTTP的DELETE请求.DELETE请求可供客户端从服务器上删除一个文档或者Web页面.
ProtectedvoiddoDelete(HttpservletRequestrequest,HttpServletResponseresponse)throwsServletException,java.io.IOException
doTrace()方法
由服务器通过service()方法调用,用于处理HTTP的TRACE请求.TRACE请求返回随TRACE请求发送的标题,会送给客户端.
ProtectedvoiddoTrace(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,java.io.IOException
doLastModified()方法
用于返回请求资源上次被修改的时间,返回值表示从1970年1月1日午夜算起的毫秒数
ProtectedlonggetLastModefied(HttpServletRequestrequest)
B.Web请求响应类:
直接对应于Web请求和响应,在Servlet和Web容器之间交互传递信息.当Web容器通过Http协议接收到客户的请求后,会将其转化为HttpServletRequest对象,然后传递给Servlet.Servlet可以通过这些类理解客户的请求,将其处理后的内容通过HttpServletResponse回复到Web容器.Web容器进行整理后用HTTP协议向客户端传送相应.
1.javax.servlet.ServletRequest接口
2.javax.servlet.ServletResponse接口
3.javax.servlet.ServletInputStream与ServletOutputStream接口
4.javax.servlet.HttpServletRequst与javax.servlet.HttpServletResponse接口
javax.servlet.SevletConfig接口
javax.servlet.ServletContext接口
C.Servlet异常类
D.RequestDispatcher接口
5.简介Servlet的生命周期。
发送请求
解析请求
创建一个实例
调用init()方法
输出响应信息
返回响应
调用destory()方法
a)Servlet容器装载Servlet类并实例化一个Servlet实例对象;
b)Servlet容器调用该实例对象的init()方法进行初始化;
c)如果Servlet容器收到对该Servlet的请求,则调用此实例对象的service()方法处理请求并返回响应结果.
d)Servlet容器在卸载该Servlet实例前调用他的destroy()方法.
init()
destroy()
6.在JavaWeb项目中,如何配置一个Servlet实例?
(1)先在webproject中新建一个继承httpservlet的servlet类,重写其中的dopsot()和doget()方法;
(2)在web.xml中进行配置,代码如下
<
servlet>
servlet-name>
Test<
/servlet-name>
<
servlet-class>
test1.Test<
/servlet-class>
/servlet>
servlet-mapping>
<
url-pattern>
/Test<
/url-pattern>
/servlet-mapping>
7.Servlet如何实现重定向?
答:
在servlet/JSP编程学习中,发现有两种方法可以实现服务端输出重定向,一种是通过forward方法(例如JSP中的<
jsp:
forwardpage=”OtherPage.jsp”/>
),另一种则是通过运用javax.servlet.http.HttpServletResponse接口的sendRedirect方法(例如response.sendRedirect(“OtherPage.jsp”);
两种方法有什么区别和联系:
前者是利用服务器端先将数据输出到缓冲区的机制,在把缓冲区(buffer)的内容发送到客户端之前,原来的不发送,改为发送该页面的内容,如果在<
JSP:
FORWORD>
之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意.
后者通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。
该方法可以接受绝对的或相对的URLs。
如果传递到该方法的参数是一个相对的URL,那么Web
container在将它发送到客户端前会把它转换成一个绝对的URL。
如果地址是相对的,没有一个’/’,那么Web
container就认为它是相对于当前的请求URI的。
8.如何区别servletConfig&
ServletContext?
对于web容器来说,ServletContext接口定义了一个servlet环境对象,这个对象定义了一个在servlet引擎上的servlet的视图。
通过使用这个对象,servlet可以记录事件,得到资源并得到来自servlet的引擎类。
servlet容器在启动时会加载web应用,并为每个web应用创建唯一的servletcontext对象,可以把ServletContext看成是一个Web应用的服务器端组件的共享内存,在ServletContext中可以存放共享数据,他提供了4个读取和设置共享数据的方法。
具体见api帮助文档。
另外,ServletContext对象只在web应用被关闭的时候才被销毁,不同的web应用,ServletContext各自独立存在。
一个web应用由jsp,servlet,javabean等web组件的集合构成,每一个web应用,容器都会有一个背景对象,而javax.servlet.ServletContext接口就提供了访问这个背景对象的途径。
你可以通过一个servlet实例的getServletContext()方法得到该servlet运行其中的这个背景对象,从这个背景对象中你可以访问如下信息资源:
(1)初始化参数
(2)存储在背景中的对象
(3)与背景关联的资源
(4)日志
最后针对ServletContext我自己的总结是:
ServletContext即servlet容器,其内提供的方法可以在同一web应用下的所有servlet中被使用
而对于config对象来说,他与context相比,就有了很大的局限性。
当ServletConfig对象在servlet中被实例化后,对任何客户端在任何时候访问有效。
但是一个servlet的ServletConfig对象不能被另一个servlet访问,也就是说,在本servlet声明后的ServletConfig只能在本servlet内被访问,属于内部持久有效的变量。
9.什么是监听器?
如何在JavaWeb项目中使用监听器?
监听器:
专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。
JavaWeb项目监听器的使用:
<
1>
ServletContextListener接口用于监听ServletContext对象的创建和销毁事件。
a.当ServletContext对象被创建时,激发contextInitialized(ServletContextEventsce)方法。
b.当ServletContext对象被销毁时,激发contextDestroyed(ServletContextEventsce)方法。
2>
HttpSessionListener接口用于监听HttpSession对象的创建和销毁。
a.创建一个Session时,激发sessionCreated(HttpSessionEventse)方法
b.销毁一个Session时,激发sessionDestroyed(HttpSessionEventse)方法。
3>
ServletRequestListener接口用于监听ServletRequest对象的创建和销毁。
a.创建一个ServletRequest对象时,激发requestInitialized(ServletRequestEventsre)方法。
b.销毁一个Session时,激发requestDestroyed(ServletRequestEventsre)方法。
4>
下面是以ServletContext对象为例,对它的创建和销毁的代码示例:
publicclassTestServletContextListenerimplementsServletContextListener{
publicvoidcontextDestroyed(ServletContextEventarg0){
//用contextDestroyed方法来实现ServletContext对象的销毁。
System.out.println("
contextDestroyed..."
);
}
publicvoidcontextInitialized(ServletContextEventarg0){
//用contextInitialized方法来实现ServletContext对象的创建。
contextInitialized..."
5>
下面是ServletContext对象监听器在web.xml文件中的注册代码示例:
listener>
listener-class>
text.listener.TestServletContextListener<
/listener-class>
/listener>
10.建立和使用监听器的步骤。
Servlet规范为每种事件监听器都定义了相应的接口,开发人员编写的事件监听器程序只需实现这些接口,web服务器根据用户编写的事件监听器所实现的接口把它注册到相应的被监听对象上。
一些Servlet事件监听器需要在web应用程序的web.xml文件中进行注册,一个web.xml文件中可以注册多个Servlet事件监听器,web服务器按照它们在web.xml文件中的注册顺序来加载和注册这些Serlvet事件监听器。
Serlvet事件监听器的注册和调用过程都是由web容器自动完成的,当发生被监听的对象被创建,修改或销毁事件时,web容器将调用与之相关的Servlet事件监听器对象的相关方法,开发人员在在这些方法中编写的事件处理代码即被执行。
由于一个web应用程序只会为每个事件监听器创建一个对象,有可能出现多个线程同时调用同一个事件监听器对象的情况,所以,在编写事件监听器类时,应考虑多线程安全的问题。
11.分析8个监听者。
想知道一个Web应用上下文中是否增加、删除或替换了一个属性
ServletContextAttributeListener
(attributeAdded,attributeRemoved,attributeReplaced)
ServletContextAttributeEvent
你想知道有多少个并发用户,也就是说想跟踪活动的会话
HttpSessionListener(sessionCreated,sessionDestroyed)
HttpSessionEvent
每次请求到来时想知道以便建立日志记录.
ServletRequestListener(requestlnitialized,requestDestroyed)
ServletRequestEvent
你想知道什么时候增加,删除或替换一个请求属性.
ServletRequestAttributeListener(attributeAdded,attributeRemoved,attributeReplaced)
ServletRequestAttributeEvent
你有一个属性类(这个类表示的对象将被放在一个属性中),而且你希望这个类型的对象绑定到一个会话或者会话删除时得到通知.
HttpSessionBindingListener(valueBound,valueUnbound)
HttpSessionBindingEvent
你想知道什么时候增加,删除或替换一个会话属性.
HttpSessionAttributeListener(attributeAdded,attributeRemoved,attributeReplaced)
你想知道是否粗行间或撤销了一个上下文
ServletContextListener(contextlnitialized,contextDestroyed)
ServletContextEvent
你有一个属性类,而且希望此类对象绑定的会话迁移到另一个JVM时得到通知
SessionActivationListener(sessionDidActivate,sessionWillPassivate)
12.如何让Servlet做到线程安全?
Servlet线程不安全,主要原因在于实例变量的使用不当。
解决办法有三:
(1)
让Servlet类实现SingleThreadModel接口,该接口指定系统如何处理对同一个Servlet的调用,如果一个Servlet被指定实现这个接口,那么,在这个Servlet中的service方法将不会在两个线程中同时执行,也就是说执行完一个后再执行下一个请求的service,当然也就不存在线程不安全的问题了。
代码如下:
publicclassSecurityTestextendsHttpServletimplementsSingleThreadModel{}
其实这方法也就相当于是同步方法的效果吧。
(2)同步对共享数据的操作。
我们所熟悉的就是用synchronized关键字,这样能保证一次只有一个线程来操作被保护的区段。
(3)避免使用实例变量,而使用局部变量。
因为Servlet线程不安全的原因是由实例变量引起,所以我们可以避免使用实例变量,而使用局部变量,线程之间很难直接访问局部变量,这样就从根本上解决了这一问题。
在本例子中,就是将output放在service方法中当局部变量。
13.HttpServletRequest和HttpServletResponse中的常用方法?
HttpServletRequest的常用方法:
getAttribute()、setAttribute()、removeAttribute()、getAttributeNames()、getCharaterEncoding()、getParamter()、getPa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaEEJSPServlet 常见