Search code examples
servletsrequestdispatcher

Unable to send the value of two attributes to JSP from servlet using requestdispatcher



Please help . Below is my code to redirect the request with two attributes to JSP but both of the below two attributes returns the value of passWord .
1)user_Name

2)Pass_word

for example , ABC is my username and XYZ is my password which is get from the "FORM" but my second value i.e the value of the passWord variable is appears in both of the attribute.

printing inside the jsp page :

user_Name: XYS (Should be ABC instead of XYZ)

pass_Word: XYZ

servlet :

import java.io.IOException;    
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

public class JndiConn extends HttpServlet implements Servlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {

 DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
 String userName=request.getParameter("Username");
 String passWord=request.getParameter("password");
 String user_Name="";
 request.setAttribute(user_Name,userName);
 String pass_Word="";
 request.setAttribute(pass_Word,passWord);
RequestDispatcher rd=request.getRequestDispatcher ("GetParameter.jsp"); 
System.out.println(userName);
System.out.println(passWord);
response.setContentType("text/html");
PrintWriter writer = response.getWriter();

Connection connection = getConnection();
 if (connection != null) {
  String sql = "SELECT count(1) FROM scott.login_user where login_id ='"+userName+"' and password='"+passWord+"'";
  String sql1 = "select SYSDATE from dual";
  System.out.println(sql);
  try{
  PreparedStatement statement = connection.prepareStatement(sql);
  ResultSet rs = statement.executeQuery();

  while (rs.next()) {
         int number=rs.getInt("count(1)");
     System.out.println("Result value is "+number);
     if(number==1)
     {
    System.out.println("THE LOGIN SUCCESS FOR::"+userName);
    String sql2 = "INSERT INTO SCOTT.LOGIN_USER VALUES(3,'VINOTH','vinoth55','SCOTT',to_date('08/06/13','DD/MM/RR'),105)";
    PreparedStatement statement1 = connection.prepareStatement(sql2);
    ResultSet rs1 = statement1.executeQuery();
   rd.forward(request, response);
  } 
     else{

         System.out.println("THE LOGIN FAILURE FOR "+userName);
         rd.forward(request, response); 
             }
 }

 connection.close();
 }catch(Exception e){
   System.out.println(e);
 }
 }


}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
}

private Connection getConnection() {
 Connection connection = null;
 try {
 InitialContext context = new InitialContext();
 DataSource dataSource = (DataSource) context.lookup("vinothprd");

 connection = dataSource.getConnection();
 } catch (NamingException e) {
  e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
 }
 return connection;
 } 
}

Below is my JSP to print the user_Name and pass_Word :

JSP:

String user_Name="";
String userName=(String)request.getAttribute(user_Name);
String pass_Word="";
String passWord=(String)request.getAttribute(pass_Word);
System.out.println("user_Name: "+userName);
System.out.println("pass_Word: "+passWord);

Thanks for your help in advance...


Solution

  • In Servlet you are setting, attributes using empty value.

     String user_Name="";
     request.setAttribute(user_Name,userName);
     String pass_Word="";
     request.setAttribute(pass_Word,passWord);
    

    First of all, this is wrong and I don't know why you are doing this.

    In JSP, When you access request.getAttribute(user_Name); // which is empty "", you will get the value of password as username was overridden.

    Solution:

    You should set attribute like

    EDIT Servlet

     String userName=request.getParameter("Username");
     String passWord=request.getParameter("password");
    
     String user_Name="userName";
     request.setAttribute(user_Name, userName);
     String pass_Word="passWord";
     request.setAttribute(pass_Word, passWord);
    

    then in JSP

    String user_Name="userName"
    String userName=(String) request.getAttribute(user_Name);
    
    String pass_Word="passWord";
    String passWord=(String)request.getAttribute(pass_Word);
    

    See: http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#setAttribute