custom struts framework
1. Difference between stucts1 and struts2
struts1 : Servlet used as Controller , you can visit the Servlet directly, code like if---else if--else
struts2 : Filter used as Controller , you can only visit it passively, though setting the condition like "/*"
2. Imitate the core Filter of Struts2 (StrutsPrepareAndExecuterFilter.java)
version 1.0(like struts1)
package com.cdv.web.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; /**
* Servlet Filter implementation class StrutsPreparedAndExecuterFilter
*/
public class StrutsPreparedAndExecuterFilter implements Filter { /**
* Default constructor.
*/
public StrutsPreparedAndExecuterFilter() {
// TODO Auto-generated constructor stub
} /**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
} /**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String uri = request.getRequestURI();
boolean isDo = uri.endsWith(".do");
if(isDo){
//get the operation
String op = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));
if(op.equals("login")){
request.setAttribute("username", "zhangsan");
}else{
//to do something
}
}else{
//
chain.doFilter(request, response);
}
} /**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
} }
version 2.0
we need create the interface , for creating different instance aim at different params condition, and use the map instead of if--else
package com.cdv.web.action; import javax.servlet.http.HttpServletRequest; public interface Action { String execute(HttpServletRequest request);
}
package com.cdv.web.action; import javax.servlet.http.HttpServletRequest; public class LoginAction implements Action { @Override
public String execute(HttpServletRequest request) {
String username = request.getParameter("username");
if(username.equals("zhangsan")){
return "ok";
}
return null;
} }
package com.cdv.web.filter; import java.io.IOException;
import java.util.HashMap;
import java.util.Map; 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.cdv.web.action.Action;
import com.cdv.web.action.LoginAction; /**
* Servlet Filter implementation class StrutsPreparedAndExecuterFilter
*/
public class StrutsPreparedAndExecuterFilter2 implements Filter { private Map<String, Action> actionMap = new HashMap<String, Action>();
/**
* Default constructor.
*/
public StrutsPreparedAndExecuterFilter2() {
// TODO Auto-generated constructor stub
} /**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
} /**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String uri = request.getRequestURI();
boolean isDo = uri.endsWith(".do");
if(isDo){
String op = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));
Action instance = actionMap.get(op);
String result = instance.execute(request);
if(result.equals("ok")){
request.setAttribute("user", "zhangsan");
}
}else{
chain.doFilter(request, response);
}
} /**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
actionMap.put("login", new LoginAction());
//actionMap.put("logout", new LogoutAction());
//...
} }
version 3.0
put the value of instance into xml file , use dom4j to parse it, and use reflect technology to create instance dynamic.
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<package name="mypackage">
<action name="loginAction" class="com.cdv.web.action.LoginAction"></action>
<action name="logoutAction" class="com.cdv.web.action.LogoutAction"></action>
</package>
package com.cdv.web.filter; import java.io.IOException;
import java.util.HashMap;
import java.util.Map; 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.cdv.web.action.Action;
import com.cdv.web.action.LoginAction; /**
* Servlet Filter implementation class StrutsPreparedAndExecuterFilter
*/
public class StrutsPreparedAndExecuterFilter3 implements Filter { private Map<String, Action> actionMap = new HashMap<String, Action>();
/**
* Default constructor.
*/
public StrutsPreparedAndExecuterFilter3() {
// TODO Auto-generated constructor stub
} /**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
} /**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String uri = request.getRequestURI();
boolean isDo = uri.endsWith(".do");
if(isDo){
String op = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));
Action instance = actionMap.get(op);
String result = instance.execute(request);
if(result.equals("ok")){
request.setAttribute("user", "zhangsan");
}
}else{
chain.doFilter(request, response);
}
} /**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
//进行dom4j解析,将struts.xml中的name 和 value取出,
//并利用反射将class的值转化为对象
/* Document document = Dom4jUtil.getDocument();
List<Node> list = document.selectNodes("//action");
for(Node node : list){
//遍历action节点,取出值
String key = node.valueOf("@name");
String value = node.valueOf("@class");
actionMap.put(key, (Action) Class.forName(value).newInstance());
}*/
} }
custom struts framework的更多相关文章
- Struts framework
Struts功能详解——ActionMapping对象 Struts旅程(一)Struts简介和原理 实例讲解DispatchAction和LookupDispatchAction DispatchA ...
- Struts 2 Learning
目录 . J2EE简介 . JAVA EE应用的分层模型 . 搭建Struts2 Demo应用 . struts2流程 . struts2的常规配置 . 实现Action . 配置Action . 配 ...
- Configure the Struts Tag Libraries
In Struts framework, you always need to configure the Struts tag libraries in order to access it in ...
- Spring+Struts+Hibernate 简介(转)
http://blog.csdn.net/slnqnd/article/details/1772910/ Struts2.0 +Hibernate 3.2 +Spring 2.0 一. ...
- Struts和SpringMVC两种MVC框架比较
基于Web的MVC framework在J2EE的世界内已是空前繁荣.TTS网站上几乎每隔一两个星期就会有新的MVC框架发布.目前比较好的MVC,老牌的有Struts.Webwork.新兴的MVC框架 ...
- Struts知识问答 分类: 面试 2015-07-10 22:01 4人阅读 评论(0) 收藏
1. 简述Struts框架的初始化流程. 答案: 对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化控制器ActionServlet ActionServlet从struts-c ...
- struts工作原理不错的解释___
Struts 使用 Model 2 架构.Struts 的ActionServlet 控制导航流.其他Struts 类,比如Action, 用来访问业务逻辑类.当 ActionServlet 从容器接 ...
- Struts 2 Overview
Struts2 is popular and mature web application framework based on the MVC design pattern. Struts2 is ...
- 概述struts,以及struts如何实现MVC架构的
概述MVC体系结构? 答:MVC包括三类对象,model是应用对象,view是视图,controller是控制器,它定义用户界面对用户输入的响应方式. 在MVC体系中,模型通常被称为”业务逻辑”,是真 ...
随机推荐
- C#读取图片Exif信息
Exif是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性和拍摄数据 ////调用 //string strFile="fffff.jpg";//文件名 ...
- 免费WebService服务
国内手机号码归属地查询:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx 中国股票及时行情数据:http://webservi ...
- EDM营销之双十一最新实战营销指南汇总
双十一虽已进入第八个年头,但其影响力只增不减,倒计时期间商家们都已火力全开.再结合全社会消费升级的大背景,如何才能在激烈竞争中杀出一条血路呢? 本次Focussend基于实战操作,以短信营销.邮件营销 ...
- iBatis.Net(C#)系列Demo源码
iBatis.Net(C#)系列一:简介及运行环境源码 [下载] iBatis.Net(C#)系列二:SQL数据映射源码 [下载] iBatis.Net(C#)系列三:数据库查询源码 [下载]
- NPM私有服务器架设 FOR CentOS
确保计算机能够连接互连网. 一.安装 Couchdb1.6 1.(CentOS 6.7)如果版本低于6.7请使用下面命令更新系统库. yum update 2.使用下面命令安装依赖库 yum inst ...
- 玩转MAC OS!实测DIY兼容机装苹果系统
1打造iMAC:DIY常规兼容机安装MAC OS回顶部 [PConline 评测]最近消息透露苹果下个月即将发布新系统MAC OS X 10.9,这是什么东西?对于苹果,留给我们印象最为深刻的是iPh ...
- VS-Visual Studio-IIS Express 支持局域网访问
本文转自:http://www.itnose.net/detail/6132793.html 使用Visual Studio开发Web网页的时候有这样的情况:想要在调试模式下让局域网的其他设备进行访问 ...
- js替换指定字符串
// var a = "212"; // var b = []; // for(var i=0;i<a.length;i++){ // if(a[i]=="1&qu ...
- ruby -- 进阶学习(八)自定义方法route配置
在route中进行修改,添加下面代码 namespace :mycontroller do get 'mymethod' , :on=> :member end end 注: :on => ...
- Web程序员开发App系列 - 认识HBuilder
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...