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";
    }

 

 

posted @ 2019-07-24 21:31  小蜜疯  阅读(123)  评论(0编辑  收藏  举报