我用struts做了一个多语种网站,我希望获取用户的来访路径,请问如何实现?下面是我的具体想法用户正在访问 http://www.xxx.com/cn/reg.jsp,在中文网页,现在用户突然想访问英文页面,于是点击页面的链接english,切换语言,我希望当用户点击english的时候,立即再次回到 http://www.xxx.com/cn/reg.jsp,但是已经改变了locale为英文的。要实现这样,我需要设计一个改变语言的changelanguageAction,在这个action中,要记录用户来访的页面 http://www.xxx.com/cn/reg.jsp,并更改locale,然后再转发到 http://www.xxx.com/cn/reg.jsp这个页面。请教用什么方法可以获取用户来访的页面路径 http://www.xxx.com/cn/reg.jsp?

解决方案 »

  1.   

    <%  
      String   path   =   request.getContextPath();  
      String   basePath   =   request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
      out.println(basePath);  
      %>   
      

  2.   

    既然是struts做的,为什么不用struts的国际化配置实现呢?
    而不是通过来访路径来实现,推荐使用struts2.0技术。
    国际化Hello World
    下面让我们看一个例子——HelloWorld。这个例子演示如何根据用户浏览器的设置输出相应的HelloWorld。在Eclipse创建工程配置开发和运行环境(如果对这个步骤有问题,可以参考我早前的文章《为Struts 2.0做好准备》)。 在src文件夹中加入struts.properties文件,内容如下: 
    struts.custom.i18n.resources=globalMessages
     Struts 2.0有两个配置文件,struts.xml和struts.properties都是放在WEB-INF/classes/下。 
    struts.xml用于应用程序相关的配置 
    struts.properties用于Struts 2.0的运行时(Runtime)的配置
     在src文件夹中加入globalMessages_en_US.properties文件,内容如下:
    HelloWorld=Hello World!
    在src文件夹中加入globalMessages_zh_CN.properties文件,内容如下:
    HelloWorld=你好,世界! 在此想和大家分享一个不错的编写properties文件的Eclipse插件(plugin),有了它我们在编辑一些简体中文、繁体中文等Unicode文本时,就不必再使用native2ascii编码了。您可以通过Eclipse中的软件升级(Software Update)安装此插件,步骤如下:1、展开Eclipse的Help菜单,将鼠标移到Software Update子项,在出现的子菜单中点击Find and Install;
    2、在Install/Update对话框中选择Search for new features to install,点击Next;
    3、在Install对话框中点击New Remote Site;
    4、在New Update Site对话框的Name填入“PropEdit”或其它任意非空字符串,在URL中填入http://propedit.sourceforge.jp/eclipse/updates/;
    5、在Site to include to search列表中,除上一步加入的site外的其它选项去掉,点击Finsih;
    6、在弹出的Updates对话框中的Select the features to install列表中将所有结尾为“3.1.x”的选项去掉(适用于Eclipse 3.2版本的朋友);
    7、点击Finish关闭对话框;
    8、在下载后,同意安装,再按提示重启Eclipse,在工具条看到形似vi的按钮表示安装成功,插件可用。此时,Eclpise中所有properties文件的文件名前有绿色的P的图标作为标识。  在WebContent文件夹下加入HelloWorl.jsp文件,内容如下:
    <%@ page  contentType="text/html; charset=UTF-8"%>
    <%@taglib prefix="s" uri="/struts-tags"%>
    <html>
    <head>
        <title>Hello World</title>
    </head>
    <body>
        <h2><s:text name="HelloWorld"/></h2>
        <h2><s:property value="%{getText('HelloWorld')}"/></h2>
    </body>
    </html>
    发布运行应用程序,在浏览器地址栏中输入http://localhost:8080/Struts2_i18n/HelloWorld.jsp ,出现图1所示页面。图1 中文输出 
    将浏览器的默认语言改为“英语(美国)”,刷新页面,出现图2所示页面。图2 英文输出 
    上面的例子的做法,与Struts 1.x的做法相似,似乎并不能体现Struts 2.0的优势。不过,我在上面的例子用了两种方法来显示国际化字符串,其输出是相同的。其实,这就是Struts 2.0的一个优势,因为它默认支持EL,所示我们可以用getText方法来简洁地取得国际化字符串。另外更普遍的情况——在使用UI表单标志时,getText可以用来设置label属性,例如:
    <s:textfield name="name" label="%{getText('UserName')}"/>
      

  3.   

    reg.jsp总要接收一个参数才知道显示中文或英文吧
      

  4.   

    http 協議的請求頭里面包含了你所需要的東西
    提取出來就OK 了
      

  5.   

    谢谢楼上各位!感谢goldlive_8888,这个正式我要的!reg.jsp总要接收一个参数才知道显示中文或英文吧 
    ++++++++++++++++++++
    是的,我在ChanglanguageAction里接收参数language,根据参数设定指定的locale,然后根据locale转换语言。
      

  6.   

    request对象的一些方法总结