She*_*heo 6 servlets struts2 servlet-filters
在struts2为什么是一个过滤器被用作控制器来代替ActionServlet?
使用过滤器有ActionServlet什么好处?
根据Struts2 Budi Karnival struts2一书,使用过滤器作为控制器有一个明显的优势.使用过滤器,您可以方便地选择提供应用程序中的所有资源,包括静态资源.
使用servlet,您的控制器只处理对应用程序动态部分的访问.请注意,上一个应用程序中的web.xml文件中的url-pattern元素是
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>...</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
使用这样的设置,静态资源的请求不由servlet控制器处理,而是由容器处理.您不希望在servlet控制器中处理静态资源,因为这意味着额外的工作.
过滤器是不同的.过滤器可以选择通过静态内容请求.要传递请求,请在过滤器的doFilter方法中调用filterChain.doFilter方法.
因此,使用过滤器作为控制器允许您阻止对应用程序的所有请求,包括对静态内容的请求.然后,您将在部署描述符中进行以下设置:
<filter>
<filter-name>filterDispatcher</filter-name>
<filter-class>...</filter-class>
</filter>
<filter-mapping>
<filter-name>filterDispatcher</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
这个过滤器的优点:有一点可以肯定,您可以轻松保护静态文件免受好奇的眼睛伤害.
如果用户尝试查看JavaScript文件,以下代码将发送错误消息:
public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String uri = req.getRequestURI();
if (uri.indexOf("/css/") != -1 && req.getHeader("referer") == null) {
res.sendError(HttpServletResponse.SC_FORBIDDEN);
} else {
// handle this request
}
}
Run Code Online (Sandbox Code Playgroud)
它不会保护您的代码免受最坚决的人的攻击,但用户无法再输入静态文件的URL来查看它.出于同样的原因,您可以保护您的图像,以便没有人可以自费链接.
另一个好处:
在Struts2框架中引入了Interceptor.它不仅减少了我们的编码工作量,而且帮助我们编写了任何代码,我们会在web.xml中使用过滤器进行编码和必要的更改而不是Struts1.So现在任何更适合的代码在Filter中现在可以移动到拦截器(它比过滤器更可控),所有配置都可以在struts.xml文件中控制,无需触摸web.xml文件
当我们想要根据特定条件过滤和/或修改请求时,我们通常使用过滤器。\n为了让 S2 工作,它需要执行某些重新处理和修改工作,以便成功执行您的请求,而另一方面,当我们想要控制、预处理和/或后处理请求时,我们使用 Servlet。
\n\n为了控制请求 S2,在后台使用 Servlet,但将其隐藏起来,以使整个应用程序结构更加干净且易于使用。
\n\n这就是《Java EE 6 教程》中过滤器的内容。
\n\n\n\n过滤器是一个可以转换请求或响应的标头和内容(或两者)的对象。过滤器与 Web 组件的不同之处在于过滤器本身通常不会创建响应。相反,过滤器提供的功能可以\xe2\x80\x9catched\xe2\x80\x9d 到任何类型的Web 资源。因此,过滤器不应该对其充当过滤器的 Web 资源有任何依赖性;这样,它就可以由多种类型的网络资源组成。
\n
| 归档时间: |
|
| 查看次数: |
6349 次 |
| 最近记录: |