1、獲取 REQUEST對象和 RESPONSE對象
在struts中也可以獲取servlet包中的request和response對象
修改ProductAction的show方法,獲取request和response對象
訪問頁面 http://127.0.0.1:8080/struts/showProduct
在Tomcat的控制檯輸出 可以看到Struts使用類StrutsRequestWrapper對HttpServletRequest進行了封裝
package com.hjsy.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.hjsy.bean.Product;
public class ProductAction {
private Product product;
public String show() {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
System.out.println("request:\t" + request);
System.out.println("response:\t" + response);
product = new Product();
product.setName("花季歲月");
return "show";
}
public String add(){
System.out.println("product.name:"+product.getName());
return "show";
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
2、獲取SESSION對象
struts中的Session有兩個
一個是傳統的servlet包下的HttpSession
另一個是Struts中自己定義的Session
傳統的servlet包下的session的獲取辦法是:
ServletActionContext.getRequest().getSession();
使用該方法,需要在eclipse的項目中導入servlet-api.jar,該jar包我已經添加在項目lib中了
新的Session的獲取辦法是
Map m = ActionContext.getContext().getSession();
這個session以Map類的形式出現,其中的值和HttpSession中的值是同步的
3、在ProductAction的add方法中訪問Session
在add方法中獲取Struts定義的Session
Map
m = ActionContext.getContext().getSession();
然後把name放進去
package com.hjsy.action;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.hjsy.bean.Product;
import com.opensymphony.xwork2.ActionContext;
public class ProductAction {
private Product product;
public String show() {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
System.out.println("request:\t" + request);
System.out.println("response:\t" + response);
product = new Product();
product.setName("花季歲月");
return "show";
}
public String add() {
System.out.println("product.name:" + product.getName());
Map m = ActionContext.getContext().getSession();
m.put("name", product.getName());
return "show";
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
4、在show.jsp中把通過EL表達式把session中的數據取出來
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@page isELIgnored="false"%>
product.name:${product.name}</br>
session中的name:${name}
5、測試
重啓Tomcat,訪問:http://127.0.0.1:8080/struts/addProduct.jsp
6、如何上傳文件
首先準備 upload.jsp
上傳一定要爲form加上enctype="multipart/form-data",表示提交的數據是二進制的
並且必須是method="post"
使用struts的s:file標籤標識上傳文件框
<s:file name="doc" label="upload"
/>
這裏name使用doc會和服務端的相應代碼匹配
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@page isELIgnored="false" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
上傳文件 : <input type="file" name="doc" /> <br>
<input type="submit" value="上傳">
</form>
</body>
</html>
7、UploadAction.java
在upload.jsp中file字段對應的name是"doc"
所以在action中,必須準備3個屬性,分別是
File doc;
String docFileName;
String docContentType;
屬性名字不能使用其他的,必須基於“doc"
然後爲這3個屬性提供getter setter
8、struts.xml
爲upload路徑配置UploadAction,並返回success.jsp
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<package name="basicstruts" extends="struts-default">
<action name="index">
<result>index.jsp</result>
</action>
<action name="showProduct" class="com.hjsy.action.ProductAction"
method="show">
<result name="show">show.jsp</result>
</action>
<action name="addProduct" class="com.hjsy.action.ProductAction"
method="add">
<result name="show">show.jsp</result>
</action>
<action name="upload" class="com.hjsy.action.UploadAction"
method="upload">
<result name="success">success.jsp</result>
</action>
</package>
</struts>
9、success.jsp
分別顯示doc,docFileName,docContentType
<%@page isELIgnored="false"%>
uploaded success
${doc}
<br/>
${docFileName}
<br/>
${docContentType}
<br/>
10、測試
重啓tomcat,訪問頁面,進行文件上傳提交
http://127.0.0.1:8080/struts/upload.jsp
第一行表示上傳後被放在tomcat的work目錄下,並且以.tmp命名
第二行是上傳文件本來的名字
第三行是上傳文件的mime
type
11、上傳文件最大值
struts上傳文件的大小默認是比較小的只有2M,可以進行設置
修改struts.xml
設置上傳文件最大大小爲10M
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.multipart.maxSize" value="10240000"/>
<package name="basicstruts" extends="struts-default">
<action name="index">
<result>index.jsp</result>
</action>
<action name="showProduct" class="com.hjsy.action.ProductAction"
method="show">
<result name="show">show.jsp</result>
</action>
<action name="addProduct" class="com.hjsy.action.ProductAction"
method="add">
<result name="show">show.jsp</result>
</action>
<action name="upload" class="com.hjsy.action.UploadAction"
method="upload">
<result name="success">success.jsp</result>
</action>
</package>
</struts>
12、FORM 標籤
與jstl標準標籤庫類似的,struts有專屬標籤庫
form標籤用於提交數據
修改addProduct.jsp
使用struts標籤庫
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<!--
<form action="addProduct" method="post">
<input type="text" name="product.name">
<br/>
<input type="submit" value="submit">
</form>
-->
<body>
<s:form action="addProduct">
<s:textfield name="product.name" label="product name" />
<s:submit value="Submit" />
</s:form>
</body>
</html>
13、測試
重啓Tomcat,訪問:http://127.0.0.1:8080/struts/addProduct.jsp
通過瀏覽器查看源碼可以發現,struts把表單裏的內容自動轉換成了table
14、使用S:ITERATOR 標籤遍歷集合
與JSTL標準標籤庫的c:forEach類似的,struts也提供了一個s:iterator用於遍歷一個集合中的數據
爲ProductAction增加list方法
(1)爲ProductAction增加一個products屬性,類型是List,並提供getter setter
(2) 爲ProductAction增加一個list()方法,爲products添加3個product對象,並返回“list"
package com.hjsy.action;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.hjsy.bean.Product;
import com.opensymphony.xwork2.ActionContext;
public class ProductAction {
private Product product;
private List<Product> products;
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
public String show() {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
System.out.println("request:\t" + request);
System.out.println("response:\t" + response);
product = new Product();
product.setName("花季歲月");
return "show";
}
public String list() {
products=new ArrayList();
Product p1 = new Product();
p1.setId(1);
p1.setName("product1");
Product p2 = new Product();
p2.setId(2);
p2.setName("product2");
Product p3 = new Product();
p3.setId(3);
p3.setName("product3");
products.add(p1);
products.add(p2);
products.add(p3);
return "list";
}
public String add() {
System.out.println("product.name:" + product.getName());
Map m = ActionContext.getContext().getSession();
m.put("name", product.getName());
return "show";
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
15、struts.xml
配置路徑listProduct,並返回list.jsp
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.multipart.maxSize" value="10240000" />
<package name="basicstruts" extends="struts-default">
<action name="index">
<result>index.jsp</result>
</action>
<action name="showProduct" class="com.hjsy.action.ProductAction"
method="show">
<result name="show">show.jsp</result>
</action>
<action name="addProduct" class="com.hjsy.action.ProductAction"
method="add">
<result name="show">show.jsp</result>
</action>
<action name="upload" class="com.hjsy.action.UploadAction"
method="upload">
<result name="success">success.jsp</result>
</action>
<action name="listProduct" class="com.hjsy.action.ProductAction"
method="list">
<result name="list">list.jsp</result>
</action>
</package>
</struts>
16、list.jsp
使用s:iterator標籤進行遍歷
value 表示集合
var 表示遍歷出來的元素
st 表示遍歷出來的元素狀態
st.index 當前行號
基0
st.count 當前行號
基1
st.first 是否是第一個元素
st.last 是否是最後一個元素
st.odd 是否是奇數
st.even 是否是偶數
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@page isELIgnored="false"%>
<style>
table {
border-collapse: collapse;
}
td {
border: 1px solid gray;
}
</style>
<table align="center">
<tr>
<td>id</td>
<td>name</td>
<td>st.index</td>
<td>st.count</td>
<td>st.first</td>
<td>st.last</td>
<td>st.odd</td>
<td>st.even</td>
</tr>
<s:iterator value="products" var="p" status="st">
<tr>
<td>${p.id}</td>
<td>${p.name}</td>
<td>${st.index}</td>
<td>${st.count}</td>
<td>${st.first}</td>
<td>${st.last}</td>
<td>${st.odd}</td>
<td>${st.even}</td>
</tr>
</s:iterator>
</table>
17、測試
重啓tomcat,訪問網頁
http://127.0.0.1:8080/struts/listProduct
18、如何使用CHECKBOXLIST 標籤
遍歷3個product成爲checkbox
並且第2個和第3個是默認選中的
19、ProductAction.java
除了前例中準備的products
再新增一個屬性ListselectedProducts,用於存放哪些產品被選中了
注意: ListselectedProducts 裏放的是id,而不是對象
package com.hjsy.action;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.hjsy.bean.Product;
import com.opensymphony.xwork2.ActionContext;
public class ProductAction {
private Product product;
private List<Product> products;
private List<Integer> selectedProducts;
public List<Integer> getSelectedProducts() {
return selectedProducts;
}
public void setSelectedProducts(List<Integer> selectedProducts) {
this.selectedProducts = selectedProducts;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
public String show() {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
System.out.println("request:\t" + request);
System.out.println("response:\t" + response);
product = new Product();
product.setName("花季歲月");
return "show";
}
public String list() {
products=new ArrayList();
selectedProducts = new ArrayList();
Product p1 = new Product();
p1.setId(1);
p1.setName("product1");
Product p2 = new Product();
p2.setId(2);
p2.setName("product2");
Product p3 = new Product();
p3.setId(3);
p3.setName("product3");
products.add(p1);
products.add(p2);
products.add(p3);
selectedProducts.add(2);
selectedProducts.add(3);
return "list";
}
public String add() {
System.out.println("product.name:" + product.getName());
Map m = ActionContext.getContext().getSession();
m.put("name", product.getName());
return "show";
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
20、list.jsp
使用s:checkboxlist標籤
value:哪些被選中
name:提交到服務端用的名稱
list:用於遍歷的集合
listValue:顯示的checkbox的名稱
listKey:checkbox的value
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@page isELIgnored="false"%>
<style>
table {
border-collapse: collapse;
}
td {
border: 1px solid gray;
}
</style>
<table align="center">
<tr>
<td>id</td>
<td>name</td>
<td>st.index</td>
<td>st.count</td>
<td>st.first</td>
<td>st.last</td>
<td>st.odd</td>
<td>st.even</td>
</tr>
<s:iterator value="products" var="p" status="st">
<tr>
<td>${p.id}</td>
<td>${p.name}</td>
<td>${st.index}</td>
<td>${st.count}</td>
<td>${st.first}</td>
<td>${st.last}</td>
<td>${st.odd}</td>
<td>${st.even}</td>
</tr>
</s:iterator>
</table>
<s:checkboxlist value="selectedProducts" name="product.id"
list="products" listValue="name" listKey="id" />
21、測試
重啓tomcat,訪問頁面
http://127.0.0.1:8080/struts/listProduct
22、如何使用<S:RADIO>標籤
遍歷products成爲radio,並選中第二個
23、修改list.jsp
在前例checkbox標籤的基礎上增加s:radio標籤
value表示:哪項被選中
name表示:提交到服務端用的名稱
list:用於遍歷的集合
listValue:顯示的radio的名稱
listKey:radio的value
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@page isELIgnored="false"%>
<style>
table {
border-collapse: collapse;
}
td {
border: 1px solid gray;
}
</style>
<table align="center">
<tr>
<td>id</td>
<td>name</td>
<td>st.index</td>
<td>st.count</td>
<td>st.first</td>
<td>st.last</td>
<td>st.odd</td>
<td>st.even</td>
</tr>
<s:iterator value="products" var="p" status="st">
<tr>
<td>${p.id}</td>
<td>${p.name}</td>
<td>${st.index}</td>
<td>${st.count}</td>
<td>${st.first}</td>
<td>${st.last}</td>
<td>${st.odd}</td>
<td>${st.even}</td>
</tr>
</s:iterator>
</table>
<s:checkboxlist value="selectedProducts" name="product.id"
list="products" listValue="name" listKey="id" /></br>
<s:radio name="product.id" value="2" list="products" listValue="name"
listKey="id" />
24、測試
重啓Tomcat,訪問:http://127.0.0.1:8080/struts/listProduct
25、如何使用S:SELECT 標籤
遍歷products成爲select標籤
默認選中第2個和第3個
26、修改list.jsp
使用s:select標籤
name表示:提交到服務端用的名稱
list:用於遍歷的集合
listKey:每個option的value
listValue:顯示的名稱
multiple:true表示可以選中多行
size="3"表示默認顯示3行
value表示:哪些被選中
注: 可以增加一個屬性 theme="simple" 使得最後生成的最簡單的風格的html,否則就會有一些奇奇怪怪的tr
td
或者直接在struts.xml中加一句 Servlet下載文件
<constant name="struts.ui.theme" value="simple"/>
注: 如果要增加class,需要使用屬性: cssClass
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@page isELIgnored="false"%>
<style>
table {
border-collapse: collapse;
}
td {
border: 1px solid gray;
}
</style>
<table align="center">
<tr>
<td>id</td>
<td>name</td>
<td>st.index</td>
<td>st.count</td>
<td>st.first</td>
<td>st.last</td>
<td>st.odd</td>
<td>st.even</td>
</tr>
<s:iterator value="products" var="p" status="st">
<tr>
<td>${p.id}</td>
<td>${p.name}</td>
<td>${st.index}</td>
<td>${st.count}</td>
<td>${st.first}</td>
<td>${st.last}</td>
<td>${st.odd}</td>
<td>${st.even}</td>
</tr>
</s:iterator>
</table>
<s:checkboxlist value="selectedProducts" name="product.id"
list="products" listValue="name" listKey="id" /></br>
<s:radio name="product.id" value="2" list="products" listValue="name"
listKey="id" /></br>
<s:select label="products"
name="product.id"
list="products"
listKey="id"
listValue="name"
multiple="true"
size="3"
value="selectedProducts"
/>
27、測試
重啓Tomcat,訪問:http://127.0.0.1:8080/struts/listProduct
源碼:鏈接:https://pan.baidu.com/s/1eT7RuyY 密碼:tilb