Struts2 Servelet重构
这是利用action模仿请求Servelet(单例)
作用:
1.减少web.xml代码量
2.将servelet中的代码转移到action中,只需要在action中定义业务逻辑则可。
1.定义一个过滤器
package com.struts2.filter; import java.io.IOException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.struts2.action.Action;
import com.struts2.action.HelloWorldAction;
import com.struts2.utils.ServletUtils; public class DispatchFilter implements Filter { private HttpServletRequest request;
private HttpServletResponse response; @Override
public void destroy() {
// TODO Auto-generated method stub } @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain arg2) throws IOException, ServletException { /**
* 1.先获取HttpServletRequest,HttpServletResponse
* 2.获取HelloWorldAction.action中的HelloWorldAction
* 3.利用java的反射机制进行调用
*/
this.request=(HttpServletRequest) request;
this.response=(HttpServletResponse) response; String requestURI = this.request.getRequestURI();
System.out.println(requestURI);
String actionName = ServletUtils.convert(requestURI); //利用java的反射机制调用该方法
try {
//利用java反射机制创建一个新的HelloWorldAction对象
HelloWorldAction action = (HelloWorldAction) Class.forName("com.struts2.action."+actionName).newInstance();
String forward = action.execute(this.request, this.response); /**
* 2种跳转方法
* *重定向
* request里的参数不起作用
* this.response.sendRedirect(jsp页面)
* *转发
* 放在 request中的值可以取出来
* this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response);
*
*/
this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} @Override
public void init(FilterConfig arg0) throws ServletException {
} }
web.xml中配置为:
<filter>
<filter-name>DispatchFilter</filter-name>
<filter-class>com.struts2.filter.DispatchFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>DispatchFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
当接受到一个请求后
<a href="HelloWorldAction.action">请求一个action</a>
当过滤器接受到一个请求以后,进行过滤
1.先取出请求uri.
2.根据java反射机制取出action
package com.struts2.action; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class HelloWorldAction implements Action { @Override
public String execute(HttpServletRequest request,
HttpServletResponse response) {
System.out.println("Hello World Struts2");
return "index.jsp";
} }
3.取出action以后,就可以执行action中的方法
4.利用request/response转发
/**
* 2种跳转方法
* *重定向
* request里的参数不起作用
* this.response.sendRedirect(jsp页面)
* *转发
* 放在 request中的值可以取出来
* this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response);
*
*/
this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response); // 这句话的意思是,上面返回了一个字符串"index.jsp",那么这里就是去寻找这个index.jsp,并将request和response放进去。
Struts2 Servelet重构的更多相关文章
- jQuery学习之:Validation表单验证插件
http://polaris.blog.51cto.com/1146394/258781/ 最近由于公司决定使用AJAX + Struts2来重构项目,让我仔细研究一下这两个,然后集中给同事讲讲,让每 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- struts2视频学习笔记 01-02
网易云课堂-<struts2> 课时1 Struts2: WebWork2基础上发展而来,MVC框架,无侵入式设计. 提供了拦截器,类型转换器,支持多种表现层技术(JSP, freeMar ...
- 程序世界系列之-struts2安全漏洞引发的安全杂谈(上)
目录: 1.讨论关于struts 安全问题. 2.黑客文化. 3.如何降低安全漏洞的出现. 4.忠告建议. 题记: 这篇文章本来很早应该和大家见面的,中间由于个人原因调整了系列文章发布时间,实属罪过. ...
- struts2学习笔记(2)——简单的输入验证以及标签库的运用
struts2自带了一些标签库,运用好这些标签库会减少开发周期. 1.struts2标签库是在哪定义的? struts2标签库定义在struts2-core-2.1.8.jar这个文件中,具体在这个j ...
- struts2总结六: Struts2的拦截器
一.Struts2的系统结构图
- 浅谈Struts2(二)
一.struts2的跳转 1.action跳转JSP a.默认为forward <action name="action1" class="com.liquidxu ...
- Struts1项目转成Struts2项目步奏
注意:要转成Struts2必须struts2配置和流程理解,我不知道,我只能说还是知道struts2然后转成struts2对. 1.先备份一份.不要没转成功项目搞蹦了都回不来了. 2.导入Struts ...
- kindeditor图片上传 struts2实现
一.kindeditor以及struts2部署搭建不再赘述,如需要请参考kindeditor使用方法 Struts2框架搭建 二.kindeditor图片上传所依赖jar包在kindeditor\js ...
随机推荐
- CAS实战の自定义注销
步骤一 在cas server端,设置/WebContent/WEB-INF/cas-servlet.xml: <bean id="logoutAction" class=& ...
- UnicodeEncodeError:'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)
Scrapy爬虫向数据库写入数据时报错: UnicodeEncodeError:'latin-1' codec can't encode characters in position 0-1: ord ...
- 如何彻底删除TFS的工作项字段
TFS的工作项字段可以在所有工作项类型之间共享.例如自定义了一个字段"验证迭代"(Mycompany.IterationValidation)那么在需求.Bug中都可以添加这个字段 ...
- java的一些命名规范吧
注意事项: 1.由于Java是面向对象编程的,所以在命名的时候尽量选择名词. 2.(Camel-Case)驼峰命名法:当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时,首字母以小写开 ...
- C++ windows下共享内存
转载:https://blog.csdn.net/tojohnonly/article/details/70246965 共享内存 (也叫内存映射文件) 主要是通过映射机制实现的 , Windows ...
- 接口IDisposable的用法
C#的每一个类型都代表一种资源,而资源又分为两类: 托管资源 由CLR管理分配和释放的资源,即从CLR里new出来的对象. 非托管资源 不受CLR管理的对象,如Windows内核对象,或者文件.数 ...
- Js异常捕获
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- iOS 内嵌 View 的响应
遇到一个问题就是我有一个 UITextField,点击后不能编辑而是会显示一个自定义的 dialog. 但发现问题是,UITextField 的对点击事件的反应非常吃顿,有时候好使有时候不好使. 后来 ...
- ceph luminous 新功能之内置 dashboard
# 开启 dashboard (在任一 mon_server 节点上)ceph mgr module enable dashboard # 设置dashboard 端口和IPceph config-k ...
- “全栈2019”Java异常第一章:什么是异常?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...