- 浏览: 97446 次
- 性别:
- 来自: 北京
最新评论
-
zhaolianyang:
leftcopychenhx 写道&是在什么情况作为逻 ...
JAVA 面试32问 -
zhaolianyang:
Mybeautiful 写道第二十六,当一个线程进入一个对象的 ...
JAVA 面试32问 -
leftcopychenhx:
&是在什么情况作为逻辑运算符呢
JAVA 面试32问 -
Mybeautiful:
第二十六,当一个线程进入一个对象的一个synchronized ...
JAVA 面试32问 -
zhaolianyang:
dayaolili 写道 那就换个有激情有动力的工作吧!换个适 ...
如何在工作中保持旺盛的状态???
Struts2的文件上传和下载
接上节的拦截器未完成的部分。
功能:简单介绍监听器。用struts2的拦截器做一个关于权限校验的简单例子。
一、在src下创建一个包com.test.listener,然后在此包下创建一个监听器类MyListener.java继承自接口PreResultListener:
二、将这个监听器注册到MyIntercepoter3拦截器里面去:
说明:监听器的执行时机是在Action的execute方法(或者自己定义的方法如test()方法)执行之后,但是在返回结果之前执行。
功能:使用拦截器进行一个权限校验,用户输入用户名和密码之后跳转到register.jsp页面,不允许用户直接通过register2.jsp进行提交,如果通过register2.jsp提交的话会直接的跳转到login2.jsp页面,模拟一下。
三、在之前做的login2.jsp页面为例子,在struts.xml中修改输入成功之后跳转到register2.jsp:
四、在com.test.interceptor中创建一个权限验证的拦截器AuthInterceptor.java继承自AbstractInterceptor类:
五、修改LoginAction.java类,把用户信息存放到Session中:
六、在struts.xml中注册拦截器,并且添加一个全局的转向global-results,设置type属性类型为重定向redirect:
关于拦截器的部分完成。
功能:struts2的上传和下载。
七、在WebRoot下创建一个文件夹upload,并且创建一个upload.jsp:
八、接着在创建一个结果页面result.jsp:
说明:form中使用的是enctype="application/x-www-form-urlencoded",这样是会出现编码错误的问题,所以要改成enctype="multipart/form-data",还会出现下面的错误:
修改的方法是不加载关于struts2的内容,所以要先注销了web.xml中的下面代码:
说明:这样会把上传文件中的信息都显示出来,未完待续。
接上节的拦截器未完成的部分。
功能:简单介绍监听器。用struts2的拦截器做一个关于权限校验的简单例子。
一、在src下创建一个包com.test.listener,然后在此包下创建一个监听器类MyListener.java继承自接口PreResultListener:
package com.test.interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; public class MyInterceptor3 extends MethodFilterInterceptor { public void init(){ System.out.println("init3"); } @Override protected String doIntercept(ActionInvocation invocation) throws Exception { System.out.println("my interceptor3"); String result = invocation.invoke(); return result; } }
二、将这个监听器注册到MyIntercepoter3拦截器里面去:
package com.test.interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; import com.test.listener.MyListener; public class MyInterceptor3 extends MethodFilterInterceptor { public void init(){ System.out.println("init3"); } @Override protected String doIntercept(ActionInvocation invocation) throws Exception { invocation.addPreResultListener(new MyListener()); System.out.println("my interceptor3"); String result = invocation.invoke(); System.out.println("after my interceptor3 finished"); return result; } }
说明:监听器的执行时机是在Action的execute方法(或者自己定义的方法如test()方法)执行之后,但是在返回结果之前执行。
功能:使用拦截器进行一个权限校验,用户输入用户名和密码之后跳转到register.jsp页面,不允许用户直接通过register2.jsp进行提交,如果通过register2.jsp提交的话会直接的跳转到login2.jsp页面,模拟一下。
三、在之前做的login2.jsp页面为例子,在struts.xml中修改输入成功之后跳转到register2.jsp:
<action name="login" class="com.test.action.LoginAction"> <result name="input">/login2.jsp</result> <result name="success">/register2.jsp</result> <result name="failer">login2.jsp</result> </action>
四、在com.test.interceptor中创建一个权限验证的拦截器AuthInterceptor.java继承自AbstractInterceptor类:
package com.test.interceptor; import java.util.Map; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class AuthInterceptor extends AbstractInterceptor { @Override @SuppressWarnings("unchecked") public String intercept(ActionInvocation invocation) throws Exception { Map map = invocation.getInvocationContext().getSession(); if(map.get("user") == null){ return Action.LOGIN; } else { return invocation.invoke(); } } }
五、修改LoginAction.java类,把用户信息存放到Session中:
package com.test.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @SuppressWarnings("unchecked") public String execute() throws Exception { if("zly".equals(this.getUsername().trim()) && "zly".equals(this.getPassword().trim())) { Map map = ActionContext.getContext().getSession(); map.put("user", "valid"); return "success"; } else { this.addFieldError("username", "username or password error"); return "failer"; } } @Override public void validate() { if(null == this.getUsername() || "".equals(this.getUsername().trim())) { this.addFieldError("username", "username required"); } if(null == this.getPassword() || "".equals(this.getPassword().trim())) { this.addFieldError("password", "password required"); } } }
六、在struts.xml中注册拦截器,并且添加一个全局的转向global-results,设置type属性类型为重定向redirect:
<package name="struts2" extends="struts-default"> <interceptors> <interceptor name="myInterceptor" class="com.test.interceptor.MyInterceptor"> <param name="hello">world</param> </interceptor> <interceptor name="myInterceptor2" class="com.test.interceptor.MyInterceptor2"> </interceptor> <interceptor name="myInterceptor3" class="com.test.interceptor.MyInterceptor3"> </interceptor> <interceptor name="auth" class="com.test.interceptor.AuthInterceptor"> </interceptor> <interceptor-stack name="myStack"> <!-- <interceptor-ref name="myInterceptor"></interceptor-ref> <interceptor-ref name="myInterceptor2"></interceptor-ref> --> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="myStack"></default-interceptor-ref> <global-results> <result name="login" type="redirect">/login2.jsp</result> </global-results> <action name="login" class="com.test.action.LoginAction"> <result name="input">/login2.jsp</result> <result name="success">/register2.jsp</result> <result name="failer">login2.jsp</result> </action> <action name="pointConverter" class="com.test.action.PointAction"> <result name="success">/output.jsp</result> </action> <action name="register" class="com.test.action.RegisterAction" method="test"> <result name="success">/success.jsp</result> <result name="input">/register2.jsp</result> <interceptor-ref name="auth"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- <interceptor-ref name="myInterceptor3"> <param name="excludeMethods">test,execute</param> <param name="includeMethods">test</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> --> </action> </package>
关于拦截器的部分完成。
功能:struts2的上传和下载。
七、在WebRoot下创建一个文件夹upload,并且创建一个upload.jsp:
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Insert title here</title> </head> <body> <form action="result.jsp" method="post" enctype="application/x-www-form-urlencoded"> Information:<input type="text" name="info"><br> File:<input type="file" name="file"><br> <input type="submit" name="submit" value=" submit "> </form> </body> </html>
八、接着在创建一个结果页面result.jsp:
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@ page import="java.io.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Insert title here</title> </head> <body> <% InputStream is = request.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String buffer = null; while((buffer = br.readLine()) != null){ out.print(buffer + "<br>"); } %> </body> </html>
说明:form中使用的是enctype="application/x-www-form-urlencoded",这样是会出现编码错误的问题,所以要改成enctype="multipart/form-data",还会出现下面的错误:
修改的方法是不加载关于struts2的内容,所以要先注销了web.xml中的下面代码:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> --> <!--表示客服端发送过来的所有请求都必须由FilterDispatcher过滤器来过滤--> </web-app>
说明:这样会把上传文件中的信息都显示出来,未完待续。
发表评论
-
struts2学习笔记十九(第19讲.Struts2深入探索 续)
2013-01-31 01:26 829Struts2应用开发详解 第十九讲 Struts2 深入 ... -
struts2学习笔记十八(第18讲.Struts2深入探索)
2013-01-26 00:23 8301、在src目录下创建属性文件名struts.propert ... -
struts2学习笔记十七(第17讲.Struts2的国际化续)
2012-06-01 00:46 1262struts2的国际化: 1.页面的国际化,也就是jsp的国际 ... -
struts2学习笔记十六(第16讲.Struts2的国际化)
2012-05-24 23:35 854struts2学习笔记十六(第16讲.Struts2的国际化) ... -
struts2学习笔记十五(第15讲.Struts2的文件上传和下载续三)
2011-02-11 16:56 949Struts2的文件上传和下载续三 功能:用户可以自定义上传文 ... -
struts2学习笔记十四(第14讲.Struts2的文件上传和下载续二)
2011-01-21 16:00 1372Struts2的文件上传和下载续二 说明:使用struts2的 ... -
struts2学习笔记十三(第13讲.Struts2的文件上传和下载续)
2011-01-19 18:04 988Struts2的文件上传和下载续 接上面未完成的功能。 一、首 ... -
struts2学习笔记十一(第11讲.Struts2的核心 拦截器续)
2011-01-14 16:33 1054Struts2的核心 拦截器续 说明:拦截器的主要作用就是拦截 ... -
struts2学习笔记十(第10讲.Struts2的核心 拦截器)
2011-01-13 17:47 1003Struts2的核心 拦截器 一、修改RegisterAct ... -
struts2学习笔记九(第9讲.Struts2的校验框架 续)
2011-01-12 18:11 1115Struts2的校验框架 续 struts2同样支持客户端的 ... -
struts2学习笔记八(第8讲.Struts2的校验框架)
2011-01-12 15:44 961第8讲.Struts2的校验框架 之前的验证方式是stru ... -
struts2学习笔记七(第7讲.Struts2的输入校验续二)
2011-01-11 18:07 1086Struts2的输入校验续二 主要介绍addActionErr ... -
struts2学习笔记六(第6讲.Struts2的输入校验续一)
2011-01-10 14:32 1262Struts2的输入校验续一 说明: 遇到类型转换错误的时候 ... -
struts2学习笔记五(第5讲.Struts2的输入校验)
2011-01-07 18:36 1072Struts2的输入校验 数据校验是建立在类型转换的基础之上的 ... -
struts2学习笔记四(第4讲.Struts2的类型转换续)
2011-01-06 23:25 1068struts2中的局部类型转换 新的需求:用户需要同时增加三 ... -
struts2学习笔记三(第3讲.Struts2的类型转换)
2011-01-05 17:31 1095struts2中的局部类型转换 其中一个主要的就是使用逗号将 ... -
struts2学习笔记二(第2讲.Struts2入门与配置续)
2011-01-05 16:36 966接上面未完成的功能:判断输入的用户名和密码是否正确。 一、创建 ... -
struts2学习笔记一(第1讲.Struts2入门与配置)
2011-01-05 00:12 1405struts2学习笔记一(第1讲.Struts2入门与配置) ...
相关推荐
在本篇“Struts2学习笔记十四”中,我们将深入探讨Struts2框架如何实现文件上传和下载功能,这是web应用中常见的需求,尤其在处理用户提交的表单数据时。我们将不涉及具体代码,而是重点讲解相关概念和技术原理。 ...
在第19讲“Struts2深入探索”中,我们将继续深入理解Struts2的核心特性和工作原理,这包括但不限于配置、拦截器、插件、以及源码分析。以下是关于Struts2的一些关键知识点: 1. **MVC模式**:Struts2遵循Model-View...
7. **国际化(三十二).txt**:Struts2支持国际化,允许开发者根据用户的语言和地域提供不同的显示内容。这部分内容可能涵盖了资源文件的创建、配置和在Action中的使用。 8. **Struts2集成Spring.txt**:Struts2...
### Struts2学习笔记2012 #### 一、建立一个Struts2工程 **步骤详解:** 1. **创建Web项目:** - 在MyEclipse中选择“File” > “New” > “Dynamic Web Project”,创建一个新的Web项目。 2. **解压并配置...
第十二章 Altering Tables and Constraints..142 第十三章 Creating Sequences..........145 第十四章 Creating View(创建视图)146 第十五章 Creating Indexes(创建索引).....148 第十六章 权限的授予与收回...........
创建Struts2工程通常涉及配置构建工具(如Maven或Gradle),添加Struts2的依赖库,以及在项目结构中设置必需的目录和文件,比如`struts.xml`配置文件。 2. **第一个示例程序Hello Struts** "Hello Struts"是初学...
第十二章 Altering Tables and Constraints..142 第十三章 Creating Sequences..........145 第十四章 Creating View(创建视图)146 第十五章 Creating Indexes(创建索引).....148 第十六章 权限的授予与收回...........
Struts是Java Web开发中的一个开源框架,由Apache软件基金会维护。它主要为MVC(Model-View-Controller)...提供的压缩包文件包含的学习笔记、源代码和PPT将进一步加深对Struts的理解,帮助你在实践中巩固这些知识。
目录 1.1 Spring 框架学习路线:...........................................................................................................................4 1.2 Spring 框架的概述:...........................
在描述中提到的文件"031203_【第12章:JAVA IO】_字节流与字符流笔记.pdf"可能详细介绍了字节流和字符流的概念。字节流处理原始二进制数据,适用于所有类型的数据,包括图片、音频等;字符流处理文本数据,通常基于...
### 牛人的Spring学习笔记,非常适合初学者 #### 第一课:面向抽象编程 面向抽象编程是一种编程思想,强调在程序设计过程中通过定义抽象层来分离业务逻辑与具体实现细节。这种方式有助于提高软件的可维护性和扩展...
《马士兵Hibernate学习笔记》是一份详尽的教程,涵盖了Hibernate框架的核心概念和技术要点。Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,它有效地解决了Java应用程序与数据库之间的数据交互问题,...
### Spring2.5 学习笔记知识点概览 #### 第一课:面向抽象编程 - **概念理解**:面向抽象编程是一种设计模式,其核心思想是通过定义接口或抽象类来实现程序结构的设计,使具体实现与接口分离,增强系统的灵活性和...
**JSP完全学习笔记概述** JSP(JavaServer Pages)是一种动态网页技术,它结合了HTML、Java代码和脚本语言,使得开发者可以方便地创建交互式的Web应用程序。本学习笔记全面涵盖了JSP的关键概念、核心语法、常用标签...
{12.11.2}intersect与minus}{166}{subsection.12.11.2} {12.11.3}join}{166}{subsection.12.11.3} {12.11.3.1}cross join}{166}{subsubsection.12.11.3.1} {12.11.3.2}inner join}{167}{subsubsection.12.11.3.2...
### Java学习笔记知识点详解 #### 一、Java平台概述 - **J2SE (Java Platform Standard Edition)**: 标准版Java开发平台,主要用于桌面应用软件的开发。 - **J2EE (Java Platform Enterprise Edition)**: 企业版...
### Spring 2.5 学习笔记知识点梳理 #### 第一课:面向抽象编程 - **定义**:面向抽象编程是一种编程范式,强调通过抽象类或接口来设计程序结构,减少对具体实现的依赖。 - **优势**: - 提高了系统的可维护性与...
9. **Struts和Struts2**:Struts是基于MVC设计模式的JavaWeb框架,Struts2是其升级版本,增加了更多功能和灵活性,如拦截器和插件系统。 10. **JSF(JavaServer Faces)**:JSF是另一种JavaWeb UI框架,它提供组件...
### WebWork学习笔记知识点 #### 一、WebWork框架简介 - **定义**: WebWork是一个由OpenSymphony组织开发的MVC(Model-View-Controller)框架,专注于组件化和代码重用,适用于J2EE应用程序开发。 - **最新版本**:...