`

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

 
阅读更多

1.login.jsp
<form action="login.do">
用户名:<input type="text" name="userName"><br>
密码:<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;
 }
}

 

分享到:
评论

相关推荐

    Spring面试题

    但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。 基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件 8. ...

    J2EE应用开发详解

    124 8.5.2 拦截器的实现原理 124 8.5.3 Struts2的内置拦截器 124 8.5.4 拦截器的配置和使用 125 8.5.5 自定义拦截器 126 8.6 一个简单的Struts2应用 130 8.7 小结 140 第9章 JSF 141 9.1 JSF技术简介 141 9.1.1 JSF...

    商城之家JSP商城基于jsp+mysql开发

    大量的应用到了类的反射机制涉及网络编程行业最高精尖技术STRUTS+HIBERNATER,最有说 服力的证实了多层建构框架模式的绝优越性。数据和逻辑处理由STRUTS的模型层Model进行处理, 页面调转由STRUTS的控制层Controller...

    JSP商城之家商城企业版

    大量的应用到了类的反射机制涉及网络编程行业最高精尖技术STRUTS+HIBERNATER,最有说 服力的证实了多层建构框架模式的绝优越性。数据和逻辑处理由STRUTS的模型层Model进行处理, 页面调转由STRUTS的控制层Controller...

    java必了解的六大问题

    *第十三阶段:轻量级框架,三大框架之一Struts框架的学习,自此踏入java web开发的精华部分,包括Struts体系架构,各种组件,标签库和扩展性的学习; *第十四阶段:Hibernate框架学习,三大框架之一,包括检索...

    JSP企富商贸网开发

    在整个后台管理系统中,商品管理是一个重要的管理模块,是整个平台的核心管理模块,具有很强的商品控制和管理功能,一定要熟练操作。 1.商品维护 点击“商品维护”,会进入“商品列表”页面,该页面分搜索栏和列表...

    商城之家JSP商城企业版 v7.0

    本系统包含N多个JavaBean类,整个系统全面实现MVC(模型 视图 控制)三层架构,大量的应用到了类的反射机制涉及STRUTS+HIBERNATER高级编成技术,体现了多层建构框架模式的绝优越性。 数据和逻辑处理由STRUTS的...

    达内java培训目录

    3. 开班一个半月内,贯穿 JavaSE及数据库的学习将完成 T-DMS 数据 采集系统项目 • 整个系统由 DMS 采集端、DMS 服务器端和 NetCTOSS 服务器端三部分组成。 • DMS 采集端的主要任务是采集、解析、匹配和保存并发送...

    Java常见面试题208道.docx

    134.mybatis 如何编写一个自定义插件? 十四、RabbitMQ 135.rabbitmq 的使用场景有哪些? 136.rabbitmq 有哪些重要的角色? 137.rabbitmq 有哪些重要的组件? 138.rabbitmq 中 vhost 的作用是什么? 139.rabbitmq 的...

    商城之家JSP商城企业版V1.0

    大量的应用到了类的反射机制涉及网络编程行业最高精尖技术STRUTS+HIBERNATER,最有说 服力的证实了多层建构框架模式的绝优越性。数据和逻辑处理由STRUTS的模型层Model进行处理, 页面调转由STRUTS的控制层Controller...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

Global site tag (gtag.js) - Google Analytics