Struts2(5)
文件的上传下载
-------------
文件上传的步骤:
1、编写页面,页面表单的提交方式必须为post
2、指定表单的enctype="multipart/form-data"
3、上传的控件使用 <s:file name="myfile">
4、在action声明一个属性,名称与s:file标签中的name名称一样,类型为java.io.File,并且生成get,set方法(该属性可以保存上传的文件)--------myfile
5、在action声明一个字符串类型的变量,它的名称必须是s:file标签中的name的名称加上FileName---------------myfileFileName (用于自动保存要上传的文件名称)
6、在action具体的文件中完成上传:
A、先指定,要传到哪一个文件夹中----要获得上传的文件夹在服务器中的位置
String folder = ServletActionContext.getServletContext().getRealPath(
"upload");
//构建一个要在服务器端生成的新文件
File newFile = new File(folder+"/"+myfileFileName);
//生成文件
FileUtils.copyFile(myfile, newFile);
7、分别配置:web.xml,struts.xml
---struts.multipart.maxSize=2097152 指定文件的最大尺寸,默认2M
---long size = myfile.length(); 获得上传的文件大小
--------------------------------------------------------------------------------
文件下载: (步骤)
1、编写页面
2、编写BaseAction,在类中编写一个属性HttpServletResponse res,并且实现servletResponseAware接口
3、编写ShwAction继承BaseAction,并且编写down方法
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1、设置要下的文件名
String name = "tomcat.txt";
若文件中有中文,需转码 :
String convName = URLEncoder.encode(name,"UTF-8");
2、通过response设置响应的类型;
res.setContentType("application/x-msdownload");--弹出下载的面板
3、通过response设置下载面板中显示的内容
res.setheader("Content-disposition","attachment;fileName="+name);
4、通过指定文件路径,把文件读入输入流
InputStream in = new FileInputStream("d:/"+name);
5、通过响应对象,产生输出流
OutputStream out = res.getOutputStream();
6、创建一个缓冲区,并创建一个int类型的变量,用于保存每次读入到缓冲区的实际长度
byte[] b = new byte[8192];
int len=0;
7、通过流把信息输出到客户端
while((len =in.read(b,0,8192))!=-1){
out.write(b,0,len);
}
8、关闭流
out.close();
in.close();
-----------------------------------------------------------------------------
Struts2中产生作用域的四种方式
Struts2是一个基于是MVC模式的web框架
在早期的web框架: struts1 ,webwork
Struts2 = struts1的优点 + webwork的优点 (主)
四种产生作用域的方式:
大的分类:
1、与servlet相关的作用域 (HttpServletRequest,HttpSession,ServletContext)
a、IOC方式 (通过实现接口产生的作用域)
b、非IOC方式 (手动构建,不是实现接口)
2、与servlet无关的的作用域 (Map)
a、IOC方式 (通过实现接口产生的作用域)
b、非IOC方式 (手动构建,不是实现接口)