У меня есть один сценарий, где я хочу сделать некоторую проверку до того, как моя страница 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" />
Спасибо за продолжение. Да, вы правы, DBConnection - это класс, который расширяет HttpServlet. А также я правильно настроил xml. На самом деле все походит на то, что я вызываю метод dopost внутри формы doget. и в doPost я написал один response.sendRedirect (contextPath + "/ListProjects.jsp"); который не работает, и даже я не получаю сообщение об ошибке. – Shibankar
@ Ангел, я хочу, чтобы вы сделали 3 вещи. ** (1) ** Пожалуйста, убедитесь, что вызов 'doPost()' вызван. ** (2) ** Убедитесь, что переменная 'susr' истинна, и она переходит в состояние IF. ** (3) ** Сделайте 'system.out.print (contextPath +" /ListProjects.jsp ")'. Я хочу посмотреть, какая это ценность. –
(1) Да, doPost получает вызов от doGet.(2) И также переменная susr, возвращающая истинное значение. (3) system.out.print (contextPath + "/ListProjects.jsp") => "/ALPACA/ListProjects.jsp", где ALPACA - мое имя приложения, а «ListProject.jsp» - в моей веб-папке. – Shibankar