﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-BloveSaga-随笔分类-JavaServer Page</title><link>http://www.blogjava.net/blovesaga/category/11857.html</link><description>在希腊帕尔纳斯山南坡上,有一个驰名世界的戴尔波伊神托所,在它的入口处的巨石上赫然锈刻着这样几个大字: 认识你自己!</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 21:00:58 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 21:00:58 GMT</pubDate><ttl>60</ttl><item><title>国际化问题</title><link>http://www.blogjava.net/blovesaga/archive/2006/06/20/53972.html</link><dc:creator>blovesaga</dc:creator><author>blovesaga</author><pubDate>Tue, 20 Jun 2006 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/blovesaga/archive/2006/06/20/53972.html</guid><wfw:comment>http://www.blogjava.net/blovesaga/comments/53972.html</wfw:comment><comments>http://www.blogjava.net/blovesaga/archive/2006/06/20/53972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blovesaga/comments/commentRss/53972.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blovesaga/services/trackbacks/53972.html</trackback:ping><description><![CDATA[
		<p>要考虑一个真正意义的全球资源,Web浏览器的内容对每个接收到的用户来说都是易读的,现在大多数的全球资源的网站都是英文的.当然,现在也在发生变化,有的网站为一些特定的国家定制一些非英文版本,比如,说英文的通过<a href="http://www.ibm.com/en/index.html">http://www.ibm.com/en/index.html</a>来访问,说中文的通过<a href="http://www.imb.com/cn/index.html">http://www.imb.com/cn/index.html</a>来访问,这些很多都是静态的文本.怎么构件一个动态生成的国际化内容的网站就不是一个简单的问题了.<br /><br />国际化又称Il8N,因为英文国家的国家化是Internationalization,它以I开始,以N结束,共18个字母.本地化又称L18N,即是Localization.国际化的问题主要包含以下的一些内容:<br />.日期,时间<br />.数字<br />.货币<br />.其它的一些特殊字符<br />也就是说不同的Locale,显示日期,时间格式是不一样的.当然,不同的语言有自己不同的字符集.<br /><br />HTML中的字符实体<br />HTML中的字符实体和XML的语言保持一致.它定义了用特定的字符序列显示单字符的功能,这种字符序列称为字符实体,它以" &amp;"开头,以";"结束.例如: &amp;copy; 表示字符"©";<br />看一例子显示西班牙语的" Hello World":<br />&lt;<a href="mailto:%@page">%@page</a> contentType="text/html;charset=ISO-8859-1" %&gt;<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<br />   "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;</p>
		<p>&lt;%<br />   response.setHeader("Content-Language","es");<br />   out.println("&lt;html&gt;&lt;head&gt;&lt;title&gt;En Espa&amp;ntilde;ol&lt;/title&gt;&lt;/head&gt;");<br />   out.println("&lt;body&gt;");<br />   out.println("&lt;h3&gt;En espa%ntilde;ol&lt;/h3&gt;");<br />   out.println("&amp;iexcl;Hola Mundo!");<br />   out.println("&lt;/body&gt;&lt;/html&gt;");<br />%&gt;</p>
		<p>运行结果:<br /></p>
		<h3>En espa%ntilde;ol</h3>
		<p>¡Hola Mundo! <br /><br />在HTML字符实体表示中，&amp;ntilde代表了" ñ "字符，使用response.setHeader("Content-Language","es");来设置HTML显示时要使用的语言.<br /><br />Unicode<br />Unicode字符标准是一个字符编码系统,它支持互相转换,处理和显示现在世界上不同语言的文本.在Java语言中,字符,字符串和标始符在内部使用16位的Unicode 2.0字符集表示.Unicode使用 " \uxxxx" 来表示一个字符,前256个Unicode字符和ISO-8859-1标准(Latin-1)的前256个字符一致.在Unicode世界中, "  ñ  " 用 " \u00f1 " 表示.看怎么用Unicode来编写西班牙语的Hello World:<br />&lt;<a href="mailto:%@page">%@page</a> contentType="text/html;charset=ISO-8859-1" %&gt;<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<br />   "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;</p>
		<p>&lt;%<br />   response.setHeader("Content-Language","es");<br />   out.println("&lt;html&gt;&lt;head&gt;&lt;title&gt;En Espa\u00f1ol&lt;/title&gt;&lt;/head&gt;");<br />   out.println("&lt;body&gt;");<br />   out.println("&lt;h3&gt;En espa\u00f1ol&lt;/h3&gt;");<br />   out.println("\u00f1Hola Mundo!");<br />   out.println("&lt;/body&gt;&lt;/html&gt;");<br />%&gt;</p>
		<p>支持多国语言的Hello World<br /><br />用语选择语言的页面:<br /></p>
		<p>
		</p>
		<form action="mul_language_HelloWorld.jsp">
				<select name="language">
						<option value="1" selected="">English</option>
						<option value="2">Chinese</option>
						<option value="3">Korean</option>
						<option value="4">Russian</option>
						<option value="5">Spanish</option>
						<option value="6">Japanese</option>
				</select>
				<input type="submit" value="submit" />
		</form>
		<p>
				<br />语言处理页面代码:<br />&lt;<a href="mailto:%@page">%@page</a> contentType="text/plain;charset=UTF-8"<br />import="java.io.*,java.text.*,java.util.*,javax.servlet.jsp.*" %&gt;<br />&lt;html&gt;<br />    &lt;head&gt;<br />        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br />        &lt;title&gt;JSP Page&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;<br />&lt;%!<br />   Locale locale;<br />   DateFormat format;<br />   JspWriter writer;<br />%&gt;<br />&lt;%!<br />   //英语<br />void processEnglish()throws Exception<br />{<br />    locale=new Locale("en","US");<br />    format=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,locale);<br />    writer.println("in english");<br />    writer.println("&lt;br&gt;");<br />    writer.println("HelloWorld");<br />    writer.println(format.format(new Date()));<br />    writer.flush();<br />}</p>
		<p>   //中文<br />void processChinese()throws Exception<br />{<br />    locale=new Locale("zh","");<br />    format=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,locale);<br />    writer.println("in Chinese");<br />    writer.println("&lt;br&gt;");<br />    writer.println("\u4f60\u597d\u4e16\u754c");<br />    writer.println(format.format(new Date()));<br />    writer.flush();<br />}</p>
		<p>   //韩国语<br />void processKorean()throws Exception<br />{<br />    locale=new Locale("ko","");<br />    format=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,locale);<br />    writer.println("in Korean");<br />    writer.println("&lt;br&gt;");<br />    writer.println("\uc548\ud558\uc138\uacc4");<br />    writer.println(format.format(new Date()));<br />    writer.flush();<br />}<br />//.........................其他的语言省略<br />%&gt;<br />&lt;%<br />    //获得请求的语种<br />     String language=(String)request.getParameter("language");<br />     int lan=Integer.parseInt(language);   <br />%&gt;<br />&lt;%<br />   writer=out;<br />   switch(lan)<br />   {<br />       case 1:processEnglish();break;<br />       case 2:processChinese();break;<br />       case 3:processKorean();break;<br />       //case 4:processRussian();break;<br />       //case 5:processSpanish();break;<br />      // case 6:processJapanese();break;<br />   }<br />%&gt;<br />    &lt;/body&gt;<br />&lt;/html&gt;<br />处理的思路很简单,首先获得请求的语种,然后根据不同的语言来做不同的处理.<br /></p>
<img src ="http://www.blogjava.net/blovesaga/aggbug/53972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blovesaga/" target="_blank">blovesaga</a> 2006-06-20 14:00 <a href="http://www.blogjava.net/blovesaga/archive/2006/06/20/53972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP开发中常用的技巧</title><link>http://www.blogjava.net/blovesaga/archive/2006/06/20/53960.html</link><dc:creator>blovesaga</dc:creator><author>blovesaga</author><pubDate>Tue, 20 Jun 2006 05:05:00 GMT</pubDate><guid>http://www.blogjava.net/blovesaga/archive/2006/06/20/53960.html</guid><wfw:comment>http://www.blogjava.net/blovesaga/comments/53960.html</wfw:comment><comments>http://www.blogjava.net/blovesaga/archive/2006/06/20/53960.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blovesaga/comments/commentRss/53960.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blovesaga/services/trackbacks/53960.html</trackback:ping><description><![CDATA[
		<p>在JSP开发中我们常常会碰到以下的一些问题，其实都很有代表性.<br /><br /><font color="#0000ff">在不同的页面或者用户之间共享数据</font><br /><br />在JSP中共享数据,大体上可以分为两种情况,第一种是在同一个用户的不同也面之间共享数据,另一种是在不同用户之间共享数据.<br />对于同一个用户的会话,要想在不同的页面之间共享数据,可以有以下几种选择:<br />.把数据保存在Session中(最常见的方法)<br />.通过Cookie<br />.通过隐含表单提交到下一个页面<br />.通过ServletContext对象<br />.通过Application对象<br />.通过文件系统或者数据库<br />要在不同的用户之间共享数据,通常的方法是:<br />.通过ServletContext对象<br />.通过Application对象<br />.通过文件系统或者数据库<br />可见,对于不同用户之间共享数据的实现方法在同一个用户的不同也面之间也能实现数据共享.<br /><font color="#ffa500">a.在同一个用户的不同也面之间共享数据</font><br /><font color="#008000">1.使用session共享数据</font><br />用户在浏览网页时,由于HTTP协议是一种无状态协议,往往在不同的页面之间存在数据交换的问题,这就需要在这些不同的页面之间共享数据.在编程实现中我们常看到的方法是把共享数据保存在session中.这些共享数据可以是字符串或者与Java的原始数据类型相关的对象,也可以是一个Java对象.<br />exampl: 用户登录时,如果验证成功,就把信息保存到一个userSession的类中,在其他的页面可以读取这个值.<br />userSession.java<br />package dory;<br />import java.util.Date;<br />/**<br /> *<br /> * @author Dory Doo<br /> */<br />public class userSession {<br />    private boolean isLogin=false;<br />    private String userId;<br />    private Date lastLoginTime;<br />    private int logCount;<br />    /** Creates a new instance of userSession */<br />    public userSession() {<br />    }<br />    public void setIsLogin(boolean l)<br />    {<br />        this.isLogin=l;<br />    }<br />    public void setUserId(String userId)<br />    {<br />        this.userId=userId;<br />    }<br />    public void setLastLoginTime(Date l)<br />    {<br />        this.lastLoginTime=l;<br />    }<br />    public void setLogCount(int logCount)<br />    {<br />        this.logCount=logCount;<br />    }<br />    public boolean isLogin()<br />    {<br />        return this.isLogin;<br />    }<br />    public String getUserId()<br />    {<br />        return this.userId;<br />    }<br />    public Date getLastLoginTime()<br />    {<br />        return this.lastLoginTime;<br />    }<br />    public int getLogCount()<br />    {<br />        return this.logCount;<br />    }<br />}<br />当然这个就比较简单的了，要的是整个思路.我们怎么来使用这个类，我们需要一个验证登陆的页login.jsp<br />&lt;<a href="mailto:%@page">%@page</a> contentType="text/html;charset=gb2312" language="java"<br /> import="java.sql.*,dory.*" errorPage=""%&gt;<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<br />   "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;</p>
		<p>&lt;html&gt;<br />    &lt;head&gt;<br />        &lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />        &lt;title&gt;JSP Page&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;</p>
		<p>    &lt;h1&gt;Login Checking Page&lt;/h1&gt;<br />&lt;%<br />   String name=request.getParameter("name");<br />   String password=request.getParameter("password");<br />   //Connection the Database,loading<br />   //int logCount=resultSet.getInt("count");<br />   //java.util.Date lastLoginTime=resultSet.getDate("LastLoginTime");<br />   //这里简单设置logCount和lastLoginTime的值<br />   UserSession user=new UserSeesion();<br />   user.setUserId(name);<br />   user.setIsLogin(true);<br />   user.setLastLoginTime(new java.util.Date());<br />   user.setLogCount(10);<br />   session.setAttribute("userSession",user)<br />   response.sendRedirect("welcome.jsp");<br />%&gt;<br />    &lt;/body&gt;<br />&lt;/html&gt;<br />整个登陆页面的过程是这样的:<br />(1)获得用户的登陆信息<br />(2)连接数据库进行权限验证<br />(3)如果通过验证,那么读取用户的注册信息<br />(4)把用户的注册信息保存到一个userSession对象中<br />(5)把userSession对象保存到Session内建对象中<br />(6)把视图派发到下一个显示页面<br />注意:session.setAttribute("userSession",user)把userSession的一个对象设置到Session中,Session只能保存对象,不能保存原始的数据类型,比如:<br />session.setAttribute("count",10)<br />是非法的语句,如果要把值为10的整数保存到Session中,需要使用以下的方法:<br />session.setAttribute("count",new Integer(10));<br />然后在另一个页面使用<br />(Integer)session.getAttribute("count");<br />把这个整数读出来.<br />我们用如下方法在另一个页面中把userSesseion对象读取出来:<br />&lt;<a href="mailto:%@page">%@page</a> contentType="text/html;charset=gb2312" language="java"<br /> import="java.sql.*,dory.*" errorPage=""%&gt;<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<br />   "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;<br />&lt;html&gt;<br />    &lt;head&gt;<br />        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br />        &lt;title&gt;JSP Page&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;   <br />&lt;%<br />   UserSession user=(UserSession)session.getAttribute("userSession");<br />   try<br />   {<br />       if(user.isLogin())<br />       {<br />           out.print("welcome,your login id is:"+user.getUserId());<br />           out.print("your last login time is:"+user.getLastLoginTime());<br />           out.print("now you are the:"+user.getLogCount()+"times logging this website");<br />       }<br />       else<br />       {<br />           response.sendRedirect("login.html");<br />       }<br />   }<br />   catch(Exception e)<br />   {<br />       response.sendRedirect("login.html");<br />   }<br />%&gt;<br />    &lt;/body&gt;<br />&lt;/html&gt;<br />可以看出,通过UserSession user=(UserSession)session.getAttribute("userSession");代码来读取在前一个页面中设置的对象,然后再从这个对象读取一些相关值.当然我们也可以用JavaBean的形式来读取.<br /><br /><font color="#008000">2.使用隐含菜单</font><br />这种方式通过隐含菜单的形式把数据传递到下一个页面,它有两个局限性:<br />.只能在相邻的两个页面之间传递数据<br />.客户端可以使用查看网页源代码的方式获得表单中的数据,安全性不好<br />它的实现很简单:<br />&lt;form action="target.jsp"&gt;<br />&lt;input type="hidden" name="test" value="abc"&gt;<br />&lt;input type="hidden" name="test2" value="def"&gt;<br />&lt;/form&gt;<br />在另外一个页面中,通过这样来获得数据:<br />String test=request.getParameter("test");<br />String test2=request.getParameter("test2");<br /><br /><font color="#008000">3.使用Cookie</font><br />和Session不同,Cookie是放在客户端的,由于客户考虑到安全应素可能会禁用cookie,这样在使用cookie就会遇到麻烦了.<br /><br /><font color="#0000ff">b.在不同的用户之间共享数据</font><br />在不同的在不同的用户之间共享数据最常见的方法是使用ServletContext和application对象,通过在一个用户那里设置属性在另一个用户那里获得这个属性.<br /><br /><font color="#008000">1.使用ServletContext</font><br />在JSP页面中可以通过getServletContext()方法获得ServletContext对象.在这种情况下不同的用户通过它来工享数据,看下面的实现代码:<br />&lt;<a href="mailto:%@page">%@page</a> contentType="text/html;charset=gb2312" language="java"<br />import="java.sql.*,javax.servlet.*,javax.servlet.http.*,dory.*" errorPage="" %&gt;<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<br />   "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;<br />&lt;%<br />   request.setCharacterEncoding("gb2312");<br />%&gt;<br />&lt;html&gt;<br />    &lt;head&gt;<br />        &lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />        &lt;title&gt;JSP Page&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;<br />    a simple chatting room<br />    &lt;br&gt;&lt;hr&gt;&lt;font color="red"&gt;<br />&lt;%<br />   String content=(String)getServletContext().getAttribute(new String("chatTopic_1"));<br />   out.print(content);<br />   getServletContext().setAttribute("chatTopic_1",content+(String)request.getParameter("content")<br />   +"&lt;br&gt;");<br />%&gt;<br />    &lt;/font&gt;<br />    &lt;hr&gt;<br />    &lt;form accept="Servelt Context_chat.jsp"&gt;<br />        &lt;input type="text" name="content"&gt;<br />        &lt;input type="submit" value="speak"&gt;<br />    &lt;/form&gt;<br />    &lt;/body&gt;<br />&lt;/html&gt;<br /><br /><font color="#008000">2.application对象</font><br />application对象对应于每个web应用来说只有一个,它使用和ServletContext差不多.如下:<br />&lt;<a href="mailto:%@page">%@page</a> contentType="text/html;charset=gb2312" language="java"<br />import="java.sql.*,javax.servlet.*,javax.servlet.http.*,dory.*" errorPage="" %&gt;<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<br />   "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;<br />&lt;%<br />   request.setCharacterEncoding("gb2312");<br />%&gt;<br />&lt;html&gt;<br />    &lt;head&gt;<br />        &lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />        &lt;title&gt;JSP Page&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;<br />    a simple chatting room<br />    &lt;br&gt;&lt;hr&gt;&lt;font color="red"&gt;<br />&lt;%<br />   String content=(String)application.getAttribute(new String("chatTopic_1"));<br />   out.print(content);<br />   application.setAttribute("chatTopic_1",content+(String)request.getParameter("content")<br />   +"&lt;br&gt;");<br />%&gt;<br />    &lt;/font&gt;<br />    &lt;hr&gt;<br />    &lt;form accept="Servelt Context_chat.jsp"&gt;<br />        &lt;input type="text" name="content"&gt;<br />        &lt;input type="submit" value="speak"&gt;<br />    &lt;/form&gt;<br />    &lt;/body&gt;<br />&lt;/html&gt;<br />可以得到ServletContext和application的实现机制基本上一致.</p>
<img src ="http://www.blogjava.net/blovesaga/aggbug/53960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blovesaga/" target="_blank">blovesaga</a> 2006-06-20 13:05 <a href="http://www.blogjava.net/blovesaga/archive/2006/06/20/53960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>