读书人

struts1事例

发布时间: 2012-08-07 14:54:49 作者: rapoo

struts1例子

最近一直再做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 stubif(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 stubif(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>
&nbsp&nbsp&nbsp<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\u529fuser.not.found=\u7528\u6237\u4e0d\u80fd\u627e\u5230\uff0c\u7528\u6237\u540d\u79f0=[{0}]user.password.error=\u5bc6\u7801\u9519\u8befuser.login.error=\u767b\u5f55\u5931\u8d25 MessageResource_en_us.properties文件:user.login.success={0},Login Successuser.not.found=User Not Found,UserName[{0}]user.password.error=Password Erroruser.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> 

?

读书人网 >开源软件

热点推荐