所以这是我的Servlet中的 doGet()方法:
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws ServletException, IOException {
httpServletResponse.setLocale(new Locale("tr", "TR"));
System.out.println("Cookies being printed:");
for(Cookie cookie:httpServletRequest.getCookies()){
System.out.println(cookie.getName());
System.out.println(cookie.getValue());
}
}
我第一次点击doGet方法:
Cookies being printed:
locale
en
我刷新页面再次调用它:
Cookies being printed:
JSESSIONID
A00EB65138C896FC282CE11EB20D1DD7
locale
en
似乎这条线没有效果:
httpServletResponse.setLocale(新的语言环境(“tr”,“TR”));
我做错了什么?为什么我要使用locale = en获取cookie?
这是一个非常简单的网络应用程序,我没有在应用程序的任何其他部分设置任何类型的cookie或任何东西。这已经是欢迎文件了。
答案 0 :(得分:2)
设置Cookie
并设置Locale
不一样
Cookie
与Locale
没有直接关系。
根据有关的文件 javax.servlet.ServletResponse.setLocale(java.util.Locale loc):
如果尚未提交响应,则会执行这些操作。
Cookie
在客户端浏览器环境中设置一些持久数据的位置。
要设置Cookie,我们首先创建一个cookie,将其添加到响应中,然后提交它。并且只能从同一客户端的 next 请求中读取相同内容。除非是哪一个,否则你无法读取只是响应的cookie。它在servlet已经收到的请求中不可用。
// to store cookie value in the format of
// language + "_" + country + "_"
// + (variant + "_#" | "#") + script + "-" + extensions
String cookieValue_fullLength = new Locale( "tr", "TR" ).toString();
Cookie localeCookie_fl = new Cookie( "locale_fl", cookieValue_fullLength );
response.addCookie( localeCookie_fl );
// to store cookie value in the format of "language"
String cookieValue_Language = new Locale( "tr", "TR" ).getLanguage();
Cookie localeCookie_lang = new Cookie( "locale", cookieValue_Language );
response.addCookie( localeCookie_lang );
如果存在与"locale"
同名的cookie,则会被覆盖
如果您实现此功能,则会覆盖设置为区域设置"en"
的当前Cookie。
收到新请求后,执行以下代码
for( Cookie cookie : httpServletRequest.getCookies() ) {
System.out.println( cookie.getName() + " - " + cookie.getValue() );
}
将在控制台上打印以下结果:
JSESSIONID - A00EB65138C896FC282CE11EB20D1DD7
locale - tr
locale_fl - tr_TR_TR_#u-nu-thai
locale_fl
的值仅作为示例显示。执行后检查正确的。