最近一直再做struts2的项目,一年前做的struts1林业项目但是现在有些忘记了,重新整理下。
配置一个struts1有以下几个步骤:
1.导入依赖库,也可以用Myeclipse自带的模式增加struts1 功能。
2.编写struts-config.xml
3.配置web.xml。
4.进行编码工做。
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<!-- 指明struts1 表单pojo 该pojo需要继承org.apache.struts.action.ActionForm-->
<form-beans >
<form-bean name="userLoginForm" type="com.yourcompany.struts.form.UserLoginForm" />
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="userLoginForm"
input="/userLogin.jsp"
name="userLoginForm"
path="/userLogin"
scope="request"
type="com.yourcompany.struts.action.UserLoginAction"
validate="true"
>
<forward name="failed" path="/userLogin.jsp" />
<forward name="success" path="/userLoginSuccess.jsp" />
</action>
<!--
<action>部分是说明action的属性。
Type 指定Action的类名,负责处理此次form表单请求的类
Name 指定Action主力的ActionForm名,与<form-beans >元素的name属性匹配。
Scope 指定ActionForm存在的范围, (request, application)
Input 指定包含客户提交表单的网页,如果ActionForm的Validate方法返回错误,则因该把用户
请求转发到这个网页。
Validate 如果取值为true,则表示ActionServlet应该调用ActionForm的validate方法
Forward 就是Action的execute方法执行完毕后,把客户请求在转发给相应的页面。
-->
</action-mappings>
<!--指定资源文件路径-->
<message-resources parameter="com.yourcompany.struts.ApplicationResources" />
</struts-config>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
action
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.yourcompany.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.yourcompany.struts.form.UserLoginForm;
/**
* MyEclipse Struts
* 徐士刚
*
* XDoclet definition:
* @struts.action path="/userLogin" name="userLoginForm" input="/userLogin.jsp" scope="request" validate="true"
* @struts.action-forward name="failed" path="/userLogin.jsp"
* @struts.action-forward name="success" path="/userLoginSuccess.jsp"
*/
public class UserLoginAction extends Action {
/*
* Generated Methods
*/
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserLoginForm userLoginForm = (UserLoginForm) form;// TODO Auto-generated method stub
if(userLoginForm.getUsername().equals("myeclipse") && userLoginForm.getPassword().equals("myeclipse"))
{
request.setAttribute("userName", userLoginForm.getUsername());
return mapping.findForward("success");
}
return mapping.findForward("failed");
}
}
form
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.yourcompany.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.yourcompany.struts.form.UserLoginForm;
/**
* MyEclipse Struts
* 徐士刚
*
* XDoclet definition:
* @struts.action path="/userLogin" name="userLoginForm" input="/userLogin.jsp" scope="request" validate="true"
* @struts.action-forward name="failed" path="/userLogin.jsp"
* @struts.action-forward name="success" path="/userLoginSuccess.jsp"
*/
public class UserLoginAction extends Action {
/*
* Generated Methods
*/
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserLoginForm userLoginForm = (UserLoginForm) form;// TODO Auto-generated method stub
if(userLoginForm.getUsername().equals("myeclipse") && userLoginForm.getPassword().equals("myeclipse"))
{
request.setAttribute("userName", userLoginForm.getUsername());
return mapping.findForward("success");
}
return mapping.findForward("failed");
}
}
以下是struts1的国际化详解与上面的例子不一致
步骤1:配置struts国际化
在struts-config.xml中配置message-resources标签
<message-resource parameter="MessageResource"/>
其中的参数是国际化配置文件MessageResource.properties的文件名。
步骤2:提供国际化配置文件
中文:MessageResource_zh_cn.properties
英文:MessageResource_en_us.properties
源文件:resource.properties表示中文信息
在源文件resource.properties中硬编码中文信息
user.title=用户登录
user.username=用户
user.password=密码
user.button.login=登录
然后用java中提供的工具把这些信息转换为unicode放到相应国际化文件中。
MessageResource_zh_cn.properties文件中
user.title=\u7528\u6237\u767b\u5f55
user.username=\u7528\u6237
user.password=\u5bc6\u7801
user.button.login=\u767b\u5f55
MessageResource_en_us.properties文件中
user.title=User Login
user.username=User Name
user.password=Password
user.button.login=Login
步骤3:在jsp页面上用struts标签<bean:message>来读取国际化消息文本
引入标签:
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%>
<form action="login.do" method="post">
<bean:message key="user.username"/>:<input type="text" name="username"><br>
<bean:message key="user.password"/>:<input type="password" name="password"><br>
<input type="submit" value="<bean:message key="user.button.login"/>">
</form>
bean:message中的属性key指的是国际化文件中的键。
一个local对应一个session
二,国际化的切换
jsp页面:
<a href="changelang.do?lang=zh">中文</a>
   <a href="changelang.do?lang=en">英文</a>
添加一个Action:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String lang = request.getParameter("lang");
//得到Locale
Locale currentLocale = Locale.getDefault();
if ("zh".equals(lang)) {
//自定义Locale
currentLocale = new Locale("zh", "CN");
}else if("en".equals(lang)) {
currentLocale = new Locale("en", "US");
}
//自己设置Locale
//request.getSession().setAttribute(Globals.LOCALE_KEY, currentLocale);
//调用struts中提供的方法设置Locale
this.setLocale(request, currentLocale);
return mapping.findForward("index");
}
配置国际化action:
<action path="/changelang"
type="com.bjsxt.struts.ChangeLanguageAction"
>
<forward name="index" path="/index.jsp"/>
</action>
<message-resources parameter="res.MessageResources" />
res.MessageResources表示的是res包下的MessageResources文件。
三,动态信息的国际化
如果是与后台交互的数据,那么在国际化文件中就用占位符进行配置
resource.properties源文件:
user.login.success={0},登录成功
user.not.found=用户不能找到,用户名称=[{0}]
user.password.error=密码错误
user.login.error=登录失败
MessageResource_zh_cn.properties文件:
user.login.success={0},\u767b\u5f55\u6210\u529f
user.not.found=\u7528\u6237\u4e0d\u80fd\u627e\u5230\uff0c\u7528\u6237\u540d\u79f0=[{0}]
user.password.error=\u5bc6\u7801\u9519\u8bef
user.login.error=\u767b\u5f55\u5931\u8d25
MessageResource_en_us.properties文件:
user.login.success={0},Login Success
user.not.found=User Not Found,UserName[{0}]
user.password.error=Password Error
user.login.error=Login Error
Action中的代码:
package com.bjsxt.struts;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
/**
* 用户登录的Action
* @author Administrator
*
*/
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LoginActionForm laf = (LoginActionForm)form;
String username = laf.getUsername();
String password = laf.getPassword();
ActionMessages messages = new ActionMessages();
try {
UserManager.getInstance().login(username, password);
//创建国际化消息文本
ActionMessage message = new ActionMessage("user.login.success", username);
//ActionMessage message = new ActionMessage("user.login.success", new Object[]{username});//其中Object数组表示的是占位符
messages.add("loginSuccess1", message);
ActionMessage message1 = new ActionMessage("user.login.success", username);
messages.add("loginSuccess2", message1);
//传递国际化消息文本
this.saveMessages(request, messages);
return mapping.findForward("success");
}catch(UserNotFoundException unfe) {
unfe.printStackTrace();
//创建国际化消息文本
ActionMessage message = new ActionMessage("user.not.found", username);
messages.add("error1", message);
//传递国际化消息文本
this.saveErrors(request, messages);
}catch(PasswordErrorException pee) {
pee.printStackTrace();
//创建国际化消息文本
ActionMessage message = new ActionMessage("user.password.error");
messages.add("error2", message);
//传递国际化消息文本
this.saveErrors(request, messages);
}
return mapping.findForward("error");
}
}
一个ActionMessage表示一条国际化信息。
Action配置:
<message-resources parameter="res.MessageResources" />
<script type="text/javascript"></script>