2013-05-02 7 views
2

У меня есть один сценарий, где я хочу сделать некоторую проверку до того, как моя страница welcome.jsp загрузится. На самом деле проверка похожа на то, что у меня есть идентификатор пользователя (с использованием request.getRemoteUser), который я хочу проверить в своем Db, есть ли он там или нет. Если да, то я хочу перенаправить его на другую страницу, например login.jsp. если нет, он будет перенаправлен на мой welcome.jsp. Я объявляю один сервлет (CheckUser.java), где я вызываю doPost из doGet, а также включаю тот же сервлет в my welcome.jsp, чтобы до загрузки его вызывал doGet.Проверка, необходимая перед загрузкой jsp

**CheckUser.java** 

package DBResource; 

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.util.logging.Level; 
import java.util.logging.Logger; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class CheckUser extends DBConnection { 
     String page="ListProjects.jsp"; 
     public Connection conn= null; 
     // This Happens Once and is Reused 
@Override 
public void init(ServletConfig config) throws ServletException 
    { 
     super.init(config);      
    } 

public boolean SearchUser(String Usrid) throws SQLException{ 
    try{ 

     // Establishing connection using data source 
     conn=ds.getConnection(); 

     PreparedStatement stmt=conn.prepareStatement("select * from OSS_USER where USER_EMAIL='"+Usrid+"'"); 

       ResultSet rs = stmt.executeQuery(); 

       boolean hasResult = rs.next(); 
       return hasResult; 

    } 

    catch (Exception e){ 
     e.printStackTrace(); 
     return false; 
    } 
    finally { 
     if (conn != null) conn.close(); 
    } 

} 


@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    System.out.println("on CheckUser doGet..........."); 
    doPost(request,response); 

} 


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


      System.out.println("on CheckUser doPost.........."); 
      //String Usrid= request.getRemoteUser(); 
      String Usrid= "[email protected]"; 

      contextPath = request.getContextPath(); 
      page = "/ListProjects.jsp"; 


    try { 
     boolean susr = SearchUser(Usrid); 
     if (susr==true) 
     { 
      response.sendRedirect(contextPath + "/ListProjects.jsp"); 

     } 
    } catch (SQLException ex) { 
     Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    finally { 
     if (conn != null) try { 
      conn.close(); 
     } catch (SQLException ex) { 
      Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 


} 

/** 
* Returns a short description of the servlet. 
* 
* @return a String containing servlet description 
*/ 
@Override 
public String getServletInfo() { 
    return "Short description"; 
}// </editor-fold> 

}

welcome.jsp

<body> 

    <jsp:include page="/CheckUser" flush="true" />   

ответ

2

Эта проблема разрешится с помощью фасоли & скриптлет. на странице Jsp я импортирую свой Java-класс (StoreUsrDetails) и объявляю jsp use bean (storeusr).

В Jsp странице

<%@page import="com.thomsonreuters.alpaca.StoreUsrDetails" %> 
<jsp:useBean id="storeusr" class="com.thomsonreuters.alpaca.StoreUsrDetails" scope="request" /> 

с использованием боб я называю метод внутри моего метода Java (ValidateUser), который возвращает погоду детали пользователя присутствует в базе данных или нет. после этого я написал код скрипта в начале моего тела jsp. И на основе значения retun метода validateUser i перенаправляет их на другую страницу.

Jsp тела

<body> 
    <% 

      if(storeusr.validateUser(request.getRemoteUser())) 
      response.sendRedirect("ListProjects.jsp"); 


    %> 
0

1) Вы должны расширить HTTPServlet сделать свой класс CheckUser Сервлет

т.е.:Public class CheckUser extends HTTPServlet

2) Что такое DBConnection? Это наследует HTTPServlet?

3) Затем вам нужно настроить CheckUser servlent в вашем web.xml.

т.е.

<servlet> 
    <servlet-name>checkUser</servlet-name> 
    <servlet-class>package.CheckUser</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>checkUser</servlet-name> 
    <url-pattern>/CheckUser</url-pattern> 
</servlet-mapping> 

Примечание: Пожалуйста, укажите, что вы сделали, и какие трудности вы столкнулись

+0

Спасибо за продолжение. Да, вы правы, DBConnection - это класс, который расширяет HttpServlet. А также я правильно настроил xml. На самом деле все походит на то, что я вызываю метод dopost внутри формы doget. и в doPost я написал один response.sendRedirect (contextPath + "/ListProjects.jsp"); который не работает, и даже я не получаю сообщение об ошибке. – Shibankar

+0

@ Ангел, я хочу, чтобы вы сделали 3 вещи. ** (1) ** Пожалуйста, убедитесь, что вызов 'doPost()' вызван. ** (2) ** Убедитесь, что переменная 'susr' истинна, и она переходит в состояние IF. ** (3) ** Сделайте 'system.out.print (contextPath +" /ListProjects.jsp ")'. Я хочу посмотреть, какая это ценность. –

+0

(1) Да, doPost получает вызов от doGet.(2) И также переменная susr, возвращающая истинное значение. (3) system.out.print (contextPath + "/ListProjects.jsp") => "/ALPACA/ListProjects.jsp", где ALPACA - мое имя приложения, а «ListProject.jsp» - в моей веб-папке. – Shibankar

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