zoukankan      html  css  js  c++  java
  • Struts笔记5

    文件下载

    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个参数img

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

    img

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

    下载完成

    img

    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存数据

    img

    struts的iterator遍历

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

    img

    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>
    

    img

    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"/>
    
  • 相关阅读:
    分页功能
    四个内置对象的作用范围
    include和application
    jsp中的session
    IDC机房的相关常识
    使用dm-cache组合SSD与HDD实现高性价比存储
    负载均衡基本原理与lvs
    秒级别执行脚本的方法
    Tomcat调优
    Nginx调优
  • 原文地址:https://www.cnblogs.com/train99999/p/11161227.html
Copyright © 2011-2022 走看看