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令牌,文件上传和下载(单/多))的更多相关文章

  1. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息

    1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...

  2. java框架篇---struts之文件上传和下载

    Struts2文件上传 Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的 ...

  3. Java Struts文件上传和下载详解

    Struts2文件上传 Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的 ...

  4. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  5. java文件上传和下载

    简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...

  6. java的文件上传和下载 抄袭别人的.在底部有说明.

    =======后续 这里采用的是输出流的方式,我电脑装的是windows系统,测试没有问题,但是当把项目放到Linux系统上跑时,就会出现保存位置错误的情况, 指定的路径就会被当做文件名的一部分保存了 ...

  7. common-fileupload组件实现java文件上传和下载

    简介:文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...

  8. 使用.NET框架、Web service实现Android的文件上传(二)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYUAAAKpCAIAAADcx6fPAAAgAElEQVR4nOydd1hT5+LHg1attbfr1t ...

  9. java代码实现ftp服务器的文件上传和下载

    java代码实现文件上传到ftp服务器: 1:ftp服务器安装: 2:ftp服务器的配置: 启动成功: 2:客户端:代码实现文件的上传与下载: 1:依赖jar包: 2:sftpTools   工具类: ...

随机推荐

  1. volatile关键字解决线程间内存共享变量同步的问题,让变量可以立即同步。

  2. 磁盘IO及性能指标

    一.磁盘 I/O 的概念 I/O 的概念,从字义来理解就是输入输出.操作系统从上层到底层,各个层次之间均存在 I/O.比如,CPU 有 I/O,内存有 I/O, VMM 有 I/O, 底层磁盘上也有 ...

  3. 我说CMMI之五:CMMI 4个等级的区别--转载

    我说CMMI之五:CMMI 4个等级的区别 了解CMMI的人都知道CMMI有5个等级,但是要将5个等级的区别真正说明白,说透彻不太容易.下面我们用一个表格概括之.表格中并没有1级,1级在CMMI中没有 ...

  4. php的流程控制 if elseif swich case for循环

    if ......else 最简形式: <?php                              if (true){ echo "晚上找昌仔训练去";}?> ...

  5. Java架构师面试题——JVM性能调优

    JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数. 1.Full GC 会对整个堆进行整理,包括Young.Tenured和Perm.Full GC因为需要对 ...

  6. k8b部署prometheus+grafana

    来源: https://juejin.im/post/5c36054251882525a50bbdf0 https://github.com/redhatxl/k8s-prometheus-grafa ...

  7. C# 父子窗体 传值

    子窗体 public event Action<List<DataGridViewRow>> myEvent; myEvent(List); 子窗体调用 父窗体 创建对象 fr ...

  8. docker安装mysql5.6和redis3.2

    环境:centos 6.8, docker version 1.7.1 1.docker安装mysql5.6 第一步:拉取镜像 docker pull mysql:5.6 第二步:docker run ...

  9. 报错:没有与参数列表匹配的构造函数 "CFileDialog::CFileDialog" 实例

    如果是在解决方案管理器窗口内,右击你的项目“项目”,然后选“属性”(最后一项),再点“配置属性”,是个“+”号,把它展开,然后选“常规”选项卡,倒数第三项“字符集”,选择“使用多字节字符集”.再编译应 ...

  10. HGOI20190710 题解

    Problem A 游戏 有$n (1 \leq n \leq 5)$个硬币初始以"0"(正面),"1"(反面) $m (1 \leq m \leq m)$种操 ...