zoukankan      html  css  js  c++  java
  • struts2入门

    Struts2 是目前较为普及和成熟的基于MVC设计模式的web应用程序框架,它不仅仅是Struts1 的升级版本,更是一个全新的Struts架构。最初,是以WebWork框架和Struts框架为基础,通过提供增强和改进的Struts框架,进而实现简化web技术人员开发工作的目标。不久之后,Webwork框架和Struts社区联合创造了现在流行的Struts2框架。

    如何使用struts2

    1.新建maven项目

    创建实体类 (User)

    package com.hmc.entity;
     2 
     3 public class User {
     4 
     5     private String uid;
     6     private String uname;
     7     
     8     public String getUid() {
     9         return uid;
    10     }
    11     
    12     public void setUid(String uid) {
    13         this.uid = uid;
    14     }
    15     
    16     public String getUname() {
    17         return uname;
    18     }
    19     
    20     public void setUname(String uname) {
    21         this.uname = uname;
    22     }
    23 
    24     @Override
    25     public String toString() {
    26         return "User [uid=" + uid + ", uname=" + uname + "]";
    27     }
    28 
    29     public User(String uid, String uname) {
    30         super();
    31         this.uid = uid;
    32         this.uname = uname;
    33     }
    34 
    35     public User() {
    36         super();
    37         // TODO Auto-generated constructor stub
    38     }
    39     
    40     
    41     
    42 }

     新建Action( HelloAction)

    package com.hmc.web;
    
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.struts2.ServletActionContext;
    import org.apache.struts2.interceptor.RequestAware;
    import org.apache.struts2.interceptor.ServletRequestAware;
    import org.apache.struts2.interceptor.ServletResponseAware;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ModelDriven;
    import com.yuan.entity.User;
    
    /**
     * 1.动态调用方法(mvc不具备的优势)
     * 2.struts中的传参
     *  1、set传参
     *  2、参数名.属性名传参
     *  3、实现modeldriven接口传参
     *  
     * 3.struts与tomcat的交互
     *   如何将后台的值传到前台去
     *   1、通过request传值
     *   2、值栈传值(get方法传值)
     * @author **
     *
     */
    public class HelloAction implements ModelDriven<User>,ServletRequestAware,ServletResponseAware {
    
        private HttpServletResponse response;
        private HttpServletRequest request;
        private User user1 = new User();
        private User user2;
        private String sex;
        
        public User getUser2() {
            return user2;
        }
    
        public void setUser2(User user2) {
            this.user2 = user2;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public String add() {
            System.out.println("add方法");
            return "success";
        }
        
        public String edit() {
            System.out.println("edit方法");
            return "success";
        }
        
        public String del() {
            System.out.println("del方法");
            return "success";
        }
        
        public String list() {
            System.out.println("list方法");
            System.out.println("user1:"+user1);
            System.out.println("user2:"+user2);
            System.out.println("sex:"+sex);
            //非注入--耦合型
    //        HttpServletRequest request = ServletActionContext.getRequest();
    //        request.setAttribute("rs", user1);
            this.request.setAttribute("rs",user1);
            return "success";
        }
    
        @Override
        public User getModel() {
            // TODO Auto-generated method stub
            return user1;
        }
    
        @Override
        public void setServletRequest(HttpServletRequest request) {
            this.request=request;
            
        }
    
        @Override
        public void setServletResponse(HttpServletResponse response) {
            this.response=response;
            
        }
    
        
    }

     导入所需要的xml 文件

    struts-hello.xml

    <struts>
    <!--
    name:包名
    extends:继承默认struts2的配置,一般叫struts-default
    abstract:是否抽象包
    name:命名空间
      -->
         <package name="struts-hello"  extends="struts-base">
          <!--  
          name:请求路径名
          class:自控制器的全路径类名
          method:调用的具体的方法名,默认方法名execute
          -->
           <action name="helloAction_*" 
           class="com.zking.struts2.action.HelloAction"
           method="{1}">
           <!--
           name:结果码
           type:请求方式,默认转发,dispatcher/redirect
             -->
           <result name="success" type="dispatcher">/index.jsp</result>
           <result name="failed" type="redirect">/error.jsp</result>
           
           </action>
         
         </package>
          
    
    </struts>

     struts-base.xml

    <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
    <struts>
        <!--开启struts2的开发模式  -->
        <constant name="struts.devMode" value="true"></constant>
        <!-- 启用struts2配置文件自动加载模式 -->
        <constant name="struts.configuration.xml.reload" value="true"></constant>
        
        <package name="struts-base" abstract="true" extends="struts-default">
        <!--开启struts2动态方法调用  -->
        <global-allowed-methods>regex:.*</global-allowed-methods>
        </package>
    </struts>

    struts.xml

    <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
    <struts>
        <include file="struts-base.xml"></include>
        <include file="struts-hello.xml"></include>
    </struts>

    新建demo1.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10 <h2>struts传参的三种方式</h2>
    11 <a href="${pageContext.request.contextPath }/helloAction_list.action?uid=001&&uname=zs">测试modeldriven接口传参</a>&nbsp;&nbsp;
    12 <a href="${pageContext.request.contextPath }/helloAction_list.action?sex=nv">测试set传参</a>&nbsp;&nbsp;
    13 <a href="${pageContext.request.contextPath }/helloAction_list.action?user2.uid=002&&user2.uname=ls">测试参数名.属性名传参</a>
    14 <h2>与j2EE容器的交互</h2>
    15 </body>
    16 </html>

     index.jsp

     <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10 成功页面:${rs }
    11 </body>
    12 </html>

     三种测试打印结果

    测试modeldriven接口传参
    user1:User [uid=001, uname=zs]
    测试set传参
    sex:nv
    测试参数名.属性名传参
    user2:User [uid=002, uname=ls]

    struts与tomcat容器的交互

      request传值,需要实现ModelDriven接口,调用ServletActionContext.getRequest()方法。

      

    public String list() {
            System.out.println("list方法");
            System.out.println("user1:"+user1);
            System.out.println("user2:"+user2);
            System.out.println("sex:"+sex);
            HttpServletRequest request = ServletActionContext.getRequest();
            request.setAttribute("rs", user1);
            return "success";
        }

    页面结果

    :User [uid=001, uname=zs]

    注入与非注入

    注入需要实现ServletRequestAware接口,重写需要实现的方法setServletRequest;

      将setServletRequest方法的参数私有化作为属性

    private HttpServletRequest request;
      setServletRequest方法
    
    @Override
        public void setServletRequest(HttpServletRequest request) {
            this.request=request;
            
        }

    调用方法

    public String list() {
            System.out.println("list方法");
            System.out.println("user1:"+user1);
            System.out.println("user2:"+user2);
            System.out.println("sex:"+sex);
            this.request.setAttribute("rs",user1);
            return "success";
        }

    非注入

    public String list() {
            System.out.println("list方法");
            System.out.println("user1:"+user1);
            System.out.println("user2:"+user2);
            System.out.println("sex:"+sex);
            HttpServletRequest request = ServletActionContext.getRequest();
            request.setAttribute("rs", user1);
            return "success";
        }

     

  • 相关阅读:
    【C/C++】qsort函数的使用方法和细节
    MOOC C++笔记(五):继承
    MOOC 数据库系统笔记(二):数据库系统的基本结构及其演变发展
    PTA A1015
    MOOC 数据库系统笔记(一):初步认识数据库系统
    PTA A1014
    MOOC C++笔记(四):运算符重载
    PTA A1013
    PTA A1011&A1012
    1.1.22 同样的文档,行数不一样
  • 原文地址:https://www.cnblogs.com/xmf3628/p/11240993.html
Copyright © 2011-2022 走看看