重写Struts1.x底层

1.新建FormBean

//生成getset方法

2.新建ActionMapping

// <action path="/login"type="com.it315.action.LoginAction" name = "loginForm" > <!—nameforward标签的唯一

<forward name="success" path="/Success.jsp"></forward>

<forward name="errpr" path="/Error.jsp"></forward>

</action>

private String path;

private String name;

private String type;

private Map<String,ActionForward> forward = new HashMap< String,ActionForward >();

getset方法

3.新建ActionForward

private String name;

private String path;

getset方法

4.2步骤中的ActionMapping中新建Map

5.新建ServletActionServlet

重写init,在其中

//读取Struts-config.xml,离不开dom4j的内容,当然struts不是用dom4j

String path = this.getServletConfig().getInitParameter(“config”);

this.getServletContext().getRealPath(path);

Document document = this.getDocument(path);

String xpath = “/struts-config/form-beans”

6.新建Action

package com.itcast.struts.sys;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Action {

public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,
HttpServletResponse response){
return null;
}


}


7.新建ActionForm

package com.itcast.struts.sys;

public abstract class ActionForm {

}


8.新建LoginAction

package com.itcast.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itcast.struts.form.LoginForm;
import com.itcast.struts.sys.Action;
import com.itcast.struts.sys.ActionForm;
import com.itcast.struts.sys.ActionForward;
import com.itcast.struts.sys.ActionMapping;

public class LoginAction extends Action {

@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

System.out.println("form "+form);
LoginForm loginForm=(LoginForm)form;
System.out.println(loginForm.getUsername());

if("sa".equals(loginForm.getUsername())){
return mapping.findForward("success");
}
return mapping.findForward("error");

}

}


 9.新建LoginForm

package com.itcast.struts.form;

import com.itcast.struts.sys.ActionForm;

public class LoginForm extends ActionForm{

private String username;
private String psw;

public String getUsername() {
return username;
}
public void setUsername(String username) {
System.out.println("username "+username);
this.username = username;
}
public String getPsw() {
return psw;
}
public void setPsw(String psw) {
System.out.println("psw "+psw);
this.psw = psw;
}

}


10.配置Struts-config.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>com.itcast.struts.sys.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
10.配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>com.itcast.struts.sys.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>


<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

</web-app>


<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>

10.新建ActionServlet

11.新建success.jsp和error.jsp 这简单就不赘述!

package com.itcast.struts.sys;


import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class ActionServlet extends HttpServlet {

/*
* <form-bean name="loginForm" type="com.itcast.struts.form.LoginForm"></form-bean>
* map<name,new FormBean()>
*/
private Map<String,FormBean> FormBeanMap=new HashMap<String,FormBean>();

/*
* <action path="/login" name="loginForm"
* type="com.itcast.struts.action.LoginAction" scope="request">
* map<path,new ActionMapping()>
*/

private Map<String,ActionMapping> actionMapingMap=new HashMap<String,ActionMapping>();

private static final long serialVersionUID = 1L;

/**
* 服务器启动读取struts-config.xml文件
*/
public void init() throws ServletException {
String filepath=this.getServletConfig().getInitParameter("config");
filepath=this.getServletContext().getRealPath(filepath);
System.out.println(filepath);

//获取Document文档
Document document=this.getDocument(filepath);
//
/*
* 加载form-bean
* <form-bean name="loginForm" type="com.itcast.struts.form.LoginForm"></form-bean>
*/
String xpath="/struts-config/form-beans/form-bean";
List<Node> formBeanList=document.selectNodes(xpath);
if(formBeanList!=null&&formBeanList.size()>0){
for(int i=0;i<formBeanList.size();i++){
Element formBeanElement=(Element) formBeanList.get(i);
String name=formBeanElement.attributeValue("name");
String type=formBeanElement.attributeValue("type");

FormBean formBean=new FormBean();
formBean.setName(name);
formBean.setType(type);
FormBeanMap.put(name, formBean);
}
}

// //遍历
// Collection<FormBean> c=FormBeanMap.values();
// List<FormBean> list=new ArrayList<FormBean>(c);
// for(int i=0;i<list.size();i++){
// System.out.println(list.get(i).getName()+" "+list.get(i).getType());
// System.out.println(FormBeanMap.get(list.get(i).getName()).getType());
// }
//
//
//<action path="/login" name="loginForm" type="com.itcast.struts.action.LoginAction" scope="request">

xpath="/struts-config/action-mappings/action";
List<Node> actionMapingList=document.selectNodes(xpath);
if(actionMapingList!=null&&actionMapingList.size()>0){
for(int i=0;i<actionMapingList.size();i++){

//<action>
Element actionMapingElement=(Element) actionMapingList.get(i);

String path=actionMapingElement.attributeValue("path");
String name=actionMapingElement.attributeValue("name");
String type=actionMapingElement.attributeValue("type");

System.out.println(path +" "+name +" "+type);
ActionMapping mapping=new ActionMapping();

mapping.setName(name);
mapping.setPath(path);
mapping.setType(type);
actionMapingMap.put(path, mapping);
//
/*
* <action path="/login" name="loginForm" type="com.itcast.struts.action.LoginAction" scope="request">
<!-- 配置转发或重定向 默认值是转发-->
<!--
name 属性:表示forword标签的唯一标识
path 属性:表示要转发或重定向的路径
-->
<forward name="success" path="/success.jsp"></forward>

*/
List<Element> forwardList=actionMapingElement.elements("forward");
if(forwardList!=null&&forwardList.size()>0){
for(int k=0;k<forwardList.size();k++){
Element forwardElement=forwardList.get(k);

String forward_name=forwardElement.attributeValue("name");
String forward_path=forwardElement.attributeValue("path");

System.out.println(forward_name+" "+forward_path);

ActionForward actionForward=new ActionForward();
actionForward.setName(forward_name);
actionForward.setPath(forward_path);
mapping.addActionForward(actionForward);

}
}

}
}
///
//遍历private Map<String,ActionMapping> actionMapingMap=new HashMap<String,ActionMapping>();
List<ActionMapping> list=new ArrayList(actionMapingMap.values());
for(int i=0;i<list.size();i++){

ActionMapping m=list.get(i);
System.out.println("m.getName() "+m.getName());
System.out.println("m.getPath() "+m.getPath());
System.out.println("m.getType() "+m.getType());

List<ActionForward> l=new ArrayList(m.getForward().values());

for(int k=0;k<l.size();k++){
ActionForward a=l.get(k);
System.out.println("^^^ "+a.getName()+ " " +a.getPath());


}

}
}

public Document getDocument(String path){
Document document=null;
SAXReader read=new SAXReader();
try {
document=read.read(new File(path));
} catch (DocumentException e) {
e.printStackTrace();
}
return document;

}

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//
//获取请求路径
String servletPath=request.getServletPath();
// /login.do ---->/login
//System.out.println("servletPath "+servletPath);
servletPath=servletPath.substring(0,servletPath.lastIndexOf("."));
System.out.println("servletPath "+servletPath); ///login

//
//通过解析请求路径获取 ActionMapping
//private Map<path,ActionMapping> actionMapingMap=new HashMap<String,ActionMapping>();
ActionMapping mapping=actionMapingMap.get(servletPath);
//System.out.println(maping.getPath());
//System.out.println(maping.getName());
//System.out.println(maping.getType());
String formBeanName=mapping.getName();
//通过name属性查找FormBean
//private Map<String,FormBean> FormBeanMap=new HashMap<String,FormBean>();

FormBean formBean=FormBeanMap.get(formBeanName);
System.out.println(formBean.getName()+" "+formBean.getType());
//
//login.jsp页面的数据填充的ActionForm(LoginForm)中

//获取FormBean中type属性的值
String formBean_type=formBean.getType(); // type=com.itcast.struts.form.LoginForm
//创建com.itcast.struts.form.LoginForm类的实例
try {
Object obj=Class.forName(formBean_type).newInstance();
//转化到ActionForm
ActionForm actionForm=(ActionForm)obj;

//获取actionForm该对象的类表示
Class clazz=actionForm.getClass();

//获取类中所有的方法
Method[] method=clazz.getMethods();

//存放set方法的集合
List<Method> listMehtod=new ArrayList<Method>();

//获取类中的set方法
if(method!=null&&method.length>0){
for(int i=0;i<method.length;i++){
Method m=method[i];
System.out.println("^^^$$$$$$^^^^^^^m "+m.getName());
//方法的名称是以set
if(m.getName().startsWith("set")){
listMehtod.add(m);
}
}
}


//遍历所有set方法
if(listMehtod.size()>0){
for(int i=0;i<listMehtod.size();i++){
Method m=listMehtod.get(i);
String methodname=m.getName();
System.out.println("^^^^^^^^^^methodname "+methodname); //setUsername

//获取属性
String params=methodname.substring(3,4).toLowerCase()+methodname.substring(4);
System.out.println("params "+params);

//调用的是set方法 public void setUsername(String username)
m.invoke(actionForm, request.getParameter(params));
}
}
//
//获取type属性
String type=mapping.getType();
System.out.println("type "+type);

Action action=(Action)Class.forName(type).newInstance();

ActionForward actionForward=action.execute(mapping, actionForm, request, response);


System.out.println("actionForward.getPath() "+actionForward.getPath());

//重定向
//response.sendRedirect(location)

//转发
request.getRequestDispatcher(actionForward.getPath()).forward(request, response);


} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值