1、国际化:
国际化:在客户端浏览器中可以设置页面语言
将页面中的中文(或其他语言)转变为英文(或其他语言)
做法思路:将需要替代的字符串用变量表示
原网页:
国际化后
步骤:
1)写两个配置文件。一个存放中文信息,一个存放英文信息
要求:
资源文件名称的格式:基本名称+Locale部份+.properties
例如:res_zh_CN.properties,其中基本名称为res,而zh_CN是Locale部份
必须所有的资源文件基石名称要相同!不同之处就是Locale部件
//2)使用类识别语言信息
/**
* 我们使用一个类,来通过语言环境,最终识别加载哪一个文件的信息:ResourceBundle
* 什么语言环境:Locale
* > zh_CN
* > en_US
* new Locale("zh", "CN");
* Locale.getDefault();
* Locale.US
*/
public class Demo1 {
@Test
public void fun1() {
//得到要设置的语言环境
Locale locale = Locale.US;
// 得到ResourceBundle
// 第一个参数是:基本名称
// 第二个参数是:Locale
ResourceBundle rb = ResourceBundle.getBundle("res", locale);
// 使用ResourceBundle来获取资源信息
System.out.println(rb.getString("username"));
System.out.println(rb.getString("password"));
System.out.println(rb.getString("login"));
}
}
3)在jsp页面中将所有可替换的文字用变量表示
<%--
把与语言相关的所有字符串都写成变量!!!
--%>
<body>
<%
/*
1. 获取Locale,这是由客户端的浏览器提供的Locale
2. 创建ResourceBundle
3. 把所有的语言信息使用rb.getString("xxx")来替换!
*/
Locale locale = request.getLocale();
ResourceBundle rb = ResourceBundle.getBundle("res", locale);
%>
<h1><%=rb.getString("login") %></h1>
<form action="" method="post">
<%=rb.getString("username") %>:<input type="text" name="username"/><br/>
<%=rb.getString("password") %>:<input type="password" name="password"/><br/>
<input type="submit" value="<%=rb.getString("login") %>"/>
</form>
</body>
2、ServletContext 与application的异同 (转载)
相同:其实servletContext和application 是一样的,就相当于一个类创建了两个不同名称的变量。
在 servlet中ServletContext就是application对象。
大家只要打开jsp编译过后生成的Servlet中的_jspService()方法就可以看到如下的声明:
ServletContextapplication = null;
application= pageContext.getServletContext();
不同:两者的区别就是application用在jsp中,servletContext用在servlet中。
application和page、request、session 都是JSP中的内置对象。
在后台用ServletContext存储的属性数据可以用 application对象获得。
而且application的作用域是整个Tomcat启动的过程。
例如:ServletContext.setAttribute("username",username);
则在JSP网页中可以使用 application.getAttribute("username");
来得到这个用户名。
3、ServletRequest类型转换原因
二者关系:
ServletRequest是HttpServletRequest的父接口。
request是HttpServletRequest的实现类的对象。
ServletRequest request(父类):
将子类对象赋给父类引用,他运行时的类型是子类,编译时的类型是父类,
背景:在运行时,父类类型对象调用的方法如果子类里面有,那就执行子类里面的方法。
如果编译时的类型也就是父类没有调用的那个方法,则报错。
所以需要做强制类型转换,否则就会报错。
原因:它原本就是一个HttpServletRequest类型。
而它的编译类型用ServletRequest来表示,
当要用到HttpServletRequest类中的方法时,自然需要把它强转回来。