java:struts框架3(自定义拦截器,token令牌,文件上传和下载(单/多))
1.自定义拦截器:


struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="inteceptor" extends="struts-default"> <interceptors>
<!-- 配置自定义拦截器 -->
<interceptor name="myInter" class="cn.zzsxt.interceptor.MyInterceptor"></interceptor>
<interceptor name="permission" class="cn.zzsxt.interceptor.PermissionInterceptor"></interceptor> <!-- 自定义拦截器栈 -->
<interceptor-stack name="myStack">
<!-- 引入自定义拦截器 -->
<interceptor-ref name="myInter"></interceptor-ref>
<!-- 引入timer拦截器 -->
<interceptor-ref name="timer"></interceptor-ref>
<!-- 引入默认拦截器栈 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack> <!-- 自定义访问权限的拦截器栈 -->
<interceptor-stack name="permissionStack">
<interceptor-ref name="permission"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors> <action name="timerAction" class="cn.zzsxt.action.TimerAction">
<result name="success">/success.jsp</result>
<interceptor-ref name="myStack"></interceptor-ref>
<interceptor-ref name="permissionStack"></interceptor-ref>
</action>
<action name="userAction" class="cn.zzsxt.action.UserAction">
<result name="success" type="redirectAction">homeAction</result>
<result name="login">/login.jsp</result>
<interceptor-ref name="permissionStack"></interceptor-ref>
</action>
<action name="homeAction" class="cn.zzsxt.action.HomeAction">
<result name="success">/list.jsp</result>
<result name="login" type="redirect">/login.jsp</result>
<!-- 引入拦截器栈 -->
<interceptor-ref name="permissionStack"></interceptor-ref>
</action>
</package>
</struts>
2.token令牌:
struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> <!-- 上传文件最大大小,默认为2097152字节(2M) -->
<constant name="struts.multipart.maxSize" value="209715200"></constant> <!-- 设置编码集 request.setCharacterEncoding("UTF-8")-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant> <package name="tokenDemo" extends="struts-default">
<action name="user-*" class="cn.zzsxt.action.UserAction" method="{1}">
<result name="success">/index.jsp</result>
<!-- token验证失败后跳转的结果视图 -->
<result name="invalid.token">/error.jsp</result>
<!-- 引入token拦截器 -->
<interceptor-ref name="token"></interceptor-ref>
<!-- 引入默认拦截器栈 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
</struts>
add.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
</head> <body>
<form action="user-doAdd.action" method="post">
<!-- token令牌 -->
<s:token></s:token>
用户编号:<input type="text" name="user.id"><br>
用户名称:<input type="text" name="user.userName"><br>
密码:<input type="text" name="user.password"><br>
<input type="submit" value="新增"/>
</form>
</body>
</html>
action:
package cn.zzsxt.action;
import com.opensymphony.xwork2.ActionSupport;
import cn.zzsxt.entity.User;
public class UserAction extends ActionSupport{
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String doAdd() throws Exception {
System.out.println("执行了用户新增,新增了:"+user);
return this.SUCCESS;
}
}
3.文件上传和下载(单/多):
struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> <!-- 上传文件最大大小,默认为2097152字节(2M) -->
<constant name="struts.multipart.maxSize" value="209715200"></constant>
<!-- 设置编码集 request.setCharacterEncoding("UTF-8")-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant> <package name="upload" extends="struts-default">
<action name="singleUpload" class="cn.zzsxt.action.SingleUploadAction">
<!-- result中name属性缺省(默认)为success -->
<result>/success.jsp</result>
</action>
<action name="mutilUpload" class="cn.zzsxt.action.MutilUploadAction">
<!-- result中name属性缺省(默认)为success -->
<result>/success.jsp</result>
</action> <action name="download" class="cn.zzsxt.action.DownloadAction">
<result type="stream">
<!-- inputName="输入流的名称",回掉action中getInputStream()方法获取输入流 -->
<param name="inputName">inputStream</param>
<!--contentType="文件类型" application/octet-stream代表对下载类型不限制 -->
<param name="contentType">application/octet-stream</param>
<!-- attachment:以附件方式保存 filename="保存的文件名称" ${fileName}获取action中fileName属性的值 -->
<param name="contentDisposition">attachment;filename=${fileName}</param>
</result>
</action>
</package>
</struts>
SingleUploadAction:
package cn.zzsxt.action; import java.io.File; import javax.servlet.ServletContext; import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class SingleUploadAction extends ActionSupport{
private File upload;//文件
private String uploadFileName;//文件名称:属性名+FileName
private String uploadContentType;//文件类型:属性名+ContentType public File getUpload() {
return upload;
} public void setUpload(File upload) {
this.upload = upload;
} public String getUploadFileName() {
return uploadFileName;
} public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
} public String getUploadContentType() {
return uploadContentType;
} public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
} /**
* 执行文件上次
*/
@Override
public String execute() throws Exception {
System.out.println("文件名称:"+uploadFileName);
System.out.println("文件类型:"+uploadContentType);
ServletContext servletContext = ServletActionContext.getServletContext();
String realPath = servletContext.getRealPath("/upload");//获取文件上次的真实目录
File uploadDir = new File(realPath);
if(!uploadDir.exists()){
uploadDir.mkdirs();//创建目录
}
//上传
FileUtils.copyFile(upload, new File(uploadDir,uploadFileName));
return this.SUCCESS;
}
}
SingleUpload.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>单文件上传</title>
</head> <body>
<form action="singleUpload.action" method="post" enctype="multipart/form-data">
文件:<input type="file" name="upload"></br>
<input type="submit" value="上传"/>
</form>
</body>
</html>
MutilUploadAction:
package cn.zzsxt.action; import java.io.File; import javax.servlet.ServletContext; import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class MutilUploadAction extends ActionSupport{
private File[] upload;//文件
private String[] uploadFileName;//文件名称:属性名+FileName
private String[] uploadContentType;//文件类型:属性名+ContentType
public File[] getUpload() {
return upload;
}
public void setUpload(File[] upload) {
this.upload = upload;
}
public String[] getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String[] uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String[] getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String[] uploadContentType) {
this.uploadContentType = uploadContentType;
} /**
* 执行文件上次
*/
@Override
public String execute() throws Exception {
System.out.println("文件名称:"+uploadFileName);
System.out.println("文件类型:"+uploadContentType);
ServletContext servletContext = ServletActionContext.getServletContext();
String realPath = servletContext.getRealPath("/upload");//获取文件上次的真实目录
File uploadDir = new File(realPath);
if(!uploadDir.exists()){
uploadDir.mkdirs();//创建目录
}
//遍历待上传的文件
for(int i=0;i<upload.length;i++){
//上传
FileUtils.copyFile(upload[i], new File(uploadDir,uploadFileName[i]));
}
return this.SUCCESS;
}
}
MutilUpload.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>单文件上传</title>
</head> <body>
<form action="mutilUpload.action" method="post" enctype="multipart/form-data">
文件1:<input type="file" name="upload"></br>
文件2:<input type="file" name="upload"></br>
文件3:<input type="file" name="upload"></br>
<input type="submit" value="上传"/>
</form>
</body>
</html>
DownloadAction:
package cn.zzsxt.action; import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream; import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class DownloadAction extends ActionSupport{
private String fileName;//接受要下载的文件名称
private InputStream inputStream; public String getFileName() {
return fileName;
} public void setFileName(String fileName) {
this.fileName = fileName;
} public InputStream getInputStream() {
return inputStream;
} public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
} /**
* 文件下载
*/
@Override
public String execute() throws Exception {
//获取服务器端保存文件的目录
ServletContext servletContext = ServletActionContext.getServletContext();
String realPath = servletContext.getRealPath("/upload");//获取文件上传的真实目录
File file = new File(realPath,fileName);
inputStream = new FileInputStream(file); //将文件转为输入流
//解决下载时中文名称乱码问题
String str = new String(fileName.getBytes("UTF-8"),"iso-8859-1");
fileName = str;
return this.SUCCESS;
}
}
Download.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>文件下载</title>
</head> <body>
<a href="download.action?fileName=1.txt">1.txt</a><br>
<a href="download.action?fileName=mystruts.png">mystruts.png</a><br>
<a href="download.action?fileName=Log4J详解.docx">Log4J详解.docx</a><br>
</body>
</html>
java:struts框架3(自定义拦截器,token令牌,文件上传和下载(单/多))的更多相关文章
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息
1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...
- java框架篇---struts之文件上传和下载
Struts2文件上传 Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的 ...
- Java Struts文件上传和下载详解
Struts2文件上传 Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的 ...
- java web学习总结(二十四) -------------------Servlet文件上传和下载的实现
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- java文件上传和下载
简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...
- java的文件上传和下载 抄袭别人的.在底部有说明.
=======后续 这里采用的是输出流的方式,我电脑装的是windows系统,测试没有问题,但是当把项目放到Linux系统上跑时,就会出现保存位置错误的情况, 指定的路径就会被当做文件名的一部分保存了 ...
- common-fileupload组件实现java文件上传和下载
简介:文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...
- 使用.NET框架、Web service实现Android的文件上传(二)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYUAAAKpCAIAAADcx6fPAAAgAElEQVR4nOydd1hT5+LHg1attbfr1t ...
- java代码实现ftp服务器的文件上传和下载
java代码实现文件上传到ftp服务器: 1:ftp服务器安装: 2:ftp服务器的配置: 启动成功: 2:客户端:代码实现文件的上传与下载: 1:依赖jar包: 2:sftpTools 工具类: ...
随机推荐
- 19.8.8 flutter 学习之创建第一个可变的Widget
创建一个很简单的可变的Widget 效果就是点击字的时候会变化 完整代码: class CarPage extends StatefulWidget { @override _CarState cre ...
- Linux修改mysql配置文件
1.首先需要知道mysql数据库安装在什么位置 2.查找配置文件位置 然后在根据这个目录,查看配置文件在哪里了(路径后面加上 --verbose --help|grep -A 1 'Default o ...
- LOJ-6284-数列分块入门8
链接: https://loj.ac/problem/6284 题意: 给出一个长为 的数列,以及 个操作,操作涉及区间询问等于一个数 的元素,并将这个区间的所有元素改为 . 思路: 维护一个分块是否 ...
- 20.包含min函数的栈(python)
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). # -*- coding:utf-8 -*- class Solution: def ...
- 将springboot jar应用打包成镜像并在docker运行成容器
先看一下我的Dockerfile内容与服务器中的目录结构 上面 yibai-0.0.1-SNAPSHOT.jar 为springboot应用打成的jar包,Dockerfile为将应用打成镜像的配置文 ...
- CSS定位——浮动定位
CSS定位机制Ⅱ——浮动定位 float属性:进行浮动定位 left,right clear属性:清除浮动 left,right,both ㈠ float属性 1.概述 ⑴div实现横向多 ...
- PHP教程-反序列化的方法
序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性.兄弟连PHP培训() 1. ...
- Window 环境升级node版本
https://github.com/Kenshin/gnvm 下载gnvm,安装在node文件目录下 gnvm version 然后打开cmd命令行窗口,输入:gnvm update latest, ...
- web文件夹上传下载方案
第一点:Java代码实现文件上传 FormFile file = manform.getFile(); String newfileName = null; String newpathname = ...
- Linux—查看路由
下面那些命令可以用来查看Linux主机的默认路由() A.route B.ifconfig C.ping D.netstat 分析: A.route命令用来显示目前本机路由表的内容,并且还可以针对路由 ...