`
zhaolianyang
  • 浏览: 97446 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2学习笔记十二(第12讲.Struts2的文件上传和下载)

阅读更多
Struts2的文件上传和下载
接上节的拦截器未完成的部分。
功能:简单介绍监听器。用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>

说明:这样会把上传文件中的信息都显示出来,未完待续。
  • 大小: 235.1 KB
2
2
分享到:
评论

相关推荐

    struts2学习笔记十四(第14讲.Struts2的文件上传和下载续二)

    在本篇“Struts2学习笔记十四”中,我们将深入探讨Struts2框架如何实现文件上传和下载功能,这是web应用中常见的需求,尤其在处理用户提交的表单数据时。我们将不涉及具体代码,而是重点讲解相关概念和技术原理。 ...

    struts2学习笔记十九(第19讲.Struts2深入探索 续)

    在第19讲“Struts2深入探索”中,我们将继续深入理解Struts2的核心特性和工作原理,这包括但不限于配置、拦截器、插件、以及源码分析。以下是关于Struts2的一些关键知识点: 1. **MVC模式**:Struts2遵循Model-View...

    Struts2学习笔记

    7. **国际化(三十二).txt**:Struts2支持国际化,允许开发者根据用户的语言和地域提供不同的显示内容。这部分内容可能涵盖了资源文件的创建、配置和在Action中的使用。 8. **Struts2集成Spring.txt**:Struts2...

    Struts2学习笔记2012

    ### Struts2学习笔记2012 #### 一、建立一个Struts2工程 **步骤详解:** 1. **创建Web项目:** - 在MyEclipse中选择“File” &gt; “New” &gt; “Dynamic Web Project”,创建一个新的Web项目。 2. **解压并配置...

    Java/JavaEE 学习笔记

    第十二章 Altering Tables and Constraints..142 第十三章 Creating Sequences..........145 第十四章 Creating View(创建视图)146 第十五章 Creating Indexes(创建索引).....148 第十六章 权限的授予与收回...........

    Struts2学习笔记2011(详细图解)

    创建Struts2工程通常涉及配置构建工具(如Maven或Gradle),添加Struts2的依赖库,以及在项目结构中设置必需的目录和文件,比如`struts.xml`配置文件。 2. **第一个示例程序Hello Struts** "Hello Struts"是初学...

    J2EE学习笔记(J2ee初学者必备手册)

    第十二章 Altering Tables and Constraints..142 第十三章 Creating Sequences..........145 第十四章 Creating View(创建视图)146 第十五章 Creating Indexes(创建索引).....148 第十六章 权限的授予与收回...........

    struts学习总结

    Struts是Java Web开发中的一个开源框架,由Apache软件基金会维护。它主要为MVC(Model-View-Controller)...提供的压缩包文件包含的学习笔记、源代码和PPT将进一步加深对Struts的理解,帮助你在实践中巩固这些知识。

    spring学习笔记

    目录 1.1 Spring 框架学习路线:...........................................................................................................................4 1.2 Spring 框架的概述:...........................

    javaIO struts2的一些相关资源

    在描述中提到的文件"031203_【第12章:JAVA IO】_字节流与字符流笔记.pdf"可能详细介绍了字节流和字符流的概念。字节流处理原始二进制数据,适用于所有类型的数据,包括图片、音频等;字符流处理文本数据,通常基于...

    牛人的spring学习笔记,非常适合初学者

    ### 牛人的Spring学习笔记,非常适合初学者 #### 第一课:面向抽象编程 面向抽象编程是一种编程思想,强调在程序设计过程中通过定义抽象层来分离业务逻辑与具体实现细节。这种方式有助于提高软件的可维护性和扩展...

    马士兵hibernate学习笔记.docx

    《马士兵Hibernate学习笔记》是一份详尽的教程,涵盖了Hibernate框架的核心概念和技术要点。Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,它有效地解决了Java应用程序与数据库之间的数据交互问题,...

    spring2.5_学习笔记.

    ### Spring2.5 学习笔记知识点概览 #### 第一课:面向抽象编程 - **概念理解**:面向抽象编程是一种设计模式,其核心思想是通过定义接口或抽象类来实现程序结构的设计,使具体实现与接口分离,增强系统的灵活性和...

    JSP 完全学习笔记 全

    **JSP完全学习笔记概述** JSP(JavaServer Pages)是一种动态网页技术,它结合了HTML、Java代码和脚本语言,使得开发者可以方便地创建交互式的Web应用程序。本学习笔记全面涵盖了JSP的关键概念、核心语法、常用标签...

    Java学习笔记-个人整理的

    {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学习笔记知识点详解 #### 一、Java平台概述 - **J2SE (Java Platform Standard Edition)**: 标准版Java开发平台,主要用于桌面应用软件的开发。 - **J2EE (Java Platform Enterprise Edition)**: 企业版...

    spring2.5 学习笔记

    ### Spring 2.5 学习笔记知识点梳理 #### 第一课:面向抽象编程 - **定义**:面向抽象编程是一种编程范式,强调通过抽象类或接口来设计程序结构,减少对具体实现的依赖。 - **优势**: - 提高了系统的可维护性与...

    JavaWeb程序设计任务教程第2版课后题答案

    9. **Struts和Struts2**:Struts是基于MVC设计模式的JavaWeb框架,Struts2是其升级版本,增加了更多功能和灵活性,如拦截器和插件系统。 10. **JSF(JavaServer Faces)**:JSF是另一种JavaWeb UI框架,它提供组件...

    webwork学习笔记

    ### WebWork学习笔记知识点 #### 一、WebWork框架简介 - **定义**: WebWork是一个由OpenSymphony组织开发的MVC(Model-View-Controller)框架,专注于组件化和代码重用,适用于J2EE应用程序开发。 - **最新版本**:...

Global site tag (gtag.js) - Google Analytics