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> 12 <a href="${pageContext.request.contextPath }/helloAction_list.action?sex=nv">测试set传参</a> 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"; }