首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

应用反射类自定义一个简单的Struts1框架

2013-08-01 
使用反射类自定义一个简单的Struts1框架密码:input typetext namepasswordbrinput typesubmi

使用反射类自定义一个简单的Struts1框架
密码:<input type="text" name="password"><br>
<input type="submit"? value="提交">
2.定义接口Action
package com.wjj.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Action {
public String execute(HttpServletRequest request,HttpServletResponse response);?
}
3.定义LoginAction类并实现上面所定义的接口
package com.wjj.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.wjj.controller.Action;

public class LoginAction implements Action {
?@Override
?public String execute(HttpServletRequest request,
???HttpServletResponse response) {
??System.out.println(request.getParameter("userName"));
??return "success.jsp";
?}
}
4.新建ActionServlet
package com.wjj.controller;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.wjj.action.LoginAction;

/**
?* Servlet implementation class ActionServlet
?*/
public class ActionServlet extends HttpServlet {
?private static final long serialVersionUID = 1L;
???????? //新建一个Map,用于使用键值对
?// Map actionMap =new HashMap();
?
? //第二种方式定义bean工厂类对象
???? BeanFactory? bf;
??? /**
???? * @see HttpServlet#HttpServlet()
???? */
??? public ActionServlet() {
??????? super();
??? }

?/**
? * @see Servlet#init(ServletConfig)
? */
?public void init(ServletConfig config) throws ServletException {
??//在初始化时,设置键值对
??//actionMap.put("login", new LoginAction());
??
??//第二种方式初始化时,读取配置文件
????? bf =new BeanFactory("E://bean.xml");
?}

?/**
? * @see Servlet#destroy()
? */
?public void destroy() {
??// TODO Auto-generated method stub
?}

?/**
? * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
? */
?protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
??String path =request.getServletPath();// 获取路径? /login.do
??System.out.println(path);
??String actionName =path.substring(path.indexOf("/")+1, path.length()-3); // 截取路径
??System.out.println(actionName);
??//Action action =(Action)actionMap.get(actionName);//实现多态
??//第二种方式使用反射类的方式
??Action action =(Action)bf.getBean(actionName);?
??String result =action.execute(request, response);
??request.getRequestDispatcher(result).forward(request, response);
?}

?/**
? * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
? */
?protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
??????? this.doGet(request, response);
?}

}
5.web.xml中
? <servlet>
??? <description></description>
??? <display-name>ActionServlet</display-name>
??? <servlet-name>ActionServlet</servlet-name>
??? <servlet-class>com.wjj.controller.ActionServlet</servlet-class>
? </servlet>
? <servlet-mapping>
??? <servlet-name>ActionServlet</servlet-name>
??? <url-pattern>*.do</url-pattern>
? </servlet-mapping>
6.工厂类factoryBean
package com.wjj.factory;
import java.io.FileInputStream;
import java.util.Properties;
public class BeanFactory {

?//properties是map的子类
?private Properties pros = new Properties();
?public BeanFactory(String fileName) {
??//通过路径fileName扫描资源文件
??FileInputStream fis;
??try {
???fis = new FileInputStream(fileName);
???pros.load(fis);
??} catch (Exception e) {
???e.printStackTrace();
??}
?}?
?public Object getBean(String beanName) {
??String className = pros.getProperty(beanName);
??Object obj = null;
??//Class实例用于到文件扫描,将信息装载到该实例中
??Class clazz;
??try {
???//找到并返回一个类存储在类型为Class的类里
??clazz = Class.forName(className);//查找到资源文件中的"com.wjj.action.LoginAction"
???obj = clazz.newInstance();//实例化该类"com.wjj.action.LoginAction"
??} catch (Exception e) {
???e.printStackTrace();
??}
??return obj;
?}
}

?

热点排行