在运行 Servlet 程序时,可能需要一些辅助信息,例如,文件使用的编码、使用 Servlet 程序的共享信息等,这些信息可以在 webxml 文件中使用一个或多个 <init-param> 元素进行配置。当 Tomcat 初始化一个 Servlet 时,会将该 Servlet 的配置信息封装到 ServletConfig 对象中,此时可以通过调用 init(ServletConfig config) 方法将 ServletConfig 对象传递给 Servlet 。
ServletConfig 接口中定义了一系列获取配置信息的方法,如表 1 所示。
当访问 Servlet 时,所有请求消息将被封装到 >
Spring管理filter和servlet
在使用spring容器的web应用中,业务对象间的依赖关系都可以用contextxml文件来配置,并且由spring容器来负责依赖对象 的创建。如果要在filter或者servlet中使用spring容器管理业务对象,通常需要使用
WebApplicationContextUtilsgetRequiredWebApplicationContext(getServletContext())来获得WebApplicationContext,然后调用WebApplicationContextgetBean("beanName")来获得对象的引用,这实际上是使用了依赖查找来获得对象,并且在filter或者servlet代码中硬编码了应用对象的bean名字。为了能在filter或者servlet中感知spring中bean,可采用如下步骤来实现:
1- 将filter或者servlet作为bean定义在contextxml文件中,和要应用的bean定义放在一起;
2- 实现一个filter代理或者servlet代理,该代理用WebApplicationContext来获得在contextxml中定义的filter或者servlet的对象,并将任务委托给contextxml中定义的filter或者servlet
3- 在webxml中用ContextLoaderListener来初始化spring 的context,同时在filter代理或者servlet代理的定义中用初始化参数来定义contextxml中filter或者servlet的bean名字(或者直接受用代理的名称获得相应的filter或者servlet的名称)。
4- 在webxml中定义filter代理或者servlet代理的mapping
利用这种方式就将filter或者servlet和业务对象的依赖关系用spring 来进行管理,并且不用在servlet中硬编码要引用的对象名字。
具体实例如下:
Filter
1 在applicationContextxml中定义filter
<bean id="springFilter" class="comnetqinfilterSpringFilter">
<property name="name">
<value>SpringFilter</value>
</property>
</bean>
说明:comnetqinfilterSpringFilter为实现了javaxservletFilter接口的filter
2 实现filter代理
实际上,filter代理不需要我们自己来实现,Spring提供了两种现成的filter代理
orgspringframeworksecurityutilFilterToBeanProxy,
orgspringframeworkwebfilterDelegatingFilterProxy,两者只是在webxml中的配置上略有不同,下面就让我们一起看看如何在webxml中进行配置。
3 配置webxml
Ø 初始化spring的context
因为是使用spring来管理,所以在使用filter前先要初始化spring的context,一般来说配置如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContextxml
</param-value>
</context-param>
<listener>
<listener-class>
orgspringframeworkwebcontextContextLoaderListener
</listener-class>
</listener>
Ø Filter配置:
² FilterToBeanProxy
<filter>
<filter-name> springFilter </filter-name>
<filter-class>
orgspringframeworksecurityutilFilterToBeanProxy
</filter-class>
<init-param>
<param-name>targetBean</param-name>
<param-value>springFilter</param-value>
</init-param>
</filter>
说明:需要为FilterToBeanProxy提供上下文参数,这里我们配置的是targetBean属性,它告诉spring在context中查找的bean名称,所以当请求被过滤器拦截后FilterToBeanProxy会在applicationContextxml中会查找id为springFilter的bean
我们也可以配置targetClass属性,意思就是查找该类型的bean
² DelegatingFilterProxy
<filter>
<filter-name>springFilter</filter-name>
<filter-class>
orgspringframeworkwebfilterDelegatingFilterProxy
</filter-class>
</filter>
说明:使用DelegatingFilterProxy时不需要配置任何参数,spring会根据filter-name的名字来查找bean,所以这里spring会查找id为springFilter的bean
4 配置filter的mapping
<filter-mapping>
<filter-name>springFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
OK!filter配置完成。推荐使用DelegatingFilterProxy,应为配置上更简单。
Servlet
Servlet的配置与Filter的配置十分相似
1 在applicationContextxml中定义servlet
<bean id="springServlet" class="comnetqinservletSpringServlet">
<property name="name">
<value>SpringServlet</value>
</property>
</bean>
说明:comnetqinservletSpringServlet继承自
javaxservlet>
Servlet是一个实现了Servlet接口的类,一个与访问协议和平台无关的、运行在Servlet容器中的Java程序。
针对Servlet实现技术,SUN公司提供了一套标准的Java Servlet API以便于更快速、规范地开发Servlet程序。这套Servlet API中,最重要的两个软件包是:javaxservlet、javaxservlet>
javaxservlet是一个与通信协议无关的通用软件包;javaxservlet>
在javaxservle中,包含着一套常用接口,负责承担指定的任务。下表中列出了常用的类和接口:
主要类结构图:
javaxservlet软件包:
javaxservlet包中定义了与通信协议无关的接口和类。
常用接口:
RequestDispatcher、Servlet、ServletConfig、ServletContext、ServletRequest、ServletResponse。
常用类:
GenericServlet、ServletInputStream、ServletOutputStream。
1、RequestDispatcher接口
public interface RequestDispatcher;
资源调度器接口,用于定义一个在服务器内部直接实现资源转发的对象。
RequestDispatcher对象由Servlet容器创建,用于封装并调度由一个特定的URL定义的服务器资源。
(1)请求传递方法
public void forward(ServletRequest request,
ServletReponse response) throws ServletException,IOException
从一个Servlet向服务器上的另一个资源传递请求。
将请求转发给其他资源时,将由被调用的资源负责对请求作出响应,而原先Servlet的执行则终止。
public void include(ServletRequest request,
ServletResponse response) throws ServletException,IOException
从一个Servlet向服务器上的另一个资源传递请求。
将请求转发给其他资源时,被调用的Servlet对该请求作出的响应将并入原先的响应对象中,原先的Servlet还可以继续输出响应消息。
2、Servlet接口
public interface Servlet;
开发一个Servlet需要实现的基础接口。
接口中定义了5个方法:
init():Servlet初始化方法,通过init()方法可以获得容器创建的ServletConfig对象
service():请求处理方法
destroy():Servlet实例销毁方法
getServletConfig():获取ServletConfig配置对象方法
getServletInfo():获取Servlet相关信息方法
(1)初始化方法
public void init(ServletConfig config) throws ServletException
Servlet容器会在Servlet实例化之后,调用init方法对Servlet对象进行初始化,该方法由Servlet容器顺序调用,无需Servlet自身考虑何时执行。
(2)服务方法
public void service(ServletRequest request,
ServletResponse response) throws ServletException,IOException
当Servlet容器接收到客户请求时,调用service方法响应客户请求,service方法在Servlet实例化、初始化之后被调用,并且可以被多次调用。
(3)销毁方法
public void destroy()
当Servlet实例从服务器中移除或服务停止时,Servlet容器调用destroy方法销毁Servlet实例。
(4)获取Servlet配置对象方法
public ServletConfig getServletConfig()
获取一个由Servlet容器创建的ServletConfig配置对象,这个对象常常用在Servlet初始化方法中,将初始化参数封装在ServletConfig对象中,然后传递给Servlet。
(5)获取Servlet相关信息方法
public String getServletInfo()
获取关于Servlet的一些相关信息,返回的字符串是纯文本格式而不带有任何标记(例如:HTML、XML等)。
3、ServletConfig接口
public interface ServletConfig;
Servlet配置信息接口,在Servlet初始化时,Servlet容器将Servlet初始化参数封装在ServletConfig对象中,并传递给Servlet,一个Servlet实例只有一个ServletConfig对象。
接口中,只定义了4个方法:
getInitParameter():获取Servlet指定初始化参数的值
getInitParameterNames():获取Servlet所有初始化参数名称
getServletContext():获取Servlet容器为WEB应用创建的Servlet上下文环境对象ServletContext
getServletName():获取Servlet名称
(1)获取初始化参数方法
public String getInitParameter(String name)
根据初始化参数名称,获取Servlet指定初始化参数的值,如果指定的参数不存在,返回空值null。
public Enumeration getInitParameterNames()
获取Servlet所有初始化参数名称,如果Servlet没有初始化参数,返回一个空列表。
(2)获取Servlet上下文环境方法
public ServletContext getServletContext()
获取Servlet容器为WEB应用创建的Servlet上下文环境对象ServletContext,WEB服务器启动的时候,在加载WEB应用时,为每个加载的WEB应用创建一个代表WEB应用Servlet上下文环境对象。
(3)获取Servlet名称方法
public String getServletName()
获取正在访问的这个Servlet的名称。
以上就是Servlet相关问题的解答,更多关于Java Web方面的问题可以看下这个详细的视频教程网页链接,希望我的回答能帮到你。
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他>
以上就是关于Servlet核心类简介全部的内容,包括:Servlet核心类简介、servlet是什么、spring4框架中如何实现servlet功能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)