首页 > 其他 > 详细

struts入门

时间:2019-07-28 09:03:36      阅读:165      评论:0      收藏:0      [点我收藏+]

strurs简介

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架

创建一个maven项目

在pom.xml中配置struts所需的依赖包

 <dependency>
             <groupId>org.apache.struts</groupId>
             <artifactId>struts2-core</artifactId>
             <version>2.5.16</version>
        </dependency>

 

在如下位置,导入xml配置文件

技术分享图片

并配置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>
    <constant name="struts.i18n.encoding" value="UTF-8" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.configuration.xml.reload" value="true" />
    <constant name="struts.i18n.reload" value="true" />
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />

    <package name="base" extends="struts-default" abstract="true">
        <global-allowed-methods>regex:.*</global-allowed-methods>
    </package>
</struts>

struts-sy.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>
    <package name="sy" extends="base" >
    
    <action name="/hello_*" class="com.jt.HelloAction" method="{1}">
      <result name="success">/success.jsp</result>
    </action>
    </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-default.xml"></include>
    <include file="struts-base.xml"></include>
    <include file="struts-sy.xml"></include>
</struts>

在web.xml文件下配置过滤器

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
  <filter>
  <filter-name>struts2</filter-name>
   <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>
</web-app>

创建实体类User

package com.entity;

public class User {

    private String uid;
    private String uname;
    public String getUid() {
        return uid;
    }
    public void setUid(String uid) {
        this.uid = uid;
    }
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname;
    }
    @Override
    public String toString() {
        return "User [uid=" + uid + ", uname=" + uname + "]";
    }
    public User(String uid, String uname) {
        super();
        this.uid = uid;
        this.uname = uname;
    }
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    
}

新建Action( HelloAction)

package com.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.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;
        
    }

    
}

创建测试的JSP页面

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

再创建一个接受结果的JSP页面

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

三种测试打印结果

测试modeldriven接口传参

 

user1:User [uid=001, uname=zs]
user2:null
sex:null
uname:null

 

测试set接口传参
user1:User [uid=null, uname=null]
user2:null
sex:nv
uname:null

 

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

注入与非注入

注入需要实现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";
    }

 

struts入门

原文:https://www.cnblogs.com/huxiaocong/p/11257353.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!