javaweb学习笔记(二十二):servlet监听器与国际化

 

目录

1.监听器

2.国际化

2.1 java.util.Locale类

2jstl标签库中的国际化与格式化标签


1.监听器

1)监听器: 是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。

servlet中,用于监听的事件源分别为 ServletContext, HttpSession 和 ServletRequest 这三个域对象。

2)监听器接口:

一、监听对象创建/销毁的监听器接口

Interface ServletRequestListener     监听request内置域对象的创建或销毁

当访问某个页面,触发一个request请求,执行requestInitialized方法; 当页面关闭时,执行requestDestroyed方法。

Interface HttpSessionListener        监听session内置域对象的创建或销毁

当打开一个新页面时,开启一个session会话,执行sessionCreated方法; 当session过期(默认30分钟)、容器关闭销毁,执行 sessionDestroyed方法

Interface ServletContextListener      监听application内置域对象的创建或销毁

当web容器开启时,执行contextInitialized方法;

当容器关闭或重启时,执行contextDestroyed方法。

二、监听对象属性的变化

Interface ServletRequestAttributeListener  监听request对象属性变化: 添加、移除、修改

Interface HttpSessionAttributeListener    监听session对象属性变化: 添加、移除、修改

Interface ServletContextAttributeListener  监听application对象属性变化添加、移除、修改

  • 监听HTTPSession状态的监听器接口

保存在 Session 域中的对象可以有多种状态:绑定到  Session 中;从 Session 域中解除绑定;随 Session 对象持久化到一个存储设备中(钝化);随 Session 对象从一个存储设备中恢复(活化)。

实现这两个接口的类不需要在web.xml 文件中进行注册

Interface HttpSessionBindingListener    监听对象绑定与解绑到session上的事件

Interface HttpSessionActivationListener  监听session钝化及活化的事件

3)监听器实现步骤:

  1. 写一个普通java类,实现相关接口;
  2. 配置(web.xml)

一个 web.xml 文件中可以配置多个 Servlet 事件监听器,web 服务器按照它们在 web.xml 文件中的注册顺序来加载和注册这些 Serlvet 事件监听器。

例1:

/**
 *  监听request对象的创建或销毁
 */
public class MyRequestListener implements ServletRequestListener{
	// 对象销毁
	@Override
	public void requestDestroyed(ServletRequestEvent sre) {
		// 获取request中存放的数据
		System.out.println("MyRequestListener.requestDestroyed()");
	}
	// 对象创建
	@Override
	public void requestInitialized(ServletRequestEvent sre) {
		System.out.println("MyRequestListener.requestInitialized()");
	}
}
<!-- 监听request对象创建、销毁 -->
	<listener>
		<listener-class>a_life.MyRequestListener</listener-class>
	</listener>

2:(因为监听的对象是自己创建的对象,不是服务器对象,所以不需要在web.xml中配置。)

/**
 * 监听此对象绑定到session上的过程,需要实现session特定接口
 */
public class Student implements HttpSessionBindingListener {
   //此处省略get/set方法
// 对象放入session
	@Override
	public void valueBound(HttpSessionBindingEvent event) {
		System.out.println("Student对象已经放入session");
	}
	// 对象从session中移除
	@Override
	public void valueUnbound(HttpSessionBindingEvent event) {
		System.out.println("Student对象从session中移除!");
	}
}

2.国际化

2.1 java.util.Locale类

Java提供了一个本地化的对象!封装当前语言、国家、环境等特征!


public class App {
	@Test
	//1. 本地化对象:Locale
	// 封装语言、国家信息的对象,有java.util提供
	public void testLocale() throws Exception {
		// 模拟中国语言等环境
		//Locale locale = Locale.CHINA;
		Locale locale = Locale.getDefault();			// 当前系统默认的语言环境
		System.out.println(locale.getCountry());   		// CN  国家的简称
		System.out.println(locale.getDisplayCountry()); // 国家名称
		System.out.println(locale.getLanguage());		// zh 语言简称
		// 模拟美国国家
		Locale l_us = Locale.US;
		System.out.println(l_us.getCountry());
		System.out.println(l_us.getDisplayCountry());
	}
}

1)静态数据国际化

网站中显示的固定文本的国际化: 如:“用户名”“密码“

 

国际化的软件:

  1. 存储所有国家显示的文本的字符串

命名:  基础名_语言简称_国家简称.properties

例如:msg_zh_CN.properties     存储所有中文

  msg_en_US.properties     存储所有英文

  1. 程序中获取

java.util.ResourceBundle类,可以读取国际化的资源文件!

2)动态文本国际化

数值,货币,时间,日期等数据由于可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。Java 中提供了解决这些问题的 API (位于 java.util 包和 java.text 包中)

 

2.2 jstl标签库中的国际化与格式化标签

参看:javaweb学习笔记(十三):JSP(3)     关于JSTL标签部分。

 

<fmt:setLocale value=""/>         设置本地化对象

<fmt:setBundle basename=""/>      设置工具类

<fmt:message></fmt:message>      显示国际化文本

<fmt:formatNumber pattern="#.##" value="100.99"></fmt:formatNumber> 格式化数值

<fmt:formatDate pattern="yyyy-MM-dd" value="${date}"/> 格式化

 

例2:jsp页面实现国际化

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

  <head>
    <title>Internationale  Test</title>
	
	<% ResourceBundle bundle=ResourceBundle.getBundle("i18n.msg",request.getLocale()); %>
  </head>
  
  <body>
    <form name="login" method="post">
  		<table align="center" border="1">
  			<tr>
  				<td><%= bundle.getString("username") %> </td>
  				<td>
  					<input type="text" name="userName">
  				</td>
  			</tr>
  			<tr>
  			<td><%=bundle.getString("pwd") %></td>
  			<td>
  				<input type="password" name="pwd">
  			</td>
  		</tr>
  		<tr>
  			<td>
  				<input type="submit" value="<%=bundle.getString("submit") %>">
  			</td>
  		</tr>
  		</table>
  </form>
  </body>
</html>

 例3:使用jstl标签库中的国际化与格式化标签实现国际化

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入jstl国际化与格式化标签库 --%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
  <head>
    <title>Internationale  Test</title>
	<!--
	<% ResourceBundle bundle=ResourceBundle.getBundle("i18n.msg",request.getLocale()); %>
	  -->
	  <!-- 一、设置本地化对象 -->
	  <fmt:setLocale value="${pageContext.request.locale }" />
	  <!-- 二、设置工具类 -->
	  <fmt:setBundle basename="i18n.msg" var="bundle" />
  </head>
  
  <body>
    <form name="login" method="post">
  		<table align="center" border="1">
  			<tr>
  				<td><fmt:message key="username" bundle="${bundle }"> </fmt:message></td>
  				<td>
  					<input type="text" name="userName">
  				</td>
  			</tr>
  			<tr>
  			<td><fmt:message key="pwd" bundle="${bundle }"></fmt:message></td>
  			<td>
  				<input type="password" name="pwd">
  			</td>
  		</tr>
  		<tr>
  			<td>
  				<input type="submit" value="<fmt:message key="submit" bundle="${bundle }"/>">
  			</td>
  		</tr>
  		</table>
  </form>
  </body>
</html>

浏览器演示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值