文件下载

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

Struts笔记5的更多相关文章

  1. struts笔记

    Struts视频笔记: Struts是一个开源的web框架,框架提高了程序的规范的同时也约束了程序员的自由 为什么会有struts: 因为我们队mvc理解的不同,可能造成不同公司写程序的时候,规范不统 ...

  2. Struts 笔记 内部资料 请勿转载 谢谢合作

    Struts 概述 随着MVC 模式的广泛使用,催生了MVC 框架的产生.在所有的MVC 框架中,出现最早,应用最广的就是Struts 框架. Struts 的起源 Struts 是Apache 软件 ...

  3. Struts笔记4

    Struts2-拦截器-单个拦截器 自定义拦截器 1.创建一个继承AbstractInterceptor的类 package com.gyf.web.interceptor; import com.o ...

  4. Struts笔记3

    struts标签 form表单标签 Action:请求地址.直接写动作名称,不用写contextPath <s:form action="/user/register.action&q ...

  5. Struts笔记2

    Struts2-配置文件result元素 作用:为动作指定结果视图 name属性:逻辑视图的名称,对应着动作方法的返回值.默认值是success type属性:结果类型,指的就是用什么方式转到定义的页 ...

  6. struts笔记1

    框架:所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的精力放到业务需求的分析和理解上面 SHH:strust spring hibernate; SSM:springmvc sp ...

  7. Struts笔记二:栈值的内存区域及标签和拦截器

    值栈和ognl表达式 1.只要是一个MVC框架,必须解决数据的存和取的问题 2.struts2利用值栈来存数据,所以值栈是一个存储数据的内存结构 1.  ValueStack是一个接口,在struts ...

  8. Struts笔记一

    Struts 概念: 是一个MVC框架: Servlet的缺点 1.在web.xml中文件中需要配置很多行代码,维护起来很不方便呢,不利于团队合作. 2.一个servlet的入口只有一个doPost或 ...

  9. Struts中的OGNL和EL表达式笔记

    Struts中的OGNL和EL表达式笔记 OGNL(Object-Graph Navigation Language),可以方便的操作对象属性的表达式语言. 1.#符号的用途 一般有三种方式: 1.1 ...

随机推荐

  1. leaflet常用插件库

    1.常用地图切换加载(osm.google.baidu.gaode.tianditu.etc)https://github.com/htoooth/Leaflet.ChineseTmsProvider ...

  2. CSS角度单位:deg、grad、rad、turn

    1.deg 度(Degress).一个圆共360度 90deg = 100grad = 0.25turn ≍ 1.570796326794897rad -moz-transform: rotate(2 ...

  3. mysql 开放端口 外网访问

    mysql 开放端口 外网访问 作者: moyixi 时间: April 24, 2018 分类: 默认分类,数据库,mysql 前提: 如果是云服务器,请先把安全组件相应的开发 查看服务器的端口33 ...

  4. bugku web所有writeup_超详细讲解_持续更新

    首先说一下我的主用工具,在windows下,主要是用这些,用到其他特定的工具会在题里说. 0.浏览器:火狐,配合Max hackbar插件 (这个是免费的) 1.抓包改包:burpsuite.http ...

  5. 【软工实践】Alpha冲刺(3/6)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 对推送模块进行详细划分 基于用户的协同过滤,寻找更感兴趣的话题 学习API文档 ...

  6. python中whl的讲解

    whl 格式:这是一个压缩包,在其中包含了py文件,以及经过编译的pyd文件. 这个格式可以使文件在不具备编译环境的情况下,选择合适自己的python环境进行安装. 安装方法如下 进入命令行输入:pi ...

  7. iview3 版本 升级

    Button 废弃 type ghost,原先的 default 样式有改变. Icon 的图标升级至 ionicons 3.0 图标,图标名称有改变. Breadcrumb 废弃 href 属性. ...

  8. 表观 | Enhancer | ChIP-seq | 转录因子 | 数据库专题

    需要长期更新! 参考:生信修炼手册 enhancer的基本概念: 长度几十到几千bp,作用是提高靶基因活性,属于顺式作用原件,DNA作用到DNA,转录因子就是反式,是结合到DNA的蛋白. 1981年, ...

  9. Dart对象和类

    /* 面向对象编程(OOP)的三个基本特征是:封装.继承.多态 封装:封装是对象和类概念的主要特性.封装,把客观事物封装成抽象的类,并且把自己的部分属性和方法提供给其他对象调用, 而一部分属性和方法则 ...

  10. openresty开发系列17--lua中的正则表达式

    与其他脚本语言不同的是,Lua并不使用POSIX规范的正则表达式[4](也写作regexp)来进行模式匹配.主要的原因出于程序大小方面的考虑:实现一个典型的符合POSIX标准的regexp大概需要40 ...