Struts2
truts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器Controller)来建立模型与视图的数据交互。
导入的外部xml文件
在pom.xml中加入此段代码
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.13</version>
</dependency>
User类
代码:
package com.zking.entity;
public class User {
private String uid;
private String uname;
public User(String uid, String uname) {
super();
this.uid = uid;
this.uname = uname;
}
public User() {
// TODO Auto-generated constructor stub
}
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 + "]";
}
}
HelloAction类
package com.zking.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.zking.entity.User;
/* 1.动态方法的调用
* 2.Struts中的传参
* 1.set传参
* 2.参数名。属性名传参
* 3.实现modeldriven接口传参
* 3.Struts与Tomcat的交互
* 如何将后台的值传到前台去
* 1.request传值
*
* 2.值找传值(get方法传值)
*
* */
public class HelloAction implements ModelDriven<User>,RequestAware,ServletRequestAware,ServletResponseAware {
private User user1= new User();
private User user2;
private String sex;
private String uname;
private HttpServletRequest request;
HttpServletResponse response;
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 del() {
System.out.println("del方法");
return "success";
}
public String edit () {
System.out.println("edit方法");
return "success";
}
public String list() {
System.out.println("list方法");
System.out.println("user1:"+user1);
System.out.println("user2:"+user2);
System.out.println("sex:"+sex);
System.out.println("uname"+uname);
// HttpServletRequest request = ServletActionContext.getRequest();
// request.setAttribute("rs", user1);
// ActionContext context =ActionContext.getContext();
// context.get("");
this.request.setAttribute("rs", user1);
return "success";
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user1;
}
@Override
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request = request;
}
@Override
public void setServletResponse(HttpServletResponse response) {
// TODO Auto-generated method stub
this.response =response;
}
@Override
public void setRequest(Map<String, Object> request) {
// TODO Auto-generated method stub
}
}
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" namespace="/sy">
<action name="/hello_*" class="com.zking.web.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>
新建jsp文件
success.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>
成功页面:${user2}
</body>
</html>
demo1.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">测试modelariven接口传参</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>
动态调用方法(mvc不具备的优势)
action代码
:
1 public String add() {
2 System.out.println("add方法");
3 return "success";
4 }
5
6 public String edit() {
7 System.out.println("edit方法");
8 return "success";
9 }
jsp代码
:
<h2>动态调用方法</h2>
<a href="${pageContext.request.contextPath }/sy/hello_add.action">add方法</a>
<a href="${pageContext.request.contextPath }/sy/hello_edit.action">edit方法</a>
struts的传参
实现 modelDrivern接口传参
action代码
:
public String list() {
System.out.println("list方法");
System.out.println("user1:"+user1);
}
jsp代码
:
<a href="${pageContext.request.contextPath }/sy/hello_list.action?uid=001&&uname=zs">测试modeldriven接口传参</a>
set传参
action代码
:
1 public String list() {
2 System.out.println("list方法");
3 System.out.println("sex:"+sex);4 }
jsp代码
:
<a href="${pageContext.request.contextPath }/sy/hello_list.action?sex=nv">测试set传参</a>
类实例.属性名
action代码
:
1 public String list() {
2 System.out.println("list方法");
3 System.out.println("user2:"+user2);
4 }
jsp代码
:
<a href="${pageContext.request.contextPath }/sy/hello_list.action?user2.uid=002&&user2.uname=ls">测试参数名.属性名传参</a>
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";
}
值栈传值(get方法传值),不需要操作,因为值栈传值会将传过来的值自动赋值
代码:
public String list() {
System.out.println("list方法");
System.out.println("user1:"+user1);
System.out.println("user2:"+user2);
System.out.println("sex:"+sex);
return "success";
}
注入与非注入
注入,注入需要实现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";
}
非注入
request传值
代码:
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";
}