Struts笔记5

2019-08-09 00:00:00 struts 笔记

文件下载

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个参数《Struts笔记5》

<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>

《Struts笔记5》

上面那张图流写is根本调用不了getInputStream的方法要把is变量名更改为inputStream才可以。

下载完成

《Struts笔记5》

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笔记5》

struts的iterator遍历

在action类中提供了get 方法,就会把属性存放到值栈

《Struts笔记5》

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>

《Struts笔记5》

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"/>

相关文章