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 ...
随机推荐
- spring获取webapplicationcontext,applicationcontext几种方法详解(转载)
转载自 http://www.blogjava.net/Todd/archive/2010/04/22/295112.html 方法一:在初始化时保存ApplicationContext对象 代码: ...
- Tomcat 系统架构与设计模式1
从 Tomcat 如何分发请求.如何处理多用户同时请求,还有它的多级容器是如何协调工作的角度来分析 Tomcat 的工作原理,这也是一个 Web 服务器首要解决的关键问题 Tomcat 总体结构 To ...
- Web 应用简单测试方案
测试:一定要分阶段测试,先确定入队列成功,再测试队列的执行是否成功. 功能点: 1. 翻页2. 加精3. 置顶4. 帖子浏览量(PV)5. 发帖6. 回复7. 评论 8. crontab 脚本 @20 ...
- [label][PHP-Security]PHP Security Program
本文是通过阅读http://www.nowamagic.net/中的PHP安全变成专题,同时结合个人的一点点开发经验组合而成的. 如果你需要看原文,可以直接访问http://www.nowamagic ...
- Android-bindService本地服务-初步-Service返回对象
在Android开发过程中,Android API 已经有了startService方式,为什么还需要bindService呢? 答:是因为bindService可以实现Activity-->S ...
- jsp页面都放在web-inf下面说是要防止用户直接访问jsp页面,为么不能直接访问jsp
为了保护那部分jsp页面,如果没有登录验证,那部分jsp用户可以直接访问,这样很不安全,放在WEB-INF下面,就使得只能WEB-INF文件夹外jsp页面调用里面的jsp,这样来使用,就比如我们有一个 ...
- 2.C#WebAPI设置路由和参数1
1.当我们创建WebApi的时候我们的项目下的Contorls文件夹下的ValuesController文件下会出现这么几个方法: // GET http://程序ip:程序端口/api/values ...
- T-Sql之集合
1.知识点 先了解一下集合概念,集合运算(UNION(并).EXCEPT(补).INTERSECT(交))是指表之间的垂直操作.区别联接(CROSS,INNER.OUTER)是指表之间的水平操作,基础 ...
- 【Oracle 12c】最新CUUG OCP-071考试题库(59题)
59.(16-8)choose two: Which two statements are true regarding the USING and ON clauses in table joins ...
- PHP开始1 php的命名规范
常量 php 中有一些预定义常量,我们常常称他们为'魔术常量'. __LINE__ 返回文件中的当前行号 __FILE__ 返回该文件的完整路径和文件名 __DI ...