Request.setCharacterEncoding question

2004-11-15 Thread Randy Eckhoff
With the 2.3 servet API, there is a new method:

request.setCharacterEncoding(String encoding)

This lets you tell the server a request's character encoding. It is
critical that setCharacterEncoding is called BEFORE any
request.getParameter is called (or getReader). Otherwise, you are at the
mercy of the appserver for what you get back on the getParameter call.
For example, if setCharacterEncoding is not called, you could get a null
value back on getParameter(foo). 

When you post directly to a jsp (MVC 1), the entry point for servicing
the page is ultimately the page itself. So JspCompilers have
request.setCharacterEncoding(whatever); in the generated java code as
one of the first things that get done.

But with Struts, the entry point is not the JSP but rather the action.
You eventually forward to the view but by that point, you've already
processed the request.

So my question is this: For struts actions and forms and anything else
struts, is there 1 common place where we can override something to call
request.setCharacterEncoding(). Is RequestProcessor.processPreprocess
the place to do it? I grepped the struts 1.2.4 source code and only
found a setCharacterEncoding on upload\MultipartRequestWrapper.java.
That method is a no-op. Ideally, we only want to override 1 method that
will handle the request's encoding for form validation and the action
handlers, etc. If processPreprocess is NOT the place to do this,
where/how should we do this? The ActionServlet instance perhaps that
calls RequestProcessor.process()? The action handler knows what encoding
to use so somehow, I would have to tell the request processor the
encoding unless I can override something in the ActionServlet before
process() gets called.

I did *some* searching through the struts source code and in
RequestProcessor, the call to processPopulate does a getParameter:
if ((request.getParameter(Constants.CANCEL_PROPERTY) != null) ||
(request.getParameter(Constants.CANCEL_PROPERTY_X) != null))
{

So calling setCharacterEncoding has to be done before processPopulate().

Thanks!

Randy

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Request.setCharacterEncoding question

2004-11-15 Thread Kris Schneider
If you've got a copy of Tomcat installed, look at:

$CATALINA_HOME/webapps/servlets-examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java

Quoting Randy Eckhoff [EMAIL PROTECTED]:

 With the 2.3 servet API, there is a new method:
 
   request.setCharacterEncoding(String encoding)
 
 This lets you tell the server a request's character encoding. It is
 critical that setCharacterEncoding is called BEFORE any
 request.getParameter is called (or getReader). Otherwise, you are at the
 mercy of the appserver for what you get back on the getParameter call.
 For example, if setCharacterEncoding is not called, you could get a null
 value back on getParameter(foo). 
 
 When you post directly to a jsp (MVC 1), the entry point for servicing
 the page is ultimately the page itself. So JspCompilers have
 request.setCharacterEncoding(whatever); in the generated java code as
 one of the first things that get done.
 
 But with Struts, the entry point is not the JSP but rather the action.
 You eventually forward to the view but by that point, you've already
 processed the request.
 
 So my question is this: For struts actions and forms and anything else
 struts, is there 1 common place where we can override something to call
 request.setCharacterEncoding(). Is RequestProcessor.processPreprocess
 the place to do it? I grepped the struts 1.2.4 source code and only
 found a setCharacterEncoding on upload\MultipartRequestWrapper.java.
 That method is a no-op. Ideally, we only want to override 1 method that
 will handle the request's encoding for form validation and the action
 handlers, etc. If processPreprocess is NOT the place to do this,
 where/how should we do this? The ActionServlet instance perhaps that
 calls RequestProcessor.process()? The action handler knows what encoding
 to use so somehow, I would have to tell the request processor the
 encoding unless I can override something in the ActionServlet before
 process() gets called.
 
 I did *some* searching through the struts source code and in
 RequestProcessor, the call to processPopulate does a getParameter:
 if ((request.getParameter(Constants.CANCEL_PROPERTY) != null) ||
 (request.getParameter(Constants.CANCEL_PROPERTY_X) != null))
 {
 
 So calling setCharacterEncoding has to be done before processPopulate().
 
 Thanks!
 
 Randy

-- 
Kris Schneider mailto:[EMAIL PROTECTED]
D.O.Tech   http://www.dotech.com/

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



RE: Request.setCharacterEncoding question

2004-11-15 Thread Randy Eckhoff
I was hoping to avoid filters for a bunch of reasons (not going to get
into them here).

Does anyone if the below technique of subclassing RequestProcessor is
the right way to go in struts? Or can I do something in the action
handler before RequestProcessor is called?

Randy

-Original Message-
From: Kris Schneider [mailto:[EMAIL PROTECTED] 
Sent: Monday, November 15, 2004 9:57 AM
To: Struts Users Mailing List
Subject: Re: Request.setCharacterEncoding question


If you've got a copy of Tomcat installed, look at:

$CATALINA_HOME/webapps/servlets-examples/WEB-INF/classes/filters/SetChar
acterEncodingFilter.java

Quoting Randy Eckhoff [EMAIL PROTECTED]:

 With the 2.3 servet API, there is a new method:
 
   request.setCharacterEncoding(String encoding)
 
 This lets you tell the server a request's character encoding. It is 
 critical that setCharacterEncoding is called BEFORE any 
 request.getParameter is called (or getReader). Otherwise, you are at 
 the mercy of the appserver for what you get back on the getParameter 
 call. For example, if setCharacterEncoding is not called, you could 
 get a null value back on getParameter(foo).
 
 When you post directly to a jsp (MVC 1), the entry point for 
 servicing the page is ultimately the page itself. So JspCompilers have

 request.setCharacterEncoding(whatever); in the generated java code 
 as one of the first things that get done.
 
 But with Struts, the entry point is not the JSP but rather the action.

 You eventually forward to the view but by that point, you've already 
 processed the request.
 
 So my question is this: For struts actions and forms and anything else

 struts, is there 1 common place where we can override something to 
 call request.setCharacterEncoding(). Is 
 RequestProcessor.processPreprocess
 the place to do it? I grepped the struts 1.2.4 source code and only
 found a setCharacterEncoding on upload\MultipartRequestWrapper.java.
 That method is a no-op. Ideally, we only want to override 1 method
that
 will handle the request's encoding for form validation and the action
 handlers, etc. If processPreprocess is NOT the place to do this,
 where/how should we do this? The ActionServlet instance perhaps that
 calls RequestProcessor.process()? The action handler knows what
encoding
 to use so somehow, I would have to tell the request processor the
 encoding unless I can override something in the ActionServlet before
 process() gets called.
 
 I did *some* searching through the struts source code and in 
 RequestProcessor, the call to processPopulate does a getParameter:
 if ((request.getParameter(Constants.CANCEL_PROPERTY) != null)
||
 (request.getParameter(Constants.CANCEL_PROPERTY_X) != 
 null)) {
 
 So calling setCharacterEncoding has to be done before 
 processPopulate().
 
 Thanks!
 
 Randy

-- 
Kris Schneider mailto:[EMAIL PROTECTED]
D.O.Tech   http://www.dotech.com/

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Request.setCharacterEncoding question

2004-11-15 Thread Craig McClanahan
If you're going to do this inside Struts, then processPreprocess(), in
a subclass of RequestProcessor, does indeed seem like a reasonable
place to do so.

Craig


On Mon, 15 Nov 2004 11:43:34 -0800, Randy Eckhoff [EMAIL PROTECTED] wrote:
 I was hoping to avoid filters for a bunch of reasons (not going to get
 into them here).
 
 Does anyone if the below technique of subclassing RequestProcessor is
 the right way to go in struts? Or can I do something in the action
 handler before RequestProcessor is called?
 
 Randy
 
 
 
 -Original Message-
 From: Kris Schneider [mailto:[EMAIL PROTECTED]
 Sent: Monday, November 15, 2004 9:57 AM
 To: Struts Users Mailing List
 Subject: Re: Request.setCharacterEncoding question
 
 If you've got a copy of Tomcat installed, look at:
 
 $CATALINA_HOME/webapps/servlets-examples/WEB-INF/classes/filters/SetChar
 acterEncodingFilter.java
 
 Quoting Randy Eckhoff [EMAIL PROTECTED]:
 
  With the 2.3 servet API, there is a new method:
 
request.setCharacterEncoding(String encoding)
 
  This lets you tell the server a request's character encoding. It is
  critical that setCharacterEncoding is called BEFORE any
  request.getParameter is called (or getReader). Otherwise, you are at
  the mercy of the appserver for what you get back on the getParameter
  call. For example, if setCharacterEncoding is not called, you could
  get a null value back on getParameter(foo).
 
  When you post directly to a jsp (MVC 1), the entry point for
  servicing the page is ultimately the page itself. So JspCompilers have
 
  request.setCharacterEncoding(whatever); in the generated java code
  as one of the first things that get done.
 
  But with Struts, the entry point is not the JSP but rather the action.
 
  You eventually forward to the view but by that point, you've already
  processed the request.
 
  So my question is this: For struts actions and forms and anything else
 
  struts, is there 1 common place where we can override something to
  call request.setCharacterEncoding(). Is
  RequestProcessor.processPreprocess
  the place to do it? I grepped the struts 1.2.4 source code and only
  found a setCharacterEncoding on upload\MultipartRequestWrapper.java.
  That method is a no-op. Ideally, we only want to override 1 method
 that
  will handle the request's encoding for form validation and the action
  handlers, etc. If processPreprocess is NOT the place to do this,
  where/how should we do this? The ActionServlet instance perhaps that
  calls RequestProcessor.process()? The action handler knows what
 encoding
  to use so somehow, I would have to tell the request processor the
  encoding unless I can override something in the ActionServlet before
  process() gets called.
 
  I did *some* searching through the struts source code and in
  RequestProcessor, the call to processPopulate does a getParameter:
  if ((request.getParameter(Constants.CANCEL_PROPERTY) != null)
 ||
  (request.getParameter(Constants.CANCEL_PROPERTY_X) !=
  null)) {
 
  So calling setCharacterEncoding has to be done before
  processPopulate().
 
  Thanks!
 
  Randy
 
 --
 Kris Schneider mailto:[EMAIL PROTECTED]
 D.O.Tech   http://www.dotech.com/
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]