文件下載 1.寫action類 2.配置struts.xml 查看源碼發現要以流的方式返回給客戶端需要配置3個參數 上面那張圖流寫is根本調用不了getInputStream的方法要把is變數名更改為inputStream才可以。 下載完成 struts的OGNL OGNL是Object Graph ...
文件下載
1.寫action類
package com.gyf.web.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import com.opensymphony.xwork2.ActionSupport;
public class DownloadAction3 extends ActionSupport {
private InputStream is;
public InputStream getInputStream() {
return is;
}
public String download() throws FileNotFoundException{
String path = "C:/Users/Yuan/Desktop/9.png";
//給輸入流賦值
is = new FileInputStream(path);
return SUCCESS;
}
}
2.配置struts.xml
查看源碼發現要以流的方式返回給客戶端需要配置3個參數
<action name="download" class="com.gyf.web.action.DownloadAction" method="download">
<!--以流的形式返回給客戶端 -->
<result name="success" type="stream">
<param name="inputName">is</param><!--輸入流名稱 -->
<param name="contentType">application/octet-stream</param><!--設置響應頭 -->
<param name="contentDisposition">attachment;filename=9.png</param><!--設置響應頭 -->
</result>
</action>
上面那張圖流寫is根本調用不了getInputStream的方法要把is變數名更改為inputStream才可以。
下載完成
struts的OGNL
OGNL是Object Graphic Navigation Language的縮寫
他是一個單獨的開源項目,Struts2框架使用OGNL作為預設的表達式語言
OGNL是struts2整合的一個開源項目,所以在Struts2中,要想使用OGNL表達式,必須使用struts2標簽庫
OGNL相當於EL表達式,從作用於取數據
OGNL的功能
訪問對象方法,靜態屬性,靜態方法,封裝List數據,封裝Map數據
<!-- OGNL表達式
首先:要在jsp頁面導入<%@ taglib uri="/struts-tags" prefix="s" %>>
-->
<!-- 表示從作用於取值,加上單引號表示字元串 -->
<s:property value="java-struts2"/>
<!-- 表示獲取字元串的長度 -->
<s:property value="'java-struts2'.length()"/>
<!-- 訪問靜態屬性,需要在strtus上配置允許靜態方法訪問 -->
int的最大值<s:property value="@java.lang.Integer@MAX_VALUE"/>
隨機數<s:property value="@java.lang.Math@random()"/>
<!-- 封裝List數據,數組 -->
<%-- <s:radio list="{'男','女'}" name="gender" label="性別"></s:radio> --%>
<!-- 封裝Map數據,用#{'key''value'} -->
<s:radio list="#{'male':'男','female':'女'}" name="gender" label="性別"></s:radio>
往contextMap存數據
struts的iterator遍歷
在action類中提供了get 方法,就會把屬性存放到值棧
1.創建action類
package com.gyf.web.action;
import java.util.ArrayList;
import java.util.List;
import com.gyf.web.model.Student;
import com.opensymphony.xwork2.ActionSupport;
public class Demo03Action3 extends ActionSupport{
//action提供屬性,並提供get方法,這個屬性就會被存在值棧
private List<Student> stuList;
public String list() {
//JSP一般從值棧取數據
//創建對象
stuList = new ArrayList<Student>();
//往集合添加數據
stuList.add(new Student("迪麗熱巴",18,"北京"));
stuList.add(new Student("劉亦菲",19,"上海"));
stuList.add(new Student("佟麗婭",20,"深圳"));
stuList.add(new Student("古娜力扎",21,"廣州"));
stuList.add(new Student("關之琳",21,"香港"));
return SUCCESS;
}
public List<Student> getStuList() {
return stuList;
}
}
2.數據在jsp頁面中使用遍歷把數據取出,
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>
<s:debug></s:debug>
<body>
<table border="1">
<tr>
<td>名字</td>
<td>年齡</td>
<td>城市</td>
</tr>
<!--使用struts的遍歷標簽
value :寫值棧的變數名
var:遍歷的變數名,存放到ContextMap
-->
<s:iterator value="stuList" var="stu"><!--值棧中的數據不用加上#可以取 -->
<tr>
<td><s:property value="#stu.name"/></td><!--ContextMap的數據要加上#取 -->
<td><s:property value="#stu.age"/></td>
<td><s:property value="#stu.city"/></td>
</tr>
</s:iterator>
</table>
</body>
</html>
OGNL投影:是指可以給定過濾條件
OGNL表達式加條件
1 > .?#過濾所有符合條件的集合
2 > .^#過濾第一個符合條件的集合
3 > .$# 過濾最後一個符合條件的集合
Struts的set標簽
set標簽
往作用於存數據
value:值
var:變數名
scope:作用域
<!-- s:set標簽
往作用於存數據
value:值
var:變數名
scope:作用域
-->
<s:set value="'迪麗熱巴'" var = "username1" scope="application"/>
<s:set value="'古娜力扎'" var = "username2" scope="session"/>
<s:set value="'劉亦菲'" var = "username3" scope="request"/>
<s:set value="'佟麗婭'" var = "username4" scope="action"/>
<!-- 取值 -->
<s:property value="#application.username1"/>
<s:property value="#session.username2"/>
<s:property value="#request.username3"/>
<s:property value="#action.username4"/>