struts2学习笔记2
黑马视频的学习笔记2.
结果页面配置
1.全局结果页面
多个action,方法里面的返回值相同,到的目标页面也相同,用全局结果页面配置
第一个action:
package cn.itcast.action;
import com.opensymphony.xwork2.ActionSupport;
public class BookAction extends ActionSupport {
@Override
public String execute() throws Exception {
// TODO 自动生成的方法存根
return SUCCESS;
}
}
第二个action:
package cn.itcast.action;
import com.opensymphony.xwork2.ActionSupport;
public class OrdersAction extends ActionSupport {
@Override
public String execute() throws Exception {
// TODO 自动生成的方法存根
return SUCCESS;
}
}
核心配置文件:
<package name="demo1" extends="struts-default" namespace="/">
<global-results>
<result name="success">/hello.jsp</result>
</global-results>
<action name="book" class="cn.itcast.action.BookAction"></action>
<action name="orders" class="cn.itcast.action.OrdersAction"></action>
</package>
2.局部结果页面
局部和全局同时配置,以局部为准
<package name="demo1" extends="struts-default" namespace="/">
<global-results>
<result name="success">/hello.jsp</result>
</global-results>
<action name="book" class="cn.itcast.action.BookAction">
<result name="success">/hello.jsp</result>
</action>
<action name="orders" class="cn.itcast.action.OrdersAction">
<!-- <result name="success">/hello.jsp</result> -->
</action>
</package>
3.result标签的type属性: 配置如何到路径里面去
默认type=dispatcher,可修改为redirect(重定向);如果要到别的action里面,使用chain(一般不用),redirectAction
<result name="success" type="redirect">/hello.jsp</result>
<result name="success" type="redirectAction">orders</result>
- 在action中获取表单提交数据
1.使用ActionContext类获取
package cn.itcast.form;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Form1DemoAction extends ActionSupport{
@Override
public String execute() throws Exception {
//actioncontext类对象获取表单提交数据
ActionContext context=ActionContext.getContext();
Map<String, Object> map=context.getParameters();
Set<String> keys= map.keySet();
for (String key : keys) {
Object[] object=(Object[]) map.get(key);
System.out.println(Arrays.toString(object));
}
return NONE;
}
}
配置文件
<package name="form1" extends="struts-default" namespace="/">
<action name="form1" class="cn.itcast.form.Form1DemoAction"></action>
</package>
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>
<form action="${pageContext.request.contextPath}/form1.action" method="post">
username:<input type="text"name="username"/><br/>
password:<input type="text"name="password"/><br/>
address:<input type="text"name="address"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
2.使用ServletActionContext类获取
package cn.itcast.form;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Form2DemoAction extends ActionSupport{
@Override
public String execute() throws Exception {
//第二种方式,使用servletActionContext
HttpServletRequest request=ServletActionContext.getRequest();
String username=request.getParameter("username");
String password=request.getParameter("password");
String address=request.getParameter("address");
System.out.println(username+":"+password+":"+address);
return NONE;
}
}
配置文件
<package name="form1" extends="struts-default" namespace="/">
<action name="form2" class="cn.itcast.form.Form2DemoAction"></action>
</package>
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>
<form action="${pageContext.request.contextPath}/form2.action" method="post">
username:<input type="text"name="username"/><br/>
password:<input type="text"name="password"/><br/>
address:<input type="text"name="address"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
3.使用接口注入方式获取(很少用)
4.在action中操作域对象
package cn.itcast.form;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Form2DemoAction extends ActionSupport{
@Override
public String execute() throws Exception {
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("req", "reqvalue");
HttpSession session=request.getSession();
session.setAttribute("sess", "sessionvalue");
ServletContext context=ServletActionContext.getServletContext();
context.setAttribute("contextname", "contextValue");
return NONE;
}
}
struts2提供的获取表单数据封装到实体类对象中的方式
实体类代码:
package cn.itcast.entity;
public class User {
private String username;
private String password;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", address=" + address + "]";
}
}
1.原始方式
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>
<form action="${pageContext.request.contextPath}/form4.action" method="post">
username:<input type="text"name="username"/><br/>
password:<input type="text"name="password"/><br/>
address:<input type="text"name="address"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
配置文件:
<package name="form2" extends="struts-default" namespace="/">
<action name="form4" class="cn.itcast.form.Form4DemoAction"></action>
<action name="data1" class="cn.itcast.data.DataDemo1Action"></action>
<action name="data2" class="cn.itcast.data.DataDemo2Action"></action>
<action name="list" class="cn.itcast.data.ListAction"></action>
<action name="map" class="cn.itcast.data.MapAction"></action>
</package>
action的代码
package cn.itcast.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import cn.itcast.entity.User;
public class Form4DemoAction extends ActionSupport{
@Override
public String execute() throws Exception {
HttpServletRequest request=ServletActionContext.getRequest();
String username=request.getParameter("username");
String password=request.getParameter("password");
String address =request.getParameter("address");
User user=new User();
user.setUsername(username);
user.setPassword(password);
user.setAddress(address);
System.out.println(user);
return NONE;
}
}
2.属性封装
注:把表单提交的数据直接封装到action的属性里面
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>
<form action="${pageContext.request.contextPath}/data1.action" method="post">
username:<input type="text"name="username"/><br/>
password:<input type="text"name="password"/><br/>
address:<input type="text"name="address"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
配置文件:
<package name="form2" extends="struts-default" namespace="/">
<action name="data1" class="cn.itcast.data.DataDemo1Action"></action>
<action name="data2" class="cn.itcast.data.DataDemo2Action"></action>
<action name="list" class="cn.itcast.data.ListAction"></action>
<action name="map" class="cn.itcast.data.MapAction"></action>
</package>
action的代码
package cn.itcast.data;
import com.opensymphony.xwork2.ActionSupport;
public class DataDemo1Action extends ActionSupport {
private String username;
private String password;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String execute() throws Exception {
System.out.println(username+":"+password+":"+address);
return NONE;
}
}
3.表达式封装
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>
<form action="${pageContext.request.contextPath}/data3.action" method="post">
username:<input type="text"name="user.username"/><br/>
password:<input type="text"name="user.password"/><br/>
address:<input type="text"name="user.address"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
配置文件:
<action name="data3" class="cn.itcast.data.DataDemo3Action"></action>
action的代码
package cn.itcast.data;
import com.opensymphony.xwork2.ActionSupport;
import cn.itcast.entity.User;
public class DataDemo3Action extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
}
注:3,4都能把数据封装到实体类对象中,但是模型驱动只能封装一种实体类对象中,表达式封装可以封装到不同的实体类对象中
4.模型驱动封装(用的较多)
注:能直接封装到实体类对象里面,而且表单输入项的name值与实体类的变量名对应相同。不能对同一个form同时用属性封装和模型驱动封装
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>
<form action="${pageContext.request.contextPath}/data2.action" method="post">
username:<input type="text"name="username"/><br/>
password:<input type="text"name="password"/><br/>
address:<input type="text"name="address"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
配置文件:
<package name="form2" extends="struts-default" namespace="/">
<action name="data1" class="cn.itcast.data.DataDemo1Action"></action>
<action name="data2" class="cn.itcast.data.DataDemo2Action"></action>
<action name="list" class="cn.itcast.data.ListAction"></action>
<action name="map" class="cn.itcast.data.MapAction"></action>
</package>
action的代码
package cn.itcast.data;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import cn.itcast.entity.User;
@SuppressWarnings("serial")
public class DataDemo2Action extends ActionSupport implements ModelDriven<User>{
private User user=new User();
@Override
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
}
struts2获取数据封装到集合对象中
1.封装到list集合
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>
<form action="${pageContext.request.contextPath}/list.action" method="post">
username:<input type="text"name="list[0].username"/><br/>
password:<input type="text"name="list[0].password"/><br/>
address:<input type="text"name="list[0].address"/><br/>
<br/>
username:<input type="text"name="list[1].username"/><br/>
password:<input type="text"name="list[1].password"/><br/>
address:<input type="text"name="list[1].address"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html
配置文件:
<action name="list" class="cn.itcast.data.ListAction"></action>
action的代码
package cn.itcast.data;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import cn.itcast.entity.User;
public class ListAction extends ActionSupport {
private List<User> list;
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
@Override
public String execute() throws Exception {
System.out.println(list);
return NONE;
}
}
2.封装到map集合
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>
<form action="${pageContext.request.contextPath}/map.action" method="post">
username:<input type="text"name="map['one'].username"/><br/>
password:<input type="text"name="map['one'].password"/><br/>
address:<input type="text"name="map['one'].address"/><br/>
<br/>
username:<input type="text"name="map['two'].username"/><br/>
password:<input type="text"name="map['two'].password"/><br/>
address:<input type="text"name="map['two'].address"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
配置文件:
<action name="map" class="cn.itcast.data.MapAction"></action>
action的代码
package cn.itcast.data;
import java.util.Map;
import com.opensymphony.xwork2.ActionSupport;
import cn.itcast.entity.User;
public class MapAction extends ActionSupport {
private Map<String, User> map;
public Map<String, User> getMap() {
return map;
}
public void setMap(Map<String, User> map) {
this.map = map;
}
@Override
public String execute() throws Exception {
System.out.println(map);
return NONE;
}
}