现在的位置: 首页 > 综合 > 正文

(Struts重构)构建一个简单的基于MVC模式的JavaWeb

2011年09月25日 ⁄ 综合 ⁄ 共 6478字 ⁄ 字号 评论关闭

构建一个简单的基于MVC模式的JavaWeb 中,我们使用了JSP+Servlet+JavaBean构建了一个基于MVC模式的简单登录系统,但在其小结中已经指出,这种模式下的Controller 和 View有紧密的耦合度,因为在Controller代码中夹杂了组件部份的名称!
那么在这一篇我,我再改用Struts框架来构建这个系统,要注意的是,构建Struts应用程序时,一般不用自己去写中心控制器ActionServlet代码,因为ActionServlet是Struts框架的一个内置组件。但我们需要编写ActionForm和Action等组件的代码。
开发步骤如下:
Step1:设计数据表,与构建一个简单的基于MVC模式的JavaWeb 里面的表相同。
Step2:构建JSP页面,注意要把JSP中的HTML梅花鹿改为Struts特有的标记。
Step3:构建ActionForm,ActionForm其实是一个JavaBean,可以手工编写它,也可以使用工具生成!
Step4:构建Action,可以手工编写,也可以用工具!
Step5:构建模型组件和数据访问组件,与构建一个简单的基于MVC模式的JavaWeb 的相同!
Step6:构建Struts配置文件!
Step7:编译,打包,部署!

详细设计:
A:构建视图组件JSP页面,可以直接COPY构建一个简单的基于MVC模式的JavaWeb 中的三个页面,我们仅仅修改login.jsp页面,引入Struts标记,如下:

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> 
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> 
<html> 
    
<head>
        
<title>JSP for LoginHandlerForm form</title>
    
</head>
    
<body>
        
<html:form action="/loginHandler">
            userName : 
<html:text property="userName"/><html:errors property="userName"/><br/>
            userPwd : 
<html:text property="userPwd"/><html:errors property="userPwd"/><br/>
            
<html:submit/><html:cancel/>
        
</html:form>
    
</body>
</html>

B:构建数据访问组件,与构建一个简单的基于MVC模式的JavaWeb 一样,COPY过来
C:构建模型组件LoginHanlder,与构建一个简单的基于MVC模式的JavaWeb 一样,COPY!
D:构建ActionForm,代码如下:

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 
*/

package struts.form;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

/** 
 * Struts框架的ActionForm对象,它可用来在用户和业务层之间舆用户的输入数据。
 * ActionForm也叫FormBean.Struts框架会自动从请求中惧输入数据,再将 这些
 * 数据交给一个使用FormBean的Action对象,接着FormBean可以再交给业务层
 
*/

public class LoginHandlerForm extends ActionForm {
    
/*
     * Generated fields
     
*/


    
/** userName property */
    
private String userName;

    
/** userPwd property */
    
private String userPwd;

    
//验证方法,主要用于验证视图上的数据,例如非空之类,
    
//如果要进行业务验证,则应该在Action中进行!
    public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) 
{
        
        
return null;
    }

    
//初始化首先调用的方法
    public void reset(ActionMapping mapping, HttpServletRequest request) {
        
// TODO Auto-generated method stub
    }


    
public String getUserName() {
        
return userName;
    }


    
public void setUserName(String userName) {
        
this.userName = userName;
    }


    
    
public String getUserPwd() {
        
return userPwd;
    }


    
public void setUserPwd(String userPwd) {
        
this.userPwd = userPwd;
    }

}

E:构建Action

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 
*/

package struts.action;

import java.util.ArrayList;

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

import model.LoginHandler;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import struts.form.LoginHandlerForm;

/** 
 * MyEclipse Struts
 * Creation date: 01-06-2007
 * 
 * XDoclet definition:
 * @struts.action path="/loginHandler" name="loginHandlerForm" input="/login.jsp" scope="request" validate="true"
 
*/

public class LoginHandlerAction extends Action {


    
/** 
     * Method execute
     * 
@param mapping
     * 
@param form
     * 
@param request
     * 
@param response
     * 
@return ActionForward
     
*/

    
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
{
        
        LoginHandlerForm loginHandlerForm 
= (LoginHandlerForm) form;// TODO Auto-generated method stub
        
//从Form中取得表单数据
        String userName = loginHandlerForm.getUserName();
        String userPwd 
= loginHandlerForm.getUserPwd();
        
        
//生成一个Session对象
        HttpSession session = request.getSession(true);
        session.removeAttribute(
"userName");
        session.setAttribute(
"userName", userName);
        
        
//生成一个ArrayList 
        ArrayList arr = new ArrayList();
        arr.add(userName);
        arr.add(userPwd);
        
        String forward;
        
        
//调用模型组件
        LoginHandler login = new LoginHandler();
        
boolean flag = login.checkLogin(arr);
        
if(flag)
            forward 
= "success";
        
else
            forward 
= "fail";
        
        
//转向
        return mapping.findForward(forward);
        
    }

}

F:构建Struts的配置文件

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
  
<data-sources />
  
<!-- 表单配置 -->
  
<form-beans >
    
<form-bean name="loginHandlerForm" type="struts.form.LoginHandlerForm" />
  
</form-beans>
  
<!-- 全局异常 -->
  
<global-exceptions />
  
<!-- 全局转发 -->
  
<global-forwards />
  
  
<!-- 表单Action映射 -->
  
<action-mappings >
    
<action
      
attribute="loginHandlerForm"
      input
="/login.jsp"
      name
="loginHandlerForm"
      path
="/loginHandler"
      scope
="request"
      type
="struts.action.LoginHandlerAction" >
          
<!-- action与视图组件的联系在配置文件中写,这样就大大降低了Action和VIEW的耦合性 -->
          
<forward name="success" path="/main.jsp" />
          
<forward name="fail" path="/register.jsp" />
     
</action>
      
  
</action-mappings>
<!-- 资源文件 -->
  
<message-resources parameter="struts.ApplicationResources" />
</struts-config>

WEB配置文件

<?xml version="1.0" encoding="GBK"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  
<welcome-file-list>
      
<welcome-file>/login.jsp</welcome-file>
  
</welcome-file-list>
  
<servlet>
    
<servlet-name>action</servlet-name>
    
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    
<init-param>
      
<param-name>config</param-name>
      
<param-value>/WEB-INF/struts-config.xml</param-value>
    
</init-param>
    
<init-param>
      
<param-name>debug</param-name>
      
<param-value>3</param-value>
    
</init-param>
    
<init-param>
      
<param-name>detail</param-name>
      
<param-value>3</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>

抱歉!评论已关闭.