`
yanghaoli
  • 浏览: 289074 次
社区版块
存档分类
最新评论

struts标签+jstl标签之国际化实例

 
阅读更多

 Struts提供了国际化的功能,对于一个面向各国的系统来说,是非常有帮助的。只需要提供每个国家的语言资源包,配置后即可使用。

 

      下面来用一个登录实例来演示一下Struts的国际化配置和显示。

 

      创建一个login_i18n_exception的javaweb项目,引入Struts的所有jar包以及jstl.jar和standard.jar。登录界面无非就是输入用户名,密码,所以ActionForm中只需要设置2个属性即可。

 

  1. package com.bjpowernode.struts;  
  2.   
  3. import org.apache.struts.action.ActionForm;  
  4.   
  5. /** 
  6.  * 登录ActionForm,负责收集表单数据 
  7.  * 表单的数据必须和ActionForm的get,set一致 
  8.  * @author Longxuan 
  9.  * 
  10.  */  
  11. @SuppressWarnings("serial")  
  12. public class LoginActionForm extends ActionForm {  
  13.   
  14.     private String username;  
  15.       
  16.     private String password;  
  17.       
  18.     public String getUsername() {  
  19.         return username;  
  20.     }  
  21.     public void setUsername(String username) {  
  22.         this.username = username;  
  23.     }  
  24.     public String getPassword() {  
  25.         return password;  
  26.     }  
  27.     public void setPassword(String password) {  
  28.         this.password = password;  
  29.     }  
  30.       
  31. }  

 

      登录时会验证密码是否正确,需要提供异常处理,本实例显示2个异常:用户名未找到,密码错误。

 

  1. package com.bjpowernode.struts;  
  2. /** 
  3.  * 密码错误异常 
  4.  * @author Longxuan 
  5.  * 
  6.  */  
  7. @SuppressWarnings("serial")  
  8. public class PasswordErrorException extends RuntimeException {  
  9.   
  10.     public PasswordErrorException() {  
  11.         // TODO Auto-generated constructor stub  
  12.     }  
  13.   
  14.     public PasswordErrorException(String message) {  
  15.         super(message);  
  16.         // TODO Auto-generated constructor stub  
  17.     }  
  18.   
  19.     public PasswordErrorException(Throwable cause) {  
  20.         super(cause);  
  21.         // TODO Auto-generated constructor stub  
  22.     }  
  23.   
  24.     public PasswordErrorException(String message, Throwable cause) {  
  25.         super(message, cause);  
  26.         // TODO Auto-generated constructor stub  
  27.     }  
  28.   
  29.     public PasswordErrorException(String message, Throwable cause,  
  30.             boolean enableSuppression, boolean writableStackTrace) {  
  31.         super(message, cause, enableSuppression, writableStackTrace);  
  32.         // TODO Auto-generated constructor stub  
  33.     }  
  34.   
  35. }  
  36.   
  37.   
  38.   
  39. package com.bjpowernode.struts;  
  40. /** 
  41.  * 用户未找到异常 
  42.  * @author Longxuan 
  43.  * 
  44.  */  
  45. @SuppressWarnings("serial")  
  46. public class UserNotFoundException extends RuntimeException {  
  47.   
  48.     public UserNotFoundException() {  
  49.         // TODO Auto-generated constructor stub  
  50.     }  
  51.   
  52.     public UserNotFoundException(String message) {  
  53.         super(message);  
  54.         // TODO Auto-generated constructor stub  
  55.     }  
  56.   
  57.     public UserNotFoundException(Throwable cause) {  
  58.         super(cause);  
  59.         // TODO Auto-generated constructor stub  
  60.     }  
  61.   
  62.     public UserNotFoundException(String message, Throwable cause) {  
  63.         super(message, cause);  
  64.         // TODO Auto-generated constructor stub  
  65.     }  
  66.   
  67.     public UserNotFoundException(String message, Throwable cause,  
  68.             boolean enableSuppression, boolean writableStackTrace) {  
  69.         super(message, cause, enableSuppression, writableStackTrace);  
  70.         // TODO Auto-generated constructor stub  
  71.     }  
  72.   
  73. }  


      提供用户管理类,处理用户的相关操作,这里主要处理用户登录:

 

 

  1. package com.bjpowernode.struts;  
  2. /** 
  3.  * 用户管理类 
  4.  * @author Longxuan 
  5.  * 
  6.  */  
  7. public class UserManager {  
  8.       
  9.     /** 
  10.      * 简单处理登录逻辑 
  11.      * @param username  用户名 
  12.      * @param password  密码 
  13.      */  
  14.     public void login(String username,String password){  
  15.           
  16.         if(!"admin".equals(username)){  
  17.             throw new UserNotFoundException();  
  18.         }  
  19.         if(! "admin".equals(password)){  
  20.             throw new PasswordErrorException();  
  21.         }  
  22.     }  
  23. }  


      现在写LoginAction的处理:

 

 

  1. package com.bjpowernode.struts;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.apache.struts.action.Action;  
  7. import org.apache.struts.action.ActionForm;  
  8. import org.apache.struts.action.ActionForward;  
  9. import org.apache.struts.action.ActionMapping;  
  10. import org.apache.struts.action.ActionMessage;  
  11. import org.apache.struts.action.ActionMessages;  
  12.   
  13. /** 
  14.  * 登录Action 负责取得表单数据,调用业务逻辑,返回转向信息 
  15.  *  
  16.  * @author Longxuan 
  17.  *  
  18.  */  
  19. public class LoginAction extends Action {  
  20.   
  21.     @Override  
  22.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  23.             HttpServletRequest request, HttpServletResponse response)  
  24.             throws Exception {  
  25.         //获取数据  
  26.         LoginActionForm laf = (LoginActionForm) form;  
  27.         String username = laf.getUsername();  
  28.         String password = laf.getPassword();  
  29.   
  30.         UserManager userManager = new UserManager();  
  31.         ActionMessages messages = new ActionMessages();  
  32.           
  33.         try {  
  34.             //用户登录  
  35.             userManager.login(username, password);  
  36.               
  37.             //获取登录成功的国际化消息  
  38.             ActionMessage success= new ActionMessage("login.success",username);  
  39.             messages.add("login_success_1",success);  
  40.               
  41.             //传递消息  
  42.             this.saveMessages(request, messages);  
  43.               
  44.             return mapping.findForward("success");  
  45.               
  46.         } catch (UserNotFoundException e) {  
  47.               
  48.             e.printStackTrace();  
  49.               
  50.             //获取登录成功的国际化消息  
  51.             ActionMessage error = new ActionMessage("login.user.not.found",username);  
  52.             messages.add("login_error_1",error);  
  53.               
  54.             //传递消息  
  55.             this.saveErrors(request, messages);           
  56.               
  57.         } catch (PasswordErrorException e) {  
  58.               
  59.             e.printStackTrace();  
  60.               
  61.             //获取登录成功的国际化消息  
  62.             ActionMessage error = new ActionMessage("login.user.password.error");  
  63.             messages.add("login_error_2",error);  
  64.               
  65.             //传递消息  
  66.             this.saveErrors(request, messages);  
  67.               
  68.         }         
  69.         return mapping.findForward("error");  
  70.     }  
  71.   
  72. }  



      来一个手动切换语言的类,方便演示:

 

 

  1. package com.bjpowernode.struts;  
  2.   
  3. import java.util.Locale;  
  4.   
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7.   
  8. import org.apache.struts.action.Action;  
  9. import org.apache.struts.action.ActionForm;  
  10. import org.apache.struts.action.ActionForward;  
  11. import org.apache.struts.action.ActionMapping;  
  12.   
  13. /** 
  14.  * 完成语言的手动切换 
  15.  * @author Longxuan 
  16.  * 
  17.  */  
  18. public class ChangeLanguageAction extends Action {  
  19.   
  20.     @Override  
  21.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  22.             HttpServletRequest request, HttpServletResponse response)  
  23.             throws Exception {  
  24.           
  25.         //获取语言  
  26.         String lang = request.getParameter("lang");       
  27.         String[] split = lang.split("-");  
  28.           
  29.         //设置语言  
  30.         Locale locale = new Locale(split[0],split[1]);  
  31.         this.setLocale(request, locale);  
  32.   
  33.         return mapping.findForward("login");  
  34.     }     
  35. }  


      新建国际化信息文件:创建resource包,创建 英文语言包MessageBundle_en_US.properties,中文语言包MessageBundle_zh_CN.properties,默认语言包MessageBundle.properties 这3个语言包。具体内容如下:

 

英文语言包和默认语言包设置成一样的:

 

  1. # -- standard errors --  
  2. errors.header=<UL>  
  3. errors.prefix=<font color="red"><LI>  
  4. errors.suffix=</LI></font>  
  5. errors.footer=</UL>  
  6. login.form.field.username=User Name  
  7. login.form.field.password=Password  
  8. login.form.button.login=Login  
  9. login.success={0},Login Succedd!!  
  10. login.user.not.found=Use cant be found! Username=[{0}]  
  11. login.user.password.error=Password  Error!  

中文语言包:

  1. # -- standard errors --  
  2. errors.header=<UL>  
  3. errors.prefix=<font color="red"><LI>  
  4. errors.suffix=</LI></font>  
  5. errors.footer=</UL>  
  6. login.form.field.username=\u7528\u6237\u540D  
  7. login.form.field.password=\u5BC6\u7801  
  8. login.form.button.login=\u767B\u5F55  
  9. login.success={0}\uFF0C\u767B\u5F55\u6210\u529F\uFF01  
  10. login.user.not.found=\u7528\u6237\u672A\u627E\u5230\uFF0C\u7528\u6237\u540D\uFF1A\u3010{0}\u3011  
  11. login.user.password.error=\u5BC6\u7801\u9519\u8BEF  


      把login.jsp源码也贴出来:

 

 

  1. <%@ page language="java" contentType="text/html; charset=GB18030"  
  2.     pageEncoding="GB18030"%>  
  3. <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>  
  4. <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>  
  5. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>  
  6.   
  7. <!-- ${sessionScope['org.apache.struts.action.LOCALE']}可以获取到当前设置的语言 -->  
  8. <fmt:setLocale value="${sessionScope['org.apache.struts.action.LOCALE']}" />  
  9. <fmt:setBundle basename="resource.MessageBundle" />  
  10. <html>  
  11.     <head>  
  12.         <meta http-equiv="Content-Type" content="text/html; charset=GB18030">  
  13.         <title>Struts登录</title>  
  14.     </head>  
  15.     <body>  
  16.         <a href="changelang.do?lang=zh-cn">中文登录</a>|  
  17.         <%--<a href="changelang.do?lang=en-us">English Login</a><br>  
  18.     <html:link action="changelang.do?lang=zh-cn">中文登录</html:link>|--%>  
  19.         <html:link action="changelang.do?lang=en-us">English Login</html:link>  
  20.         <hr>  
  21.         <html:errors />  
  22.         <hr>  
  23.         <h3>  
  24.             struts标签读取国际化文件  
  25.         </h3>  
  26.   
  27.         <form action="login.do" method="post">  
  28.   
  29.             <bean:message key="login.form.field.username" />  
  30.             :  
  31.             <input type="text" name="username" />  
  32.             <br />  
  33.             <bean:message key="login.form.field.password" />  
  34.             :  
  35.             <input type="text" name="password" />  
  36.             <br />  
  37.             <input type="submit"  
  38.                 value="<bean:message key="login.form.button.login"/>/>  
  39.         </form>  
  40.         <hr>  
  41.         <h3>  
  42.             jstl读取国际化文件  
  43.         </h3>  
  44.         <form action="login.do" method="post">  
  45.             <fmt:message key="login.form.field.username" />  
  46.             :  
  47.             <input type="text" name="username" />  
  48.             <br />  
  49.             <fmt:message key="login.form.field.password" />  
  50.             :  
  51.             <input type="text" name="password" />  
  52.             <br />  
  53.             <input type="submit"  
  54.                 value="<fmt:message key="login.form.button.login"/>/>  
  55.         </form>  
  56.   
  57.     </body>  
  58. </html>  

login_success.jsp:

 

 

  1. <%@ page language="java" contentType="text/html; charset=GB18030"  
  2.     pageEncoding="GB18030"%>  
  3. <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>  
  4. <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  6. <html>  
  7. <head>  
  8. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">  
  9. <title>Insert title here</title>  
  10. </head>  
  11. <body>  
  12. <!-- message 属性设置为true,则读取message中的消息,false,则读取error中的消息。 saveMessages/saveErrors-->  
  13.     <html:messages id="msg" message="true">  
  14.         <bean:write name="msg"/>  
  15.     </html:messages>  
  16. </body>  
  17. </html>  


      最后的最后,在web.xml中配置一下struts:

 

 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4"   
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  7.   <welcome-file-list>  
  8.     <welcome-file>login.jsp</welcome-file>  
  9.   </welcome-file-list>  
  10.   <servlet>  
  11.     <servlet-name>action</servlet-name>  
  12.     <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  13.     <init-param>  
  14.       <param-name>config</param-name>  
  15.       <param-value>/WEB-INF/struts-config.xml</param-value>  
  16.     </init-param>  
  17.     <init-param>  
  18.       <param-name>debug</param-name>  
  19.       <param-value>2</param-value>  
  20.     </init-param>  
  21.     <init-param>  
  22.       <param-name>detail</param-name>  
  23.       <param-value>2</param-value>  
  24.     </init-param>  
  25.     <load-on-startup>2</load-on-startup>  
  26.   </servlet>  
  27.   
  28.   
  29.   <!-- Standard Action Servlet Mapping -->  
  30.   <servlet-mapping>  
  31.     <servlet-name>action</servlet-name>  
  32.     <url-pattern>*.do</url-pattern>  
  33.   </servlet-mapping>  
  34.   
  35.     
  36. </web-app>  


在Struts-config.xml中配置action,actionform等信息:

 

 

  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2.   
  3. <!DOCTYPE struts-config PUBLIC  
  4.           "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
  5.           "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  
  6.   
  7. <struts-config>  
  8.     <form-beans>  
  9.         <form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"></form-bean>  
  10.     </form-beans>  
  11.       
  12.     <action-mappings>  
  13.         <action path="/login"   
  14.                 type="com.bjpowernode.struts.LoginAction"  
  15.                 name="loginForm"  
  16.                 scope="request" >  
  17.             <forward name="success" path="/login_success.jsp"></forward>  
  18.             <!--<forward name="error" path="/login_error.jsp"></forward>-->  
  19.             <forward name="error" path="/login.jsp"></forward>  
  20.         </action>  
  21.         <action path="/changelang"  
  22.                 type="com.bjpowernode.struts.ChangeLanguageAction"  
  23.                 >  
  24.             <forward name="login" path="/login.jsp" redirect="true"></forward>  
  25.         </action>  
  26.     </action-mappings>  
  27.       
  28.       
  29.     <message-resources parameter="resource.MessageBundle"></message-resources>  
  30. </struts-config>  


      到此实例结束。点击这里查看效果。也可以下载源码。最后来2张效果图吧。

 

 

 

   

 

 

 

6
6
分享到:
评论

相关推荐

    JSP+Struts+JSTL+EL学习实例

    JSTL(JavaServer Pages Standard Tag Library)是Java官方提供的标准标签库,包含一系列用于处理常见Web任务的标签,如XML处理、数据库操作、国际化等。使用JSTL可以减少JSP页面中的脚本代码,使得页面更加整洁,...

    Maven下建立的spring+struts2+jstl实例

    本实例将探讨如何在Maven环境下搭建一个基于Spring、Struts2和JSTL的项目,这些技术的组合提供了强大的后端控制、依赖管理和前端展示能力。 首先,让我们详细了解每个组件的作用: 1. **Maven**:Maven是一个项目...

    运用JSP+Struts+JSTL技术的MVC架构项目实例源码.rar

    "运用JSP+Struts+JSTL技术的MVC架构项目实例源码.rar"是一个基于MVC架构的Web应用示例,它使用了Java Server Pages(JSP)、Struts框架和JavaServer Pages Standard Tag Library(JSTL)这三种关键技术。 首先,JSP...

    spring+struts+hibernate+dwr+jstl做的实例

    以用户管理为例,结合spring struts hibernate dwr jstl做的实例,struts hibernate dwr 与Spring完全结合,实现用户列表、信息增、删、改、查、维护时用户重名提示等功能,还包括页面自动转码设置(web.xml),...

    运用JSP+Struts+JSTL技术的MVC架构,数据库采用SQL Server留言本

    本项目“运用JSP+Struts+JSTL技术的MVC架构,数据库采用SQL Server留言本”就是一个典型的MVC应用实例,它结合了多种技术来创建一个基于Web的留言系统。 首先,JSP(JavaServer Pages)是Java平台上的动态网页技术...

    struts2+jdbc增删改查

    在描述中提到了`jstl`标签库,JSTL(JavaServer Pages Standard Tag Library)是一套用于JSP页面的标准标签库,包括核心标签、XML标签、JDBC标签等。其中,JDBC标签可以用来执行SQL查询,简化了在JSP页面中处理...

    Struts+jdbc+jsp实例,员工增删改查

    此外,JSP还可以通过脚本元素或JSTL(JavaServer Pages Standard Tag Library)标签来显示从数据库检索的数据,或者呈现用户操作的结果。 这个实例可能包含以下组件: 1. Employee实体类:代表员工对象,包含姓名、...

    struts1+hibernate分页

    在JSP页面上,使用JSTL或其他标签库遍历数据列表,并显示分页导航。导航通常包含“上一页”、“下一页”、页码链接等元素。 7. **处理分页请求** 当用户点击分页链接时,Action类需要捕获请求参数,如页码和每页...

    Struts2+hibernate+spring的常见面试题

    4. 标签支持:Struts1使用JSTL和自定义标签,而Struts2使用OGNL表达式语言和丰富的内置标签。 5. 验证:Struts1的验证通常是手动实现,而Struts2支持手动和验证框架的集成,提供更灵活的验证机制。 在Web项目开发...

    Struts2+spring+hibernate(登录与注册模块)

    综上所述,这个项目展示了如何使用Struts2、Spring和Hibernate集成开发Java Web应用,特别是登录注册功能,涵盖了前端验证、后端业务处理、数据库操作、安全性等多个方面,是学习和实践Java Web开发的一个良好实例。

    struts1.2+spring2.0+ibatis2.3简单新闻发布

    在与Struts结合时,Spring可以作为Action的工厂,实现Action的实例化和依赖注入。 **iBATIS2.3** 是一个数据访问框架,它允许开发者将SQL语句写在配置文件中,与Java代码分离。这既保留了SQL的灵活性,又避免了直接...

    一个简单的struts2+spring+hibernate实例

    在"struts2+spring+hibernate实例"中,这三者通常会按照以下方式集成: 1. **配置整合**:在Spring配置文件中,声明Struts2的Action Bean,并配置与Hibernate相关的数据源、SessionFactory等。Spring可以管理Struts...

    都市信息网(Struts2+sql server 2000)

    通过深入理解Struts2框架和SQL Server 2000数据库系统的特性及相互间的整合,开发者能够构建出功能强大、稳定可靠的城市信息网络平台,满足用户多样化的需求。同时,随着技术的演进,升级到更现代的数据库系统和框架...

    struts1国际化小实例

    下面将详细解释如何在Struts1中进行国际化实践,并结合给出的实例进行解析。 一、国际化(i18n)基础 国际化是指软件设计时考虑到不同地区的语言和文化差异,使得软件可以轻松地适应多种语言环境。在Web应用中,这...

    struts2标签详解与实例

    Struts2标签库是基于JSP标准标签库(JSTL)的扩展,它包含了一系列用于构建动态Web应用的标签。这些标签分为两类:核心标签和主题标签。核心标签主要处理表单、控制流程和显示数据,而主题标签则负责渲染视图,提供...

    struts1+jdbc

    8. **国际化与本地化**:Struts1支持多语言,可以在项目的资源文件(如messages.properties)中定义不同语言的文本,然后在JSP中使用fmt标签库进行国际化显示。 这个"struts1+jdbc"的示例项目可以帮助初学者理解...

    struts1+spring3+hibernate4整合 项目实例(包含所有jar包)

    4. **其他依赖库**:如jstl.jar、log4j.jar、commons-logging.jar等,用于JSP标签库、日志记录以及通用工具函数。 5. **项目源代码**:包括Action类、Model类、DAO类、Service类等,实现了业务逻辑和数据操作。 6. *...

    Struts2+Hibernate的Web开发小实例

    3. **JSP基础**:掌握JSP的基本语法,包括声明、脚本元素、JSP表达式、JSTL标签等,以及如何在JSP中嵌入Java代码和调用Struts2的动作。 4. **Ajax应用**:学习使用JavaScript的XMLHttpRequest对象或者jQuery的ajax...

    tag struts2的自定义标签实例

    在Struts2中,自定义标签基于JSP标准标签库(JSTL)的实现,通过Action类与标签库之间的交互来动态生成内容。 一、创建自定义标签库 1. 定义标签接口:在Struts2中,我们通常使用`...

    Struts 2 + Spring 2 + JPA + AJAX 示例

    通过 Spring 的 ContextLoaderListener 初始化 Spring 容器,并将 Struts 2 的 Action 实例交由 Spring 管理。 2. **JPA 配置**:设置 JPA 的实体类,定义数据模型,并配置 persistence.xml 文件来指定数据源、实体...

Global site tag (gtag.js) - Google Analytics