Struts框架:RequestProcess类中的processLocale()体例原型如下:</p> 轨范代码:
6 X1 J, S: C3 L* R X1 e! N% C" g4 H. J: Y$ G7 |
6 K$ d- m& T9 {9 | D$ i3 N
% {1 @7 {5 ], T# F; Z- c; c
protected void processLocale(HttpServletRequest request, HttpServletResponse response) { // Are we configured to select the Locale automatically? if (!moduleConfig.getControllerConfig().getLocale()) { return; } // Has a Locale already been selected? HttpSession session = request.getSession(); if (session.getAttribute(Globals.LOCALE_KEY) != null) { return; } // Use the Locale returned by the servlet container (if any) Locale locale = request.getLocale(); if (locale != null) { if (log.isDebugEnabled()) { log.debug(" Setting user locale '" + locale + "'"); } session.setAttribute(Globals.LOCALE_KEY, locale); } }
3 V1 g& ?$ t5 G" ]0 @ 此类在struts- config.xml设置装备摆设文件中有对应的设置装备摆设项: < controller locale="true">< /controller> 其缺省状况locale属性的值为true,也就会挪用processLocale体例,并在第一次请求时建树session对象和生成 sessionId.但改为false后,在第一次请求达到ActionServlet后不会挪用processLocale体例,也就不会生成 session对象了。, ]. K1 d$ I- l
结不美观也就出来了,在struts应用中,*.do达到server端后经由 ActionServlet后转想我们自己写的IndexAction之前, < controller locale="true">< /controller>(缺省状况) 时,就已经发生了session对象和sessionId,这是struts框架类中生成的,即使我们在IndexAction中写上 HttpSession session = request.getSession();其也是RequestProcess类中的processLocale()体例生成的,此时其session 的isNew也仍是true,因为还没有返回客户端,其是新建树的,那么按照膳缦沔的流程,当在login.jsp上经由过程login.do进入 LoginAction后,其request.getCookies()固瘸景M有值了!而且其值是RequestProcess类中的 processLocale()体例发生session对象时生成的。) s* {! q @$ ]7 v5 L3 t8 X
如不美观我们在struts-config.xml中加上< controller locale="false">< /controller> 时,此时如不美观再按照膳缦沔的流程来跟踪轨范,并在LoginAction用request.getCookies()测试时,其值是为null的,当然在 IndexAction写上HttpSession session = request.getSession();时其是进入IndexAction时新建树的,isNew也是true. |