📄 setlocalefilter.java
字号:
package org.sunxin.lesson.jsp.ch21;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.util.ResourceBundle;
public class SetLocaleFilter implements Filter
{
private String resourceName = null;
public void init(FilterConfig filterConfig) throws ServletException
{
//获取过滤器的初始化参数,resourceName参数用于指定资源包系列的基名。
resourceName=filterConfig.getInitParameter("resourceName");
if(null==resourceName)
{
throw new UnavailableException("no define resource");
}
}
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest httpReq=(HttpServletRequest)request;
//得到Accept-Language请求报头
String clientLang=httpReq.getHeader("Accept-Language");
Locale locale=null;
ResourceBundle bundle=null;
//判断是否是中文用户
if(clientLang.indexOf("zh-cn")!=-1)
{
locale=new Locale("zh","CN");
bundle=ResourceBundle.getBundle(resourceName,locale);
response.setContentType("text/html;charset=GBK");
}
//在实际应用中,读者可以继续添加else if语句,判断其它的语言。
//如果没有匹配的资源,则使用英文资源。
else
{
locale=new Locale("en");
bundle=ResourceBundle.getBundle(resourceName,locale);
response.setContentType("text/html;charset=ISO-8859-1");
}
HttpSession session=httpReq.getSession();
//将资源包对象设置为Session对象的属性。
//在其它页面中,可以直接从Session对象中得到资源包。
session.setAttribute("resource",bundle);
chain.doFilter(request, response);
}
public void destroy()
{
resourceName=null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -