0

I am trying pass a charset in some language to a function in jersey rest project, by trying to login with a user. But the function receives a non-decoded text, which makes it appear as ????

I tried request.setCharacterEncoding("UTF-8"), but it didn't help. When I log in with user in English, it works fine.

My Java code:

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");
        String user = request.getParameter("user");

        String pwd = request.getParameter("pwd");
        System.out.println(user+pwd);   
    }
}

My HTML:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
    <p style="text-align: center">
        <font size="20" color="blue"> wellcome to my system!</font>
    </p>
    <form action="LoginServlet" method="post">

        Username: <input placeholder="Enter Username" type="text" name="user" >
        <br> Password: <input placeholder="Enter password"
            type="password" name="pwd"> <br> <input type="submit"
            value="Login">
    </form>
</body>
</html>

My XML:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

  <display-name>some</display-name>

  <welcome-file-list>
    <welcome-file>login.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>com.web.services</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet>
    <servlet-name>LogoutServlet</servlet-name>
    <servlet-class>com.web.servlet.LogoutServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
  <filter>
    <display-name>SessionFilter</display-name>
    <filter-name>SessionFilter</filter-name>
    <filter-class>com.web.filters.SessionFilter</filter-class>
     <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
  </filter>
  <filter-mapping>
    <filter-name>SessionFilter</filter-name>
    <url-pattern>/SessionFilter</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>SessionFilter</filter-name>
    <servlet-name>Jersey REST Service</servlet-name>
  </filter-mapping>
  <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.web.servlets.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login/*</url-pattern>
  </servlet-mapping>

</web-app>
Das_Geek
  • 2,775
  • 7
  • 20
  • 26
ram
  • 1
  • 1
  • You mean, `String user` isn't properly encoded? Then the issue is how to decode the value from the request and which encoding it actually uses. Mabe [that](https://stackoverflow.com/questions/5729806/encode-string-to-utf-8) may lead further. Looks like you pass in a utf-8 value, but java by default uses utf-16. The way will be `utf8-string -> byte[] -> utf16-string` – Curiosa Globunznik Oct 30 '19 at 14:42
  • Obviously the other way would be to persuade your front-end to produce utf-16 straight away. – Curiosa Globunznik Oct 30 '19 at 14:55

0 Answers0