struts2中的国家化就是i18n
是软件具备切换界面语言的功能
极大的简化国际化功能的实现
具体步骤:
1 在struts.xml中加入<constant name="struts.custom.i18n.resources" value="message">
2 在与struts.xml文件同目录下创建一下两个文件:message_en_US.properties和message_zh_CN.properties
3 在jsp中使用struts的标签完成界面所用内容
具体示例:
aciton.ChangeLanguage.java
<span style="font-size:18px;">package action;
import com.opensymphony.xwork2.ActionSupport;
public class ChangeLanguage extends ActionSupport {
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
}
</span>
<span style="font-size:18px;">login.username=username
login.password=password
login.title=titleinterface
login.submit=submit
login.id=id
</span>
<span style="font-size:18px;">login.username=\u7528\u6237\u540D
login.password=\u5BC6\u7801
login.title=\u7528\u6237\u754C\u9762
login.submit=\u63D0\u4EA4
login.id=\u7528\u6237id
</span>
<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="message"></constant>
<package name="action" extends="struts-default">
<action name="changeLanguage" class="action.ChangeLanguage">
<result name="SUCCESS">/index.jsp</result>
</action>
</package>
</struts>
</span>
index.jsp
<span style="font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
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%>">
</head>
<body>
<s:text name="login.title"/>
<s:form method="post" action="changeLanguage">
<s:textfield name="id" key="login.id"/>
<s:textfield name="username" key="login.username"/>
<s:password name="password" key="login.password"/>
<s:submit key="login.submit"/>
</s:form>
<a href="changeLanguage.action?request_local=zh_CN">中文</a>
<a href="changeLanguage.cation?request_local=en_US">English</a>
</body>
</html>
</span>
令牌机制的背景和意义
解决重复提交表单的问题
令牌验证的步骤:
1 jsp页面加入标签支持<%@ taglib prefix="s" uri="/struts-tags"%>
2 在表单中加入<s:token />
3 struts.xml中在需要验证重复提交的action中加入验证拦截器
<interceptor-ref name="token" />
<result name="invalid.token">/error.jsp</result>
action.TokenAction.java
<span style="font-size:18px;">package action;
import com.opensymphony.xwork2.ActionSupport;
public class TokenAction extends ActionSupport {
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return "success";
}
}
</span>
<span style="font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
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%>">
</head>
<body>
<s:form method="post" action="tokenAction">
<s:textfield name="username" key="login.username"/>
<s:password name="password" key="login.password"/>
<s:token></s:token>
<s:submit value="%{getText('login.submit')}"/>
</s:form>
</body>
</html>
</span>
struts.xml
<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="message"></constant>
<package name="action" extends="struts-default">
<action name="tokenAction" class="action.TokenAction">
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">/index.jsp</result>
<result name="invalid-token">/error.jsp</result>
</action></span>
<span style="font-size:18px;">
</package>
</struts>
</span>