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

     

  • 相关阅读:
    Java 8 Lambda 表达式
    OSGi 系列(十二)之 Http Service
    OSGi 系列(十三)之 Configuration Admin Service
    OSGi 系列(十四)之 Event Admin Service
    OSGi 系列(十六)之 JDBC Service
    OSGi 系列(十)之 Blueprint
    OSGi 系列(七)之服务的监听、跟踪、声明等
    OSGi 系列(六)之服务的使用
    OSGi 系列(三)之 bundle 事件监听
    OSGi 系列(三)之 bundle 详解
  • 原文地址:https://www.cnblogs.com/xmf3628/p/11240993.html
Copyright © 2020-2023  润新知