JSP&Servlet学习笔记(5): Servlet进阶API
2018-03-10 21:14
561 查看
每个Servlet都必须由Web容器读取Servlet设置信息,才可以真正成为一个Servlet。对于每个Servlet的设置信息,web容器会为其生成一个ServletConfig作为代表对象,我们可以从这个对象取得Servlet初始参数,以及代表整个web应用程序的ServletContext对象。
init():容器启动后产生ServletConfig对象后,会调用Servlet接口的该方法,并将ServletConfig对象当作参数传入。
service():在请求到来容器时,会产生HttpServletRequest与HttpServletResponse对象,并在调用该方法时当作参数传入。
destory():对Servlet的一些善后工作。
ServletConfig就是每个Servlet设置的代表对象,容器会为每个Servlet设置信息产生一个Servlet及ServletConfig实例。GenericServlet同时实现了Servlet与ServletConfig。它的目的就是将初始Servlet调用init()方法传入的ServletConfig封装起来:
在编写Servlet时,如果有一些初始时所要运行的动作,可以重新定义这个无参数的init()方法。
GenericServlet也包括了Servlet与ServletConfig所定义方法的简单实现,实现内容是通过ServletConfig来取得一些相关信息:
所以在继承HttpServlet实现Servlet时,就可以通过这些方法来取得所要的相关信息,而不用直接意识到ServletConfig的存在。
使用标注设置个别Servlet的初始参数,并取得Servlet初始参数如下所示:
当Web应用程序加载Web容器后,生成ServletContext对象作为整个应用程序的代表,并设置给ServletConfig,通过ServletConfig的getServletContext()方法就可以取得ServletContext对象。
该对象有三个常用方法:getRequestDispatcher()、getResourcePaths()
、getResourceAsStream()
1)forward(req, resp)方法:将请求转发给服务器上另外一个Servlet,JSP页面,或者HTML文件;这个方法必须在响应被提交给客户端之前调用,否则抛出异常。方法调用后在响应中的没有提交的内容被自动消除。
2)include(req,resp)方法 :用于在响应中包含其他资源(Servlet,JSP页面或HTML文件)的内容。即请求转发后,原先的Servlet还可以继续输出响应信息,转发到的Servlet对请求做出的响应将并入原先Servlet的响应对象中。
Servlet、ServletConfig、GenericServlet
在Servlet接口上,定义了一个与Servlet生命周期及请求服务相关的init()、service()、destroy()三个方法:init():容器启动后产生ServletConfig对象后,会调用Servlet接口的该方法,并将ServletConfig对象当作参数传入。
service():在请求到来容器时,会产生HttpServletRequest与HttpServletResponse对象,并在调用该方法时当作参数传入。
destory():对Servlet的一些善后工作。
ServletConfig就是每个Servlet设置的代表对象,容器会为每个Servlet设置信息产生一个Servlet及ServletConfig实例。GenericServlet同时实现了Servlet与ServletConfig。它的目的就是将初始Servlet调用init()方法传入的ServletConfig封装起来:
private transient ServletConfig config; public void init(ServletConfig config) throws ServletException { this.config = config; this.init(); } public void init() throws ServletException {}
在编写Servlet时,如果有一些初始时所要运行的动作,可以重新定义这个无参数的init()方法。
GenericServlet也包括了Servlet与ServletConfig所定义方法的简单实现,实现内容是通过ServletConfig来取得一些相关信息:
public ServletConfig getServletConfig() { return config; } public String getInitParameter(String name) { return getServletConfig().getInitParameter(name); } public Enumeration getInitParameterNames() { return getServletConfig().getInitParameterNames(); } public ServletContext getServletContext() { return getServletConfig().getServletContext(); }
所以在继承HttpServlet实现Servlet时,就可以通过这些方法来取得所要的相关信息,而不用直接意识到ServletConfig的存在。
使用ServletConfig
ServletConfig相当于个别Servlet的设置信息代表对象,这意味着可以从中取得Servlet设置信息。ServletConfig定义了getInitParameter()、getInitParameterNames()方法,可以取得设置Servlet时的初始参数。使用标注设置个别Servlet的初始参数,并取得Servlet初始参数如下所示:
... @WebServlet(name = "ServletConfigDemo", urlpatterns = {"/conf"}, initParams = { @WebInitParam(name = "PARAM1", value = "VALUE1"), @WebInitParam(name = "PARAM2", value = "VALUE2") } ) public class ServletConfigDemo extends HttpServlet { private String PARAM1; private String PARAM2; public void init() throws ServletException { PARAM1 = getServletConfig().getInitParameter("PARAM1"); //PARAM1 = getInitParameter("PARAM1"); PARAM2 = getServletConfig().getInitParameter("PARAM2"); //PARAM2 = getInitParameter("PARAM2"); } ... }
使用ServletContext
该接口定义了运行Servlet的应用程序环境的一些行为与观点,可以使用它实现对象来取得所请求资源的URL、设置与储存属性、应用程序初始参数,甚至动态设置Servlet实例。当Web应用程序加载Web容器后,生成ServletContext对象作为整个应用程序的代表,并设置给ServletConfig,通过ServletConfig的getServletContext()方法就可以取得ServletContext对象。
该对象有三个常用方法:getRequestDispatcher()、getResourcePaths()
、getResourceAsStream()
getRequestDispatcher()
该接口中定义了二种方法用于请求转发:1)forward(req, resp)方法:将请求转发给服务器上另外一个Servlet,JSP页面,或者HTML文件;这个方法必须在响应被提交给客户端之前调用,否则抛出异常。方法调用后在响应中的没有提交的内容被自动消除。
2)include(req,resp)方法 :用于在响应中包含其他资源(Servlet,JSP页面或HTML文件)的内容。即请求转发后,原先的Servlet还可以继续输出响应信息,转发到的Servlet对请求做出的响应将并入原先Servlet的响应对象中。
context.getRequestDispatcher("/pages/some.jsp").forword(request, response); context.getRequestDispatcher("/pages/some.jsp").include(request, response);
getResourcePaths()
得到某个目录下的所有文件名,使用方法如下:for(String fileName : getContextConfig().getResourcePaths("/") { ... }
getResourceAsStream()
读取某个文件的内容。相关文章推荐
- JSP&Servlet学习笔记----第4章
- Jsp&servlet学习笔记
- Head First Servlet&Jsp 学习笔记(一) 一些基础知识
- JSP&Servlet学习笔记(7): 过滤器
- Servlet&JSP学习笔记--导航
- Jsp&Servelet 学习笔记- 在Tomcat中的servlet.xml使用Context元素
- Jsp&Servelet 学习笔记- 映射一个Servlet实名到web.xml中
- JSP&Servlet5(一) --- Servlet进阶API
- JSP&Servlet学习笔记----第4章
- JSP&&SERVLET学习笔记(六):getReader(), getInputStream()读取Body内容
- Servlets&JSP学习笔记:作为Servlet
- Jsp&Servelet 学习笔记-对一个Servlet创建多个Mapping
- JSP&Servlet学习笔记----第1/2章
- Servlet&JSP 第五章 进阶API、过滤器与监听器
- JSP&Servlet学习笔记----第1/2章
- JSP&Servlet学习笔记-第三章:请求与响应
- JSP&&SERVLET学习笔记(三):URL模式设置
- JSP&Servlet学习笔记----第3章
- JSP&Servlet学习笔记----第1/2章