package com.easystruts.controller;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.ResourceBundle;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import com.easystruts.config.ActionBean;
import com.easystruts.config.ActionBeans;
import com.easystruts.config.FormBean;
import com.easystruts.config.FormBeans;
import com.easystruts.config.ForwardBean;
import com.easystruts.config.StrutsConfig;
import com.easystruts.form.ActionForm;
import com.easystruts.common.*;
public class ActionServlet extends HttpServlet {
StrutsConfig config=new StrutsConfig();
ActionBeans actionBeans=new ActionBeans();
FormBeans formBeans=new FormBeans();
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
try{
String path=this.getRequestPath(request);
Action action=this.getAction(path, actionBeans);
ActionForm actionForm=this.getActionForm(path, request);
String forwardString=action.execute(actionForm, request, response);
forward(path, forwardString, actionBeans,request,response);
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 获取请求路径
* @param request
* @return
*/
public String getRequestPath(HttpServletRequest request){
String uri=request.getRequestURI();
return uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));
}
/**
* 根据路径获取相应的Action对象
* @param path
* @param actionBeans
* @return
*/
public Action getAction(String path,ActionBeans actionBeans){
ActionBean actionBean=(ActionBean)actionBeans.getActionBean(path);
String type=actionBean.getType();
Action action=null;
try {
action=(Action)Class.forName(type).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return action;
}
/**
* 根据请求路径整合表单中的数据到ActionForm对象,并加入到缓存request/session中。
* @param path
* @param config
* @param request
* @return
*/
public ActionForm getActionForm(String path,HttpServletRequest request)throws Exception{
String formName=null;
formName=actionBeans.getActionBean(path).getName();
FormBean formBean=null;
ActionForm actionForm=null;
if(formName==null){
}else{
String attribute=actionBeans.getActionBean(path).getAttribute();
if(attribute==null){
attribute=formName;
}
String scope=actionBeans.getActionBean(path).getScope();
if(scope==null){
scope="request";
}
if(scope.equals("request")){
formBean=(FormBean)request.getAttribute(attribute);
}else{
formBean=(FormBean)request.getSession().getAttribute(attribute);
}
if(formBean==null){
formBean=formBeans.getFormBean(formName);
actionForm=(ActionForm)Class.forName(formBean.getType()).newInstance();
BeanUtils.populate(actionForm, request.getParameterMap());
if(scope.equals("request")){
request.setAttribute(attribute,actionForm);
}else{
request.getSession().setAttribute(attribute,actionForm);
}
}
}
return actionForm;
}
/**
* 根据执行的结果以及配置文件的参数选择跳转方式和路径。
* @param path
* @param forwardString
* @param actionBeans
*/
public void forward(String path,String forwardString,ActionBeans actionBeans,HttpServletRequest request, HttpServletResponse response)throws Exception{
ForwardBean forwardBean=actionBeans.getActionBean(path).getForwardBean(forwardString);
String redirect=forwardBean.getRedirect();
String forwardPath=forwardBean.getPath();
if(redirect.equals("true")){
response.sendRedirect(request.getContextPath()+forwardPath);
}else{
request.getRequestDispatcher(forwardPath).forward(request, response);
}
}
@Override
public void init() throws ServletException {
init_config();
init_language();
}
/**
* 解析配置文件easystruts-config.xml
*/
public void init_config(){
Digester digester=DigesterLoader.createDigester(ActionServlet.class.getClassLoader().getResource("com/easystruts/config/rule.xml"));
digester.push(config);
try {
digester.parse(ActionServlet.class.getClassLoader().getResource("easystruts-config.xml"));
} catch (Exception e) {
e.printStackTrace();
}
actionBeans=config.getActionBeans();
formBeans=config.getFormBeans();
}
/**
* 加载语言文件
*/
public void init_language(){
ResourceBundle rb=ResourceBundle.getBundle(config.getLanguage().getSrc());
HashMap<String,String> languages=new HashMap<String,String>();
Enumeration<String> e=rb.getKeys();
while(e.hasMoreElements()){
String key=e.nextElement();
languages.put(key, rb.getString(key));
}
ServletContext sc=this.getServletContext();
sc.setAttribute(Global.LANGUAGEKEY, languages);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
easystruts1.1.zip (51个子文件)
easystruts1.1
.project 1KB
.settings
org.eclipse.jdt.core.prefs 330B
.mymetadata 321B
WebRoot
login.jsp 1KB
WEB-INF
web.xml 819B
lib
commons-logging.jar 52KB
jstl.jar 17KB
commons-digester-1.8.jar 140KB
commons-collections-3.2.1.jar 562KB
commons-beanutils-1.8.0.jar 226KB
standard.jar 343KB
classes
actions
LoginAction.class 1KB
en.properties 47B
easystruts-config.xml 439B
com
easystruts
form
ActionForm.class 295B
controller
Action.class 447B
ActionServlet.class 7KB
common
Global.class 371B
config
ForwardBean.class 928B
StrutsConfig.class 1KB
ActionBean.class 2KB
rule.xml 1KB
Language.class 540B
FormBean.class 725B
ActionBeans.class 1KB
FormBeans.class 1KB
tag
mytag01.class 2KB
cn.properties 75B
forms
LoginForm.class 734B
easy.tld 704B
META-INF
MANIFEST.MF 36B
main.jsp 450B
.myeclipse
src
actions
LoginAction.java 711B
en.properties 47B
easystruts-config.xml 439B
com
easystruts
form
ActionForm.java 64B
controller
Action.java 327B
ActionServlet.java 5KB
common
Global.java 172B
config
ActionBeans.java 601B
Language.java 261B
ForwardBean.java 568B
ActionBean.java 1KB
FormBean.java 402B
rule.xml 1KB
FormBeans.java 564B
StrutsConfig.java 694B
tag
mytag01.java 1020B
cn.properties 75B
forms
LoginForm.java 441B
.classpath 835B
共 51 条
- 1
资源评论
- 乔哥哥2013-10-14还行吧 可以用 借鉴一下!
RysonFeng
- 粉丝: 6
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功