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. 牛客练习赛47 DongDong数颜色 (莫队算法)

    链接:https://ac.nowcoder.com/acm/contest/904/E 来源:牛客网 DongDong数颜色 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 5242 ...

  2. fixed固定时弹窗上的input被软键盘遮住的问题

    <div class="pwhCover"> <div class="pwhCon"> <div class="pwhT ...

  3. 手机端 设置html上font-size的值 使用rem

    在head标签上加入: (function() { var b = navigator.userAgent; ipad = b.match(/(iPad).*OS\s([\d_]+)/) ? true ...

  4. 【leetcode】1255. Maximum Score Words Formed by Letters

    题目如下: Given a list of words, list of  single letters (might be repeating) and score of every charact ...

  5. 开发一个简单 ef+dapper 数据操作

    新建一个net core 2项目

  6. OpenCV笔记(3)(Canny边缘检测、高斯金字塔、拉普拉斯金字塔、图像轮廓、模板匹配)

    一.Canny边缘检测 Canny边缘检测是一系列方法综合的结果.其中主要包含以下步骤: 1.使用高斯滤波器,平滑图像,滤除噪声. 2.计算图像中每个像素点的梯度强度和方向. 3.应用非极大值抑制(N ...

  7. Qt:The CDB Process Terminated!调试失败

       一般是找不到DLL库导致的CDB终止.

  8. CF1043F Make It One 容斥+dp+组合

    考试的时候考的一道题,感觉挺神的. 我们发现将所有数去重后最多只会选不到 $7$ 后 $gcd$ 就会变成 $1$. 令 $f[i][k]$ 表示选 $i$ 个数后 $gcd$ 为 $k$ 的方案数. ...

  9. maven安装问题解决

    出现: The JAVA_HOME environment variable is not defined correctly This environment variable is needed ...

  10. 一些简单题(1)(Source : NOIP历年试题+杂题)

    最近也写了些许题目吧,还是写写博客,捋捋思路. P2216 [HAOI2007]理想的正方形 求一个$a \times b(a,b \leq 10^3)$的矩阵,求出一个$n \times n (n ...