zoukankan      html  css  js  c++  java
  • (Struts重构)构建一个简单的基于MVC模式的JavaWeb

    构建一个简单的基于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>

    小结:在开发Struts时,不需要开发人员自己编写中心控制器 的代码,但需要开发ActionForm,和Action组件,而且它 的JSP页面中的HTML标记需要转化为Struts自定义标记。这是开发Struts应用程序与开发一般基于MVC模式的主要不同!
  • 相关阅读:
    PHP闭包的用法
    composer相关命令
    keepalievd
    docker-compose
    rabbitmq 知识点
    免费的mysql客户端管理工具
    git生成密钥
    rabbitmq在docker下进行cluster
    http状态码
    vmplayer固定IP
  • 原文地址:https://www.cnblogs.com/eflylab/p/613290.html
Copyright © 2011-2022 走看看