Action类创建
package cn.jzy.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import cn.jzy.modle.EnglishName;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.conversion.annotations.Conversion;
import com.opensymphony.xwork2.conversion.annotations.TypeConversion;
@Conversion(conversions={
@TypeConversion(key="englishName",converter="cn.jzy.modle.type.EnglishNameConveter")
}) //引用自定义类型转化
public class LoginAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private String userName;
private String password;
private File upload;
private String uploadFileName; //注意名称必须以upload开头
private String uploadContentType;
private String token;
private EnglishName englishName;
public EnglishName getEnglishName() {
return englishName;
}
public void setEnglishName(EnglishName englishName) {
this.englishName = englishName;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
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;
}
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;
}
//表单验证 -方法一,不推荐
public void validateLogin() {
// if(!userName.equals("jzy")){
// this.addFieldError("userName", "用户名不正确");
// }
}
//文件上传
public String login(){
// HttpServletRequest request=ServletActionContext.getRequest(); //获取request对象
try{
System.out.println("firstName:"+englishName.getFirstName()+" lastName: "+englishName.getLastName());
//System.out.println(uploadFileName + " " + uploadContentType +" "+upload);
FileOutputStream fos = new FileOutputStream("d:/" + uploadFileName);
FileInputStream fis = new FileInputStream(upload);
byte[] buf = new byte[1024];
int c = 0;
while ((c=fis.read(buf, 0, buf.length)) != -1) {
fos.write(buf, 0, c);
}
fos.flush();
fos.close();
fis.close();
}catch(Exception e){
e.printStackTrace();
}
return "show";
}
}
创建配置文件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>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<constant name="struts.custom.i18n.resources" value="mystruts"></constant>
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="test" class="cn.jzy.interceptor.MyIntercepteor">
<param name="userName">你好</param>
</interceptor>
</interceptors>
<action name="index">
<result>/index.jsp</result>
</action>
<action name="login_*" class="cn.jzy.action.LoginAction" method="{1}">
<result name="show">/show.jsp</result>
<result name="invalid.token">/show.jsp</result>
<result name="input">/login.jsp</result> <!-- input为验证跳转 -->
<interceptor-ref name="tokenSession"></interceptor-ref>
<interceptor-ref name="test"></interceptor-ref>
<interceptor-ref name="fileUpload"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
<action name="comment_*" class="cn.jzy.action.CommentAction" method="{1}">
<result name="insert" type="chain">comment_select</result>
<result name="select">/comment.jsp</result>
</action>
</package>
</struts>
Jsp登录页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><s:text name="login"></s:text></title>
</head>
<body>
<s:fielderror></s:fielderror>
<s:form action="login_login.action" enctype="multipart/form-data" method="post" theme="simple">
用户名:<s:textfield name="userName" ></s:textfield><br>
英文名:<s:textfield name="englishName"></s:textfield>(姓、名用“,”隔开)<br>
密码:<s:password name="password"></s:password><br>
<s:file name="upload" key="upload"></s:file>
<s:token name="token"></s:token>
<s:submit value="登录" ></s:submit>
</s:form>
</body>
</html>
国际化资源文件
name=\u848B\u5FD7\u52C7
login=\u767B\u5F55
index=\u9996\u9875
error.userName=\u7528\u6237\u540D\u9519\u8BEF
error.password=\u5BC6\u7801\u4E0D\u6B63\u786E
自定义类型转换
创建对象
package cn.jzy.modle.type;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import cn.jzy.modle.EnglishName;
public class EnglishNameConveter extends StrutsTypeConverter{
@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
String name=arg1[0];
EnglishName en=new EnglishName();
String[] names=name.split(",");
en.setFirstName(names[0]);
en.setLastName(names[1]);
return en;
}
@Override
public String convertToString(Map arg0, Object arg1) {
EnglishName en=(EnglishName)arg1;
return en.getFirstName()+","+en.getLastName();
}
}
类型转化类
package cn.jzy.modle.type;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import cn.jzy.modle.EnglishName;
public class EnglishNameConveter extends StrutsTypeConverter{
@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
String name=arg1[0];
EnglishName en=new EnglishName();
String[] names=name.split(",");
en.setFirstName(names[0]);
en.setLastName(names[1]);
return en;
}
@Override
public String convertToString(Map arg0, Object arg1) {
EnglishName en=(EnglishName)arg1;
return en.getFirstName()+","+en.getLastName();
}
}