Hi Mark,

Thanks again for you help.
In order to help you help me (-' , I will give more details on my goal
and my problem:
I want to build a servlet which let application clients ( not HUMAN.a
client application, thus HTML forms will do no use here)
Send HTTP requests to the servlet, which queries a DB (Oracle), and then
the servlet sends back a response to the client application 
The requests must support windows-1255 charset encoding (Windows Hebrew)

At first I decided to receive the request parameters , using GET request
, and I attached previously the code, which works fine , and I could
even for debug purpose send the request in the url of IE browser (though
the client application wouldn't use a browser ,but call GET request with
the parameters desired, using windows-1255 charset encoding)

After reading your response and other forums response, which agreed that
sending a non English characters in GET request is a bad idea,
I decided to implement it with POST. So now I have two problems 
1. writing the servlet.
2. writing a client that will send requests using POST.

Here is a sample servlet and client. It should have worked but it don't
(-: , I figure it is a small thing, but did not found it till far.


THIS IS THE SERVER'S CODE:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
public class Hebrew3test extends HttpServlet {
        public void doPost(HttpServletRequest request,
HttpServletResponse response)
                throws ServletException, IOException {
                request.setCharacterEncoding("cp1255");
                response.setCharacterEncoding("cp1255");
                response.setContentType("Text/html; cp1255");
        
                PrintWriter out = response.getWriter();
                String name = request.getParameter("name");
                out.println(name);
        }
        public void doGet(HttpServletRequest request,
HttpServletResponse response)
                throws ServletException, IOException {
                        doPost(request, response);
        }
}

THIS IS THE CLIENT'S CODE:
import java.io.*;
import java.net.*;
public class HttpClient_cp1255_2 {
      try {     
                String host = "127.0.0.1"; //tomcat5 host - local
machine
                port = "8083" //tomcat5 port
                String data = "name=" +
URLEncoder.encode("\u05d9\u05d0\u05d9\u05e8", "cp1255"); // the unicode
for "Yair" in hebrew.
                URL test = new
URL("http://"+host+":"+port+"/userprofile/hebrew3test";);
                URLConnection req = test.openConnection();
                req.setDoOutput(true);
                req.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded; charset=windows-1255");
                req.setRequestProperty("Content-Length",
Integer.toString(data.length()));
                OutputStream out = req.getOutputStream();
                out.write(data.getBytes("Cp1255"));   // writing the
request in Cp1255 encoding.
                out.close();
        
                InputStream in = req.getInputStream();
                BufferedReader br = new BufferedReader(new
InputStreamReader(in,"cp1255")); // reading the response in Cp1255
encoding.
                String line;
                File f = new File("in.txt");    // instead of getting my
name in hebrew . I get "????" four times 0xF9 in the text file in.txt
                FileWriter fw = new FileWriter(f);
                while ((line = br.readLine()) != null) {
                        System.out.println(line);
                        fw.write(line);
                }
                fw.close();                                     
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}


BTW, 
One more thing , I modified /conf/server.xml and added attribute
URIEncoding="cp1255" useBodyEncodingForURI="true"

It still don't work
Yair 

-----Original Message-----
From: Mark Thomas [mailto:[EMAIL PROTECTED] 
Sent: ג 20 אפריל 2004 23:29
To: 'Tomcat Users List'
Subject: RE: Getting a request in a non English character 


http://jakarta.apache.org/tomcat/tomcat-5.0-doc/config/http.html

Tomcat 4 ships with the same connector but the docs aren't quite up to
date on the web site.

Mark

> -----Original Message-----
> From: Yair Fine [mailto:[EMAIL PROTECTED]
> Sent: Monday, April 19, 2004 10:48 PM
> To: 'Tomcat Users List'
> Subject: RE: Getting a request in a non English character
> 
> Hi Mark,
> Thanks for your reply ,
> You wrote :
> "The Coyote HTTP/1.1 connector has a useBodyEncodingForURI attribute 
> which if set to true will use the request body encoding to decode"
> 
> Where can I configure the useBodyEncodingForURI attribute, is it in an
> XML file ? Which one ? Thanks
> Yair
> 
> 
> 
> 
> 
> -----Original Message-----
> From: Mark Thomas [mailto:[EMAIL PROTECTED]
> Sent: ג 20 אפריל 2004 21:19
> To: 'Tomcat Users List'
> Subject: RE: Getting a request in a non English character
> 
> 
> You might find the text below useful. It is my standard text on
> character encoding.
> 
> Mark
> 
> REQUESTS
> ========
> 
> There are a number of situations where there may be a requirement to 
> use non-US ASCII characters in a URI. These include:
> - Parameters in the query string
> - Servlet paths
> 
> There is a standard for encoding URIs
> (http://www.w3.org/International/O-URL-code.html) but this standard is
> not consistently followed by clients. This causes a number of 
> problems.
> 
> The functionality provided by Tomcat (4 and 5) to handle this less 
> than ideal situation is described below.
> 
> 1. The Coyote HTTP/1.1 connector has a useBodyEncodingForURI attribute
> which if set to true will use the request body encoding to decode the 
> URI query parameters.
>   - The default value is true for TC4 (breaks spec but gives
> consistent
> behaviour across TC4 versions)
>   - The default value is false for TC5 (spec compliant but 
> there may be
> migration issues for some apps) 
> 2. The Coyote HTTP/1.1 connector has a URIEncoding attribute which
> defaults to ISO-8859-1. 3. The parameters class
> (o.a.t.u.http.Parameters) has a QueryStringEncoding field 
> which defaults
> to the URIEncoding. It must be set before the parameters are parsed to
> have an effect.
> 
> Things to note regarding the servlet API:
> 1. HttpServletRequest.setCharacterEncoding() normally only applies to
> the request body NOT the URI. 2. HttpServletRequest.getPathInfo() is 
> decoded by the web container. 3. HttpServletRequest.getRequestURI() is

> not decoded by container.
> 
> Other tips:
> 1. Use POST with forms to return parameters as the parameters are then
> part of the request body.
> 
> 
> RESPONSES
> =========
> 
> HTML META
>  tags are ignored by Tomcat. You may use <%@ page pagEncoding="..." %>
> for JSPs.
> 
> 
> 
> ---------------------------------------------------------------------
> 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]


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

Reply via email to