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 }
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
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
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>
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>
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 }
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>
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
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>