Java Struts(文件下载)
1.从注册成功页面跳转至用户详情页面(跳转至UserListAction)

2.UserListAction调用service获得用户列表,并将这些数据传送到UserList.jsp中,UserList.jsp将这些数据进行展示
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) { UsersService service=new UsersService();
ArrayList<Users> userList = service.getUserList();
request.setAttribute("userList", userList);
return mapping.findForward("showuser");
}
public ArrayList<Users> getUserList()
{
String sql="select * from _users";
List<Object[]> al = SqlHelper.executeQuery(sql, null);
ArrayList<Users> userList=new ArrayList<Users>();
Users user=new Users();
for(Object[] obj:al)
{
user.setUsername((String) obj[0]);
user.setPhoto((String) obj[1]);
user.setPhoto2((String) obj[2]);
userList.add(user);
}
return userList;
}
<h1>用户列表</h1>
<c:forEach items="${userList}" var="user">
${user.username} <img src="/StrutsFileUpAndDown/file/${user.photo}" width=50px/><a href="/StrutsFileUpAndDown/downloadFile.do?filename=${user.username}">点击下载</a><br/>
</c:forEach>
3.在UserList中存在一个跳转标签,这个标签可以进行下载用户头像,当点击这个页面后,跳转至DownloadFileAction,这个Action进行下载操作
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
FileInputStream fis=null;
OutputStream os=null;
String fileName = request.getParameter("filename");
UsersService usersService=new UsersService();
Users user = usersService.getUser(fileName); //下载文件
//1.先获取到下载文件的绝对路径
String filePath = this.getServlet().getServletContext().getRealPath("/file");
String userPhoto = user.getPhoto(); response.setContentType("text/html;charset=utf-8");
//如果文件具有中文,则需要进行Url编码
//设置一个头,告诉浏览器有文件要下载
try {
response.setHeader("Content-Disposition","attachement; filename="+java.net.URLEncoder.encode(userPhoto,"utf-8"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String fileAllPath=filePath+"\\"+userPhoto; byte []buff=new byte[1024];
int len=0;
try {
fis=new FileInputStream(fileAllPath);
os=response.getOutputStream();
while((len=fis.read(buff))!=-1)
{
os.write(buff,0,len);
}
} catch (Exception e) {
e.printStackTrace();
}
finally{
try {
fis.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return mapping.findForward("goback");
}
public Users getUser(String username)
{
String sql="select * from _users where username=?";
String[] parameter={username};
ArrayList<Object[]> al = SqlHelper.executeQuery(sql, parameter); Object[] objects = al.get(0); Users user=new Users();
user.setUsername((String) objects[0]);
user.setPhoto((String) objects[1]);
user.setPhoto2((String) objects[2]); return user;
}
1).先获取上个页面传输过来的用户名,然后再根据这个用户名从数据库中获取这个用户的相关数据。
2).获取下载文件的绝对路径,response设置编码格式和头;如果文件具有中文,则需要进行url编码
3).创建一个输入流,用于读取文件;从response中获取一个输出流,用于输出
4).通过输入输出流,将文件进行输出
Java Struts(文件下载)的更多相关文章
- struts 文件下载
=============================struts 文件下载 ================================== 步骤一: JSP页面 <a href=& ...
- struts 文件下载 annotation 注解版
[本文简介] 本文将简单介绍使用 struts2 ,通过零配置和 annotation 实现文件下载功能. [文件夹结构] [web.xml有关struts的配置] <filter> &l ...
- 用java实现文件下载,提示java.lang.IllegalStateException: getOutputStream() has already been called for this response
1. 用java实现文件下载,提示java.lang.IllegalStateException: getOutputStream() has already been called for this ...
- 【Servlet】java web 文件下载功能实现
需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一:通过超链接实现下载 在HTML网页中,通过超链接链接到要下载的文件的地址 <!DOCTYPE html> & ...
- atitit.Atitit. Gui控件and面板-----服务端控件 java struts的实现最佳实践
atitit.Atitit. Gui控件and面板-----服务端控件 java struts的实现最佳实践 1. 服务器控件的类别 1 1.1. 数据控件:该类控件可细分为两种类型:数据源控件和数 ...
- Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis
https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=6 ...
- Java Web文件下载
Web文件下载有两种.一种是文件在站点文件夹下.在浏览器中直接输入文件路径就可以下载.如http://www.xxx.com/file.zip.第二种是文件不在站点文件夹下或者文件是动态生成的(导出报 ...
- java/struts/Servlet文件下载与ftp文件上传下载
1.前端代码 使用超链接到Struts的Action或Servlet <a target="_blank" href="ftpFileAction!download ...
- Java Struts文件上传和下载详解
Struts2文件上传 Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的 ...
随机推荐
- mybatis如何直接 执行传入的任意sql语句 并按照顺序取出查询的结果集
需求: 1.直接执行前端传来的任何sql语句,parameterType="String", 2.对于任何sql语句,其返回值类型无法用resultMap在xml文件里配置或者返回 ...
- JObject使用
1.首先需要引用Json.NET\Newtonsoft.Json.dll程序集. 2.Page页 function saveUser() { var param = { id: , name: '张三 ...
- subprocess.Popen命令如何隐藏弹框
在用PYQT编写GUI界面时,代码中有用到subprocess.Popen(),打包exe后每次遇到subprocess语句是就会弹出命令框,很是头疼, 下面是解决的办法 import subproc ...
- @Configurable
spring的一个注解,用来自动注入bean的注解,不需要通过BeanFactory去获取
- HTML5 SSE 数据推送应用开发
javascript表达行为,css表达外观,注意HTML既表达结构(逻辑结构),又表达内容(数据本身)通常需要更新数据时,并不需要更新结构,正是这种不改变组织结构仅改变数据的诉求,推动了数据拉取和数 ...
- LOJ121 【离线可过】动态图连通性
题目链接:戳我 [线段树分治版本代码] 这里面的线段树是时间线段树,每一个节点都要开一个vector,记录当前时间区间中存在的边的标号qwq #include<iostream> #inc ...
- sql server中的 trimtrailingblanks
使用sp_help 查出 发现有个这个属性, 如何修改呢? SET ANSI_PADDING ONAlter Table Sys_users_History Alter column PveSit ...
- 20165219 Exp1 PC平台逆向破解
20165219 Exp1 PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串 ...
- CentOS6.5加域
为减少错误已提前关掉了SELinux,防火墙. yum install nss-pam-ldapd -y 第一步:更改主机名为linux.itxdm.me 第二步:更改setup内左边Winbind ...
- linux中python配置tab=4个空格,并显示行号。
vim ~/.vimrc 写入: set ts=4 set nu :wq 保存. source ~/.vimrc 使之生效.