使用jsp标签和java资源管理实现jsp支持多语言

  1.编写一个Serverlet并设置服务器启动是初始化该Servlet,并在初始化方法中实现对java的资源加载;

DispatcherServlet.java

 1 package mypack;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.util.Properties;
 6 
 7 import javax.servlet.RequestDispatcher;
 8 import javax.servlet.ServletConfig;
 9 import javax.servlet.ServletContext;
10 import javax.servlet.ServletException;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14 
15 public class DispatcherServlet extends HttpServlet{
16 
17     private String target="/hello.jsp";
18      public void init(ServletConfig config)
19         throws ServletException {
20          System.out.println("服务器启动时设置初始化servlet并且加载java资源");
21         super.init(config);
22         try {
23             Properties ps=new Properties();
24             Properties ps_ch=new Properties();
25             ServletContext cxt=config.getServletContext();
26             InputStream in=cxt.getResourceAsStream("/WEB-INF/messageresource.properties");
27             ps.load(in);
28               InputStream in_ch=cxt.getResourceAsStream("/WEB-INF/messageresource_ch.properties");
29               ps_ch.load(in_ch);
30               cxt.setAttribute("ps",ps);
31               cxt.setAttribute("ps_ch",ps_ch);
32         } catch (IOException e) {
33             // TODO Auto-generated catch block
34             e.printStackTrace();
35         }
36       }
37      
38     @Override
39     protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
40             throws ServletException, IOException {
41         // TODO Auto-generated method stub
42         super.doDelete(req, resp);
43     }
44 
45     @Override
46     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
47             throws ServletException, IOException {
48         // TODO Auto-generated method stub
49         super.doGet(req, resp);
50         this.doPost(req, resp);
51     }
52 
53     @Override
54     protected void doPost(HttpServletRequest request, HttpServletResponse resp)
55             throws ServletException, IOException {
56 
57         String username = request.getParameter("username");
58         // Get the password from the request
59         String password = request.getParameter("password");
60 
61         request.setAttribute("USER", username);
62         request.setAttribute("PASSWORD", password);
63         ServletContext context = getServletContext();
64 
65         System.out.println("Redirecting to " + target);
66         RequestDispatcher dispatcher =
67           context.getRequestDispatcher(target);
68         dispatcher.forward(request, resp);
69 //        return ;
70     }
71     public void destroy() {
72       }
73 
74 }
View Code

  2.资源的具体内容

messageresource.properties

1 hello.title = helloapp
2 hello.hello = Hello
3 login.title = helloapp
4 login.user = User Name
5 login.password = Password
6 login.submit =Submit
View Code

messageresource_ch.properties

1 hello.title = helloappµÄhelloÒ³Ãæ
2 hello.hello = ÄãºÃ
3 login.title = helloappµÄµÇ¼ҳÃæ
4 login.user = ̞
5 login.password = ¿ÚÁî
6 login.submit =\u00CC\u00E1\u00BD\u00BB
View Code

  3.主页为语言选择页面

index.html

 1 <html>
 2 <head>
 3 <title>helloapp</title>
 4 </head>
 5 <body >
 6 <p><font size="7">Welcome to HelloApp</font></p>
 7 <p><a href="login.jsp?language=English">English version </a>
 8 <p><a href="login.jsp?language=Chinese">Chinese version </a>
 9 </body>
10 </html>
View Code

  4.选择语言后跳转到jsp登录页面,并传递language参数,然后在jsp登录页面将传过来的language参数保存到httpSession中,页面body中的标签负责根据设置的参数

从java资源中选择打印对应的显示文字:

login.jsp

 1 <%@page contentType="text/html; charset=GB2312" %>
 2 <%@taglib uri="/WEB-INF/mytaglib.tld"  prefix="mm" %>
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4   <%  String language=request.getParameter("language");
 5              if(language==null)language="English";
 6        session.setAttribute("language",language);    
 7  %> 
 8 <html>
 9   <head>
10     <title><mm:message key="login.title"/> </title>
11  
12   </head>
13   
14   <body>
15 
16  <form action="dispatcher" method="post" name="logForm">
17  <center>
18  <table>
19  <tr><td><mm:message key="login.user"/>:</td><td><input type="text" name="username"/></td></tr>
20  <tr><td><mm:message key="login.password"/>:</td><td><input type="password" name="password"/></td></tr>
21  <tr><td><input type="submit" value="<mm:message key="login.submit"/>" name="submit"></td></tr>
22  </table>
23  </center>
24  </form>
25   </body>
26 </html>
View Code

  5.标签的处理类

MessageTag.java

 1 package mypack;
 2 
 3 import java.io.IOException;
 4 import java.io.UnsupportedEncodingException;
 5 import java.util.Properties;
 6 
 7 import javax.servlet.http.HttpSession;
 8 import javax.servlet.jsp.JspException;
 9 import javax.servlet.jsp.tagext.TagSupport;
10 
11 public class MessageTag extends TagSupport{
12 
13     private String key=null;
14 
15     public  MessageTag() {
16     }
17     @Override
18     public int doEndTag() throws JspException {
19         // TODO Auto-generated method stub
20         
21          Properties ps=(Properties)pageContext.getAttribute("ps",pageContext.APPLICATION_SCOPE);
22          Properties ps_ch=(Properties)pageContext.getAttribute("ps_ch",pageContext.APPLICATION_SCOPE);
23          HttpSession session=pageContext.getSession();
24          String language=(String)session.getAttribute("language");
25          String message=null;
26          try {
27             if(language!=null && language.equals("Chinese")){
28                message=(String)ps_ch.get(key);
29             message=new String(message.getBytes("ISO-8859-1"),"GB2312");
30              }else
31              message=(String)ps.get(key);
32              pageContext.getOut().print(message);
33              
34         } catch (UnsupportedEncodingException e) {
35             // TODO Auto-generated catch block
36             e.printStackTrace();
37         } catch (IOException e) {
38             // TODO Auto-generated catch block
39             e.printStackTrace();
40         }
41         return super.doEndTag();
42     }
43 
44     @Override
45     public void release() {
46         // TODO Auto-generated method stub
47         super.release();
48     }
49 
50     public String getKey() {
51         return key;
52     }
53 
54     public void setKey(String key) {
55         this.key = key;
56     }
57     
58     
59 }
View Code

  6.当login页面接受参数后跳转到处理组件DispatcherServlet.java,然后把参数放到request属性中再重定位到欢迎界面

hello.jap

 1 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
 2 <%@page contentType="text/html; charset=GB2312" %>
 3 <%@taglib uri="/WEB-INF/mytaglib.tld" prefix="mm" %>
 4 
 5 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 6 <html>
 7   <head>
 8     <title><mm:message key="hello.title"/></title>
 9   </head>
10   
11   <body>
12     <b><mm:message key="hello.hello"/>:<%=request.getAttribute("USER") %></b>
13   </body>
14 </html>
View Code

  7.自定义标签库的描述:

mytaglib.tld

 1 <?xml version="1.0" encoding="ISO-8859-1" ?>
 2 <!DOCTYPE taglib
 3         PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
 4     "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
 5 <taglib>
 6   <tlibversion>1.0</tlibversion>
 7   <jspversion>1.1</jspversion>
 8   <shortname>mytaglib</shortname>
 9   <uri>/mytaglib</uri>
10 
11   <tag>
12     <name>message</name>
13     <tagclass>mypack.MessageTag</tagclass>
14     <bodycontent>empty</bodycontent>
15    <info>produce message by key</info>
16     <attribute>
17     <name>key</name>
18     <required>true</required>    
19     </attribute>
20   </tag>
21 
22 
23 </taglib>
24     
View Code

  8.拦截器以及标签库都在web.xml中注册

web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3  <web-app>
 4  <servlet>
 5    <servlet-name>dispatcher</servlet-name>
 6    <servlet-class>mypack.DispatcherServlet</servlet-class>
 7     <load-on-startup>1</load-on-startup>
 8  </servlet>
 9  <servlet-mapping>
10    <servlet-name>dispatcher</servlet-name>
11    <url-pattern>/dispatcher</url-pattern>
12  </servlet-mapping>
13  <welcome-file-list>
14         <welcome-file>index.jsp</welcome-file>
15         <welcome-file>index.html</welcome-file>
16             <welcome-file>login.jsp</welcome-file>
17             <welcome-file>hello.jsp</welcome-file>
18  </welcome-file-list>
19  <resource-ref>
20           <description>DB Conection</description>
21           <res-ref-name>jdbc/test</res-ref-name>
22           <res-type>javax.sql.DataSource</res-type>
23           <res-auth>Container</res-auth>
24 </resource-ref>
25   
26  <taglib>
27     <taglib-uri>/mytaglib</taglib-uri>
28     <taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
29  </taglib>
30  
31 </web-app>
View Code

 

posted on 2013-09-23 19:59  a_badegg  阅读(2066)  评论(0编辑  收藏  举报

导航