struts2视频学习笔记 15-17 (访问或添加request属性,文件上传)
课时15
- 访问或添加request/session/application属性
- 1.简单说 page指当前页面。在一个jsp页面里有效
2.request 指从http请求到服务器处理结束,返回响应的整个过程。在这个过程中使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。
3.Session 有效范围当前会话,从浏览器打开到浏览器关闭这个过程。
4.application它的有效范围是整个应用。
ActionContext和ServletActionContext区别
public String execute() {
ActionContext ac = ActionContext.getContext();
ac.getApplication().put("app", "应用范围");
ac.getSession().put("ses","session范围");
ac.put("req","request范围");
return "success";
}
${applicationScope.app}<br>
${sessionScope.ses}<br>
${requestScope.req}
- 获取HttpServletRequest / HttpSession / ServletContext / HttpServletResponse对象
方法一,通过ServletActionContext.类直接获取:
public String rsa() throws Exception{
HttpServletRequest request = ServletActionContext.getRequest();
ServletContext servletContext = ServletActionContext.getServletContext();
request.setAttribute("req", "请求范围属性");
request.getSession().setAttribute("ses", "会话范围属性");
servletContext.setAttribute("app", "应用范围属性");
//HttpServletResponse response = ServletActionContext.getResponse();
return "success";
}
方法二,实现指定接口,由struts框架运行时注入:
public class HelloWorldAction implements ServletRequestAware, ServletResponseAware, ServletContextAware{
private HttpServletRequest request;
private ServletContext servletContext;
private HttpServletResponse response;
public void setServletRequest(HttpServletRequest req) {
this.request=req;
}
public void setServletResponse(HttpServletResponse res) {
this.response=res;
}
public void setServletContext(ServletContext ser) {
this.servletContext=ser;
}
- 放集合到request范围
HelloWorld.java
ac.put("names", Arrays.asList("111","222","333"));
Test.jsp
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<c:forEach items="${names}" var="name">
${name}<br>
</c:forEach>

课时16
- 文件上传
第一步:在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar。这两个文件可以从http://commons.apache.org/下载。
第二步:把form表的enctype设置为:“multipart/form-data“,默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据。如下:
<form action="${pageContext.request.contextPath}/test/list_execute.action" enctype="multipart/form-data" method="post">
文件:<input type="file" name="image">
<input type="submit" value="上传">
</form>
第三步:在Action类中添加以下属性,属性红色部分对应于表单中文件字段的名称:
package tutorial; import java.io.File;
import java.io.IOException; import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; public class HelloWorld {
private File image;//与上传字段名称相同的属性
private String imageFileName;//得到文件名称,上传字段+FileName
//private String imageContentType; //得到上传文件的类型 public String getImageFileName() {
return imageFileName;
} public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
} public File getImage() {
return image;
} public void setImage(File image) {
this.image = image;
} public String execute() throws IOException {
String realpath = ServletActionContext.getServletContext().getRealPath("/images");//得到“/images”真实路径
System.out.println(realpath);
if(image != null) {
File savefile = new File(new File(realpath),imageFileName);
if(!savefile.getParentFile().exists()) { //创建目录
savefile.getParentFile().mkdirs();
}
FileUtils.copyFile(image, savefile);//拷贝文件
ActionContext.getContext().put("msg", "上传成功");
}
return "success";
} }
默认大小为2097152字节(2M),更改默认大小
<constant name="struts.multipart.maxSize" value="10701096"></constant>

课时17
- 多文件上传
文件1:<input type="file" name="image"><br/>
文件2:<input type="file" name="image"><br/>
文件3:<input type="file" name="image"><br/>
数组或者list
public class HelloWorld {
private File[] image;//与上传字段名称相同的属性
private String[] imageFileName;//得到文件名称,上传字段+FileName
// private String imageContentType; //得到上传文件的类型
public File[] getImage() {
return image;
}
public void setImage(File[] image) {
this.image = image;
}
public String[] getImageFileName() {
return imageFileName;
}
public void setImageFileName(String[] imageFileName) {
this.imageFileName = imageFileName;
}
public String execute() throws IOException {
String realpath = ServletActionContext.getServletContext().getRealPath("/images");//得到“/images”真实路径
System.out.println(realpath);
if(image != null) {
File savedir = new File(realpath);
if(!savedir.exists()) {
savedir.mkdirs();
}
for(int i = 0; i < image.length; i++) {
File savefile = new File(savedir,imageFileName[i]);
FileUtils.copyFile(image[i], savefile);//拷贝文件
}
ActionContext.getContext().put("msg", "上传成功");
}
return "success";
}
}
struts2视频学习笔记 15-17 (访问或添加request属性,文件上传)的更多相关文章
- 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传
作者:ssslinppp 1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...
- 尚硅谷STRUTS2视频学习笔记
上一个月一直在学习STRUTS2,学习的是尚硅谷佟刚老师的视频,因为很喜欢佟刚老师的声音,而且他讲的很细,笔记做的也多,基本上是照着他的视频完整的敲了一遍代码,下面就把学习到的知识梳理一遍,最后把项目 ...
- struts2视频学习笔记 18(自定义拦截器)
课时18 自定义拦截 因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defa ...
- struts2视频学习笔记 28(OGNL表达式)
课时28 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts 2框架使用OGNL作为默认的表达式语 ...
- struts2视频学习笔记 24-27(国际化)
课时24 配置国际化全局资源文件.输出国际化信息 1.准备资源文件,添加到src目录下,资源文件的命名格式如下:baseName_language_country.propertiesbaseName ...
- struts2视频学习笔记 11-12(动态方法调用,接收请求参数)
课时11 动态方法调用 如果Action中存在多个方法时,可以使用!+方法名调用指定方法.(不推荐使用) public String execute(){ setMsg("execute&q ...
- struts2视频学习笔记 07-08(为Action的属性注入值,指定需要Struts 2处理的请求后缀,常用常量)
课时7 为Action的属性注入值(增加灵活性,适用于经常更改的参数) Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入 ...
- Spark学习笔记3(IDEA编写scala代码并打包上传集群运行)
Spark学习笔记3 IDEA编写scala代码并打包上传集群运行 我们在IDEA上的maven项目已经搭建完成了,现在可以写一个简单的spark代码并且打成jar包 上传至集群,来检验一下我们的sp ...
- ASP.NET访问网络映射盘&实现文件上传读取功能
最近在改Web的时候,遇到一个问题,要跨机器访问共享文件夹,以实现文件正常上传下载功能. 要实现该功能,可以采用HTTP的方式,也可以使用网络映射磁盘的方式,今天主要给大家分享一下使用网络映射磁盘的方 ...
随机推荐
- Servlet异常及其生命周期
Servlet 异常 在javax.servlet包中定义了两个异常类 ServletException类 ServletException类定义了一个通用的异常,可以被init().service( ...
- Python数据类型之列表
一.基本数据类型 整数:int 字符串:str(注:\t等于一个tab键) 布尔值: bool 列表:list (元素的集合) 列表用[] 元祖:tuple 元祖用() 字典:dict注:所有的数据类 ...
- CSS3关于transition过渡
第一次写博客,心里竟然有点感动,注册了两个月了,一直不敢写,总觉得这应该是大神交流的地方.今天写的一个css3的一个导航,觉得挺好看,放在网页里,也可以起到一个点睛之笔的作用. 首先写好body标签中 ...
- TreeView控件
public partial class WebForm1 : System.Web.UI.Page { DataSet dsTreeView = new DataSet(); protected v ...
- Ubuntu 通过Deb安装 MySQL5.5(转载)
1. 下载 MySQL 5.5 deb 安装包 cd /usr/local/src sudo wget -O mysql-5.5.22-debian6.0-i686.deb http://dev.my ...
- KaliLinux装好系统后安装常用软件
1.配置软件源 leafpad /etc/apt/source.list or(recommand):#官方源deb kali main non-free contribdeb-src kali ma ...
- django的安装和搭建
一.先下载pyton,配置下python的环境变量,这个很重要,然后下载django,解压到与python同一个根目录底下,进入django目录,运行python setup.py install安装 ...
- 可重入锁 & 自旋锁 & Java里的AtomicReference和CAS操作 & Linux mutex不可重入
之前还是写过蛮多的关于锁的文章的: http://www.cnblogs.com/charlesblc/p/5994162.html <[转载]Java中的锁机制 synchronized &a ...
- 3 javascript
3 javascript javascript基础 html: 负责了一个页面的结构. css: 负责了一个页面的样式. javascript: 负责与用户进行交互. 1997年欧洲的计算机 ...
- TCP/IP协议学习(一) LWIP实现网络远程IAP下载更新
最近需要实现通过TCP/IP远程IAP在线更新功能,忙了2周终于在原有嵌入式服务器的基础上实现了该功能,这里就记录下实现的过程. IAP又称在应用编程,其实说简单点就是实现不需要jlink,仅通过芯片 ...