Struts2国际化、拦截器配置以及使用struts上传文件

一、国际化

hai=你好         zh           CN
hai=hello   en US
hai=你好

1、先写配置文件properties

key=hello
jsp.login.username=Username
jsp.login.pwd=PassWord
jsp.login.deng=deng


2、配置struts

<struts>
	<constant name ="struts.devMode" value ="true"></constant>
	<!-- 配置国际化资源 -->
	<constant name="struts.custom.i18n.resources" value="com.lzh.resource.message"></constant>
	<package name="p1" extends="struts-default">
		<action name="action1" class="com.lzh.web.action.TestAction">
			<result name="success">/success.jsp</result>
		</action>
	</package>

 </struts>	

3、写动作类

public class TestAction extends ActionSupport {

		public String execute() throws Exception{
			String value =getText("key");
			System.out.println(value);
			return SUCCESS;
		}
}

4、jsp页面

<body>
  	<!-- 直接访问jsp页面,使用的是全局范围的资源 
  	通过action访问jsp页面,先找动作类范围的资源,没有再去找包里的,包里没有再找全局的
  		 -->
  	<s:text name="key"></s:text>
  	<s:text name="hah"></s:text><!-- 找不到时直接输出键名 -->
  	<!-- 通过action访问jsp页面实现访问全局范围的资源 用s:i18n标签-->
  	<s:i18n name="com.lzh.resource.message">
  			<s:text name="key"></s:text>
  	</s:i18n>
  <!-- name 属性的值不存在,会按照默认的搜索顺序去查找 -->
  	<s:i18n name="com.lzh.resources.message">
  			<s:text name="key"></s:text>
  	</s:i18n>
  </body>

4、配置文件分别放在不同的位置


二、Struts中的拦截器(非常重要)

1、拦截器的重要性

struts2中的很多功能都是有拦截器完成的。比如:servletConfig,staticParam,params,modelDriven等待

是AOP编程思想的一种应用形式。

2、拦截器执行的时机:


ActionInvocation

3、自定义拦截器


1、配置struts
<struts>
	<constant name="struts.devMode" value="true"></constant>
	<package name="p1" extends="struts-default">
		<!-- 声明拦截器 -->
		<interceptors>
			<interceptor name="myinterceptor" class="com.lzh.webinterceptor.MyInterceptor"></interceptor>
			<interceptor name="myinterceptor2" class="com.lzh.webinterceptor.MyInterceptor2"></interceptor>
		
		</interceptors>
		<action name="action1" class="com.lzh.web.action.TestAction" method="test">
			<!-- 指定拦截器的引用,默认的拦截器没了
			当多个拦截器存在时,按引用的顺序执行
			
			 -->
			<interceptor-ref name="myinterceptor"></interceptor-ref>
			<interceptor-ref name="myinterceptor2"></interceptor-ref>
			
			<result name="success">/success.jsp</result>
			<result name="input">/test.jsp</result>
		</action>
	</package>
</struts>
2、写TestAction
public class TestAction extends ActionSupport {
	public String test(){
		System.out.println("动作方法执行了");
		return SUCCESS;
	}
}

3、自定义拦截器
public class MyInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		//放行之前做的事儿
		System.out.println("拦截器1拦截了。。。");
		//放行
		String value=arg0.invoke();
		System.out.println(value);
		System.out.println("回来时的1拦截");
		return null;
	}

}

4、自定义拦截器判断用户是否登陆
1、配置struts
<?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>
	<constant name="struts.devMode" value="true"></constant>
<pre name="code" class="html">	<!-- 使用拦截器判断用户是否登录,登陆了则可以访问home.jsp -->
	<package name="p2" extends="struts-default">
		<interceptors>
			<interceptor name="checkLogin" class="com.lzh.webinterceptor.CheckLoginInterceptor"></interceptor>
				<interceptor-stack name="myStack">
					<interceptor-ref name="defaultStack"></interceptor-ref>
					<!-- 使用注入,指明拦截器不能拦截的方法 -->
					<interceptor-ref name="checkLogin">
					<!--  <param name="excludeMethods">login</param>-->	
					</interceptor-ref>
				</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="myStack"></default-interceptor-ref>
		
		<global-results>
			<result name="input">/login.jsp</result>
		</global-results>
		
		
		<!-- 登录提交到的action -->
		<action name="login" class="com.lzh.web.action.LoginAction" method="login">
			<interceptor-ref name="myStack">
				<param name="checkLogin.excludeMethods">login</param>
			</interceptor-ref>
			<result name="success" type="redirectAction">showHome</result>
		</action>
		
		<!-- 需要被拦截的 -->
		 
		<action name="showHome" class="com.lzh.web.action.LoginAction">
			<result name="success">/home.jsp</result>			
		</action>
		
		<!-- 需要被拦截 -->
		<action name="showOther" class="com.lzh.web.action.LoginAction" method="login">		
			<result name="success">/other.jsp</result>
		</action>
	
	</package>
 </struts>	

 
  
2、写login方法的action
public class LoginAction extends ActionSupport {
	public String login(){
		HttpSession session = ServletActionContext.getRequest().getSession();
		session.setAttribute("user", new Object());
		
		return SUCCESS;
	}
}

3、自定义拦截器

public class CheckLoginInterceptor extends MethodFilterInterceptor{//里面有excludeMethod和 includeMethod 是AbstractInterceptor 的子类

	@Override
	public String doIntercept(ActionInvocation arg0) throws Exception {
		//验证是否登录的拦截器
		//得到HttpRequest
		HttpServletRequest request=ServletActionContext.getRequest();
		//得到HttpSession
		HttpSession session = request.getSession();
		//从session中获取对象
		Object obj=session.getAttribute("user");
		
		if(obj!=null)
			//放行
			return arg0.invoke();
		return "input";
	}

}

三、上传文件


1、jsp里


  <body>
    		<s:form action="upload.action" enctype="multipart/form-data">
    			<s:textfield name="username" lable="用户名"></s:textfield>
    			<s:file name="photo" value="图片"></s:file>
    			<s:submit value="提交"></s:submit>
    		</s:form>
  </body>

2、struts配置


<?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>
	<constant name="struts.devMode" value="true"></constant>
	<!-- 控制上传文件的大小 -->
	<constant name="struts.multipart.maxSize" value="5242880"></constant>
	<package name="p1" extends="struts-default">
		<action name="upload" class="com.lzh.web.action.UploadAction" method="upload">
			<interceptor-ref name="defaultStack">
				<!-- 设置允许的上传文件的扩展名 -->
				<!--  <param name="fileUpload.allowedExtensions">jsp,png,gif,bmp</param>-->
				<!-- 设置上传文件允许的MIME类型 -->
				<param name="ifleUpload.allowedTypes">image/jpg,image/pjpeg,image/gif</param>
			</interceptor-ref>
			<!--  <result name="input">/upload.jsp</result>-->
		</action>
	
	</package>

 </struts>	

3、上传文件的Action


package com.lzh.web.action;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
	
	private String username;
	private File photo;
	private String photoFileName;//获取文件名(struts将文件名封装进来了) 命名规则:表单上的字段名+fileName
	private String photoContentType;//上传的文件的MIME类型 image/png
	//方法中实现文件上传
	public String upload(){
		//创建存储上传的文件的目录
		String path=ServletActionContext.getServletContext().getRealPath("/WEB-INF/upload");
		
		File dir = new File(path);
		if(!dir.exists())
			dir.mkdirs();
		//把临时文件拷到目标目录下,临时文件还存在
		//FileUtils.copyFile(new File(photoFileName), dir);
		//剪切到目标目录下
		photo.renameTo(new File(dir,photoFileName));
		
		
		
		return null;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	
	public File getPhoto() {
		return photo;
	}
	public void setPhoto(File photo) {
		this.photo = photo;
	}
	public String getPhotoFileName() {
		return photoFileName;
	}
	public void setPhotoFileName(String photoFileName) {
		this.photoFileName = photoFileName;
	}
	public String getPhotoContentType() {
		return photoContentType;
	}
	public void setPhotoContentType(String photoContentType) {
		this.photoContentType = photoContentType;
	}
	
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值