2014-01-24 3 views
0

Я ищу jsp, в котором я могу получить доступ к данным из сервлета, но в том, что у меня проблема с dipatcher запроса, если я пишу в блоке, он выдает исключение, а в блоке он загружает навсегда.Отобразить базу данных пользователю на JSP

Есть всего 4 файла:

1) сервлета именования servlet.java

import java.io.*; 
import java.sql.*; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 


public class servlet extends HttpServlet{ 

    private String username,password; 

    /* (non-Javadoc) 
    * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) 
    */ 
    public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException,ServletException 
    { 
     res.setContentType("text/html"); 
     try{ 
      PrintWriter out = res.getWriter(); 
      Class.forName("com.mysql.jdbc.Driver"); 
      String url,user,pass,query,query1,u,p; 
      url="jdbc:mysql://localhost:3306/test"; 
      user="root"; 
      pass="root"; 
      //for making Code 4-The best way to work..u have to make below a comment 

      /*query="select * from student_data"; 
      Connection con=DriverManager.getConnection(url,user,pass); 
      Statement stmt=con.createStatement(); 
      ResultSet rs=stmt.executeQuery(query);*/ 
      //NEW CODE 1-works partially 

      /*while(rs.next()) 
      { 
       if(req.getParameter("username").equals(rs.getString("Username")) && req.getParameter("password").equals(rs.getString("Password"))) 
       { 
        System.out.println("Yout have logged in"); 
        PrintWriter out = res.getWriter(); 
        out.println("U r succesfull"); 
       } 

       else 
       { 
        System.out.println("NOOOOOOOOOOOOOOOO"); 

       } 

      }*/ 



      //NEW CODE 2-fail 
      /* 
      if(rs.getString("Username").equals(req.getParameter("username"))) 
      { 
       if(req.getParameter("password").equals(rs.getString("Password"))) 
       { 
        System.out.println("Yout have logged in"); 
        PrintWriter out = res.getWriter(); 
        out.println("U r succesfull"); 
       } 


      } 

      else 
      { 
       System.out.println("NOOOOOOOOOOOOOOOO"); 

      } 


      */ 





      //NEW CODE 3 works 

      /* 
      while(rs.next()) 
      { 
       if(req.getParameter("username").equals(rs.getString("Username"))) 
       {   
       if(req.getParameter("password").equals(rs.getString("Password"))) 
       { 
        out.println("<h3>"+"U have logged in succesfully"+"</h3>"); 
        break; 
       } 

       else 
       { 
        out.println("<h3>"+"Username or password do not match !"+"</h3>"); 
        break; 
       } 
       }  
       else 
       { 
        out.println("<h3>"+"You r not a registered user,want to register ??"+"</h3>"); 
        out.println("<a href='registration.jsp'> Registration</a>"); 

        break; 

       } 
      }*/ 

      //Code 4-The best way 


      //query="select * from student_data where Username="+req.getParameter("username")+"AND Password="+req.getParameter("password"); 
      /*u=req.getParameter("username"); 
      p=req.getParameter("password"); 
      query="select * from student_data where Username='"+u+"' AND Password='"+p+"'"; 
      Connection con=DriverManager.getConnection(url,user,pass); 
      Statement stmt=con.createStatement(); 
      ResultSet rs=stmt.executeQuery(query); 
      if(rs.next()) 
      { 
       RequestDispatcher r=req.getRequestDispatcher("/Jsp/LoggedIn.jsp"); 
       r.forward(req,res); 

      } 

      else 
      { 
       out.println("<h3>"+"Username or password do not match !"+"</h3>"); 
       out.println("<a href='registration.jsp'> Registration</a>"); 
      }*/ 



      /*//Code 5-Passing the user to another JSP after validation and using the data sent from servlet! 

      u=req.getParameter("username"); 
      p=req.getParameter("password"); 
      query="select * from student_data where Username='"+u+"' AND Password='"+p+"'"; 
      Connection con=DriverManager.getConnection(url,user,pass); 
      Statement stmt=con.createStatement(); 
      ResultSet rs=stmt.executeQuery(query); 
      if(rs.next()) 
      { 
       //by using setAttri and getAttru 

       req.setAttribute("Name", u); 

       // by using HTTPsession 

       HttpSession sess=req.getSession(true); 
       sess.setAttribute("Name", u); 

       RequestDispatcher r=req.getRequestDispatcher("/Jsp/LoggedIn.jsp"); 
       r.forward(req,res); 

      } 

      else 
      { 
       out.println("<h3>"+"Username or password do not match !"+"</h3>"); 
       out.println("<a href='registration.jsp'> Registration</a>"); 
      }*/ 


//Code 6-Passing the user to another JSP after validation and display the database to logged user - diplaying just one row-UnderContruction! 

      u=req.getParameter("username"); 
      p=req.getParameter("password"); 
      query="select * from student_data where Username='"+u+"' AND Password='"+p+"'"; 
      Connection con=DriverManager.getConnection(url,user,pass); 
      Statement stmt=con.createStatement(); 
      ResultSet rs=stmt.executeQuery(query); 
      if(rs.next()) 
       { 
        query1="select * from student_data"; 
        Statement stmt1=con.createStatement(); 
        ResultSet rs1=stmt1.executeQuery(query1); 
        String n,s; 
        RequestDispatcher r = null; 
        int i,row; 
        while(rs1.next()) 
        { 
        rs1.last(); 
        row=rs1.getRow(); 
        rs1.first(); 


        i=rs1.getInt("Id"); 
        req.setAttribute("Id", i); 

        n=rs1.getString("Name"); 
        req.setAttribute("Name", n); 

        s=rs1.getString("Skill"); 
        req.setAttribute("Skill", s); 

        req.setAttribute("Rows", row); 

        req.getRequestDispatcher("/Jsp/LoggedIn.jsp").forward(req,res); 
        } 


       } 





      else 
      { 
       out.println("<h3>"+"Username or password do not match !"+"</h3>"); 
       out.println("<a href='registration.jsp'> Registration</a>"); 
      } 



     } 

catch(Exception e) 
{ 
    e.printStackTrace(); 
} 
    } 
} 

2) Login.jsp

<%@page import="java.sql.*"%> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Login Page</title> 
</head> 
<body> 
<form action="servlet" method="post"><fieldset> 
    <legend>Login</legend> 
<hr> 
Username: <input type="text" size=10 name="username"> 
<br> 
Password: <input type="text" size=10 name="password"> 
<br> 
<input type="submit" value="Submit"></input> 
</fieldset> 

<a href='registration.jsp'>New User ??Register </a> 

</form> 

</body> 
</html> 

3) LoggedIn.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>LoggedIn</title> 
</head> 
<body> 

<h2>Welcome <%String s=request.getAttribute("Name").toString(); 
out.println(s); %></h2> 
<table border="5" bordercolor="brown" background="yellow"> 
<tr> 
<th>Id</th><th>Name</th><th>Skill</th> 

</tr> 

<!-- It is just for normal fetching values --> 

<tr><td> 
<% //by using setAttri and getAttru 

//String s=request.getAttribute("Name").toString(); 
out.println(s); 

//by using HttpSession 

/* HttpSession sess=request.getSession(false); 
String s=sess.getAttribute("Name").toString(); 
out.println(s); 
*/ 

%></td></tr> 

<%--This is for fetching the complete database and creating rows dynamically --%> 

<% 
int rows=Integer.parseInt(request.getAttribute("Rows").toString()); 

for(int j=1;j<=rows;j++) 
{ 
    %> 
    <tr> 
    <td> 
    <% 
     out.println(s); 
    %> 
    </td> 






    </tr> 


    <% 
    } 

%> 
</table> 


</body> 
</html> 

4) web.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" id="WebApp_ID" version="2.5"> 
    <display-name>JspServlet1</display-name> 
    <welcome-file-list> 
     <welcome-file>Jsp/Login.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <servlet-name>servlet</servlet-name> 
    <servlet-class>servlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>servlet</servlet-name> 
    <url-pattern>/servlet</url-pattern> 

    </servlet-mapping> 




</web-app> 

Я хотел сделать проверку входа в систему, если пользователь действует он показал всю базу данных пользователей, но метод

1) я имею проблемы в .getRequestDispatcher() в качестве servlet.java если я пишу его за пределами времени, он бросает «java.lang.IllegalStateException: не может переслать после того, как ответ был совершен»

и если я напишу его за пределами, пока он загружается навсегда.

2) У меня проблема с тем, как отображать базу данных для пользователя.

+2

Для вашей второй проблемы я бы рекомендовал использовать [JSTL] (http://docs.oracle.com/javaee/5/tutorial/doc/bnald.html). – hd1

+0

Я не могу сказать причину проблемы 1, но вы можете использовать response.sendRedirect ("/ Jsp/LoggedIn.jsp") для перенаправления на эту страницу после успешного входа в систему – SpringLearner

+0

@ABV Попробуйте использовать оператор возврата –

ответ

1
  1. Используйте PreparedStatement вместо Statement for Login для предотвращения внедрения SQL.

    rs1.last(); row = rs1.getRow(); rs1.first();

    выше кода приводит к бесконечному циклу

  2. Put диспетчеру снаружи в то время как петля

Почему вы используете

row=rs1.getRow(); 

Вы можете использовать ArrayList/LinkedHashMap хранить все записи, а затем направить в LoggedIn.jsp

ArrayList<Student> al = new ArrayList<Student>(); 
while(rs1.next()) 
{ 
    Student std= new Student(); 
    std.setName(n); 
    ... 
    al.add(std); 
} 

request.setAttribute("userList" al); 
+0

благодарит человека за гениальность !!! – ABV

+0

sry но что такое Студент в этом: ArrayList al = new ArrayList (); – ABV

+0

Чтобы вы могли установить множественное свойство (одну информацию о студенте) в объекте этого класса и добавить этот объект в ArrayList – Tusar

Смежные вопросы