1

I have simple jsp servlet project. it has one jsp page having an jquery ajax request code. There is a servlet which gets called in the above ajax request. The project have only a jsp page and a servlet.

Following is JSP Page Code

                    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
 <%@ include file="genericinclude.jsp"%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<script type="text/javascript">
$(document).ready(function() {
    var forminputdata = new FormData();
    
    
    forminputdata.append("username","3~san");
    forminputdata.append("unlockapplogin","unlockapplogin");

    //forminputdata=$("#idfrmentryapploginreset").serialize();
    $.ajax({
         xhr: function() {
             var req = $.ajaxSettings.xhr();
             if (req) {
                 req.upload.addEventListener('progress', function(event) {
                     if (event.lengthComputable) {
                         //$("#id"+i+"-p-"+file_data[i].name.replace(".","-")).html(event.loaded); // = 'test'; //event.loaded + ' / ' + event.total;
                     }
                 }, false);
             }
             return req;
         },
         url: 'ResetUserApplicationLogin',
         data: forminputdata,
         type: 'POST',
         contentType: false,
         processData: false,
         dataType: 'json',
        
         beforeSend: function(){                 
         },          
         success: function(data, textStatus, jqXHR){
             
             var objlstProjectDetails=data.objlstProjectDetails;
             if(data.reply=="success"){
                 alert("Application login reset successfull!");
                 
                 
                
             }else if(data.reply=="invalidsession"){
                //alert(data.message);  
                window.location.replace("Logout");
             }else if(data.reply=="failed"){
                 alert(data.message); 
             }
             
         },
         error: function(xhr, errDesc, exception) {
             
         }
     }); 
    
});
</script>
</head>
<body>

</body>
          </html>

The servlet code is as follows

package san.com;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Enumeration;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ResetUserApplicationLogin
 */
public class ResetUserApplicationLogin extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ResetUserApplicationLogin() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doPost(request, response);
    }
    public static String getBody(HttpServletRequest request) throws IOException {

        String body = null;
        StringBuilder stringBuilder = new StringBuilder();
        BufferedReader bufferedReader = null;

        try {
            InputStream inputStream = request.getInputStream();
            if (inputStream != null) {
                bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                char[] charBuffer = new char[128];
                int bytesRead = -1;
                while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
                    stringBuilder.append(charBuffer, 0, bytesRead);
                }
            } else {
                stringBuilder.append("");
            }
        } catch (IOException ex) {
            throw ex;
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException ex) {
                    throw ex;
                }
            }
        }

        body = stringBuilder.toString();
        return body;
    }
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("Headers");
        Enumeration<String> headerNames = request.getHeaderNames();
        while(headerNames.hasMoreElements()) {
          String headerName = headerNames.nextElement();
          System.out.println("Header Name - " + headerName + ", Value - " + request.getHeader(headerName));
        }
        
        System.out.println();
        System.out.println("request param");

        Enumeration<String> params = request.getParameterNames(); 
        while(params.hasMoreElements()){
         String paramName = params.nextElement();
         System.out.println("Parameter Name - "+paramName+", Value - "+request.getParameter(paramName));
        }
        
        System.out.println("username= "+request.getParameter("username"));  
        System.out.println("button= "+request.getParameter("unlockapplogin"));  

        
        System.out.println("get body");
                System.out.println(getBody(request));
    }

}


The output on console is as follows

Headers
Header Name - host, Value - localhost:8080
Header Name - connection, Value - keep-alive
Header Name - content-length, Value - 262
Header Name - pragma, Value - no-cache
Header Name - cache-control, Value - no-cache
Header Name - sec-ch-ua, Value - "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"
Header Name - accept, Value - application/json, text/javascript, */*; q=0.01
Header Name - content-type, Value - multipart/form-data; boundary=----WebKitFormBoundaryAyd42O3mfas060o3
Header Name - x-requested-with, Value - XMLHttpRequest
Header Name - sec-ch-ua-mobile, Value - ?0
Header Name - user-agent, Value - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36/8mqErPuL-62
Header Name - sec-ch-ua-platform, Value - "Windows"
Header Name - origin, Value - http://localhost:8080
Header Name - sec-fetch-site, Value - same-origin
Header Name - sec-fetch-mode, Value - cors
Header Name - sec-fetch-dest, Value - empty
Header Name - referer, Value - http://localhost:8080/sandip/testajax.jsp
Header Name - accept-encoding, Value - gzip, deflate, br
Header Name - accept-language, Value - en-US,en;q=0.9
Header Name - cookie, Value - JSESSIONID=EEF9C07A7DA828835E8FE5883FB98D73

request param
username= null
button= null
get body
------WebKitFormBoundaryAyd42O3mfas060o3
Content-Disposition: form-data; name="username"

3~sandip
------WebKitFormBoundaryAyd42O3mfas060o3
Content-Disposition: form-data; name="unlockapplogin"

unlockapplogin
------WebKitFormBoundaryAyd42O3mfas060o3--

In output we get sent form parameter as null

but when we read request using userdefined getBody function I found that the parameter provided by ajax comes to servlet but either its not coming in proper form or the servlet is not able to parse it properly.

My setup have java 18.X.x tomcat 10.X

Please guide me to understand and solve the problem

Thansk in advance

Param-Ganak
  • 5,787
  • 17
  • 50
  • 62

0 Answers0