【问题标题】:jsp:forward removes all the html from the jsp pagejsp:forward 删除jsp页面中的所有html
【发布时间】:2016-04-06 18:29:34
【问题描述】:

我是使用 jsp 和 servlet 的新手,所以请多多包涵。我正在构建的网站有一个登录表单来访问其余页面。当您登录时,它会使用您的用户名设置一个 cookie,其目的是让其他页面在您尝试访问它们时检查此 cookie。

登录表单在操作中运行此登录 Servlet:

public class LoginServlet extends HttpServlet implements Constants {

/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {


    String Username = request.getParameter("username");
    String password = request.getParameter("password");

    if (StringUtils.isStringEmpty(Username) || StringUtils.isStringEmpty(password)) {

        RequestDispatcher rd = request.getRequestDispatcher("/index.html");
        rd.forward(request, response);

    } else {
        System.out.println(Username + password);
        UserManager uMgr = new UserManager();
        User user = uMgr.loginUser(Username, password);
        if (user == null) {
            RequestDispatcher rd = request.getRequestDispatcher("/login.jsp");
            rd.forward(request, response);
        } else {

            if (user.isIsAdmin() == TRUE) {
                Cookie loginCookie = new Cookie("ADMIN", Username);
                //setting cookie to expiry in 30 mins
                loginCookie.setMaxAge(30*60);
                response.addCookie(loginCookie);
                request.getSession(true).setAttribute(SESSION_ADMIN, user);

                RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
                rd.forward(request, response);


            } else {
                RequestDispatcher rd = request.getRequestDispatcher("/login.jsp");
                rd.forward(request, response);
            }
        }
    }

}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
 * Handles the HTTP <code>GET</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

/**
 * Handles the HTTP <code>POST</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

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

}

在 index.jsp 页面上,我在开始的 body 标记之后运行了这段代码:

<jsp:forward page="CookieServlet"/>

这是 CookieServlet:

public class CookieServlet extends HttpServlet {

/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    String userName = null;
    Cookie[] cookies = request.getCookies();
    if(cookies !=null){
    for(Cookie cookie : cookies){
        if(cookie.getName().equals("ADMIN")) userName = cookie.getValue();
    }
    }
    if(userName == null) response.sendRedirect("login.jsp");
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
 * Handles the HTTP <code>GET</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

/**
 * Handles the HTTP <code>POST</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

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

}

登录代码有效,它为我创建了 cookie,检查 cookie 的 cookieservlet 也会检查 cookie,但没有任何 HTML 显示在任何带有 &lt;jsp:forward page="CookieServlet"/&gt; 的页面上。有什么错误的想法吗?

【问题讨论】:

    标签: java jsp servlets cookies


    【解决方案1】:

    当您转发时,您会从一页转到另一页。自然,新页面上的信息与旧页面上的信息不同。如果您导航到一个页面并且仍然显示旧页面,这将是一个错误。

    【讨论】:

      【解决方案2】:

      没有错。这就是前锋的用途。转发到另一个资源就像是说:“我已经完成了这个请求的部分工作,现在将控制权转移到另一个资源”。

      您不应该在视图中检查登录。你甚至不应该在控制器中检查它。在调用任何控制器之前,您应该在中心位置检查它:servlet filter

      【讨论】:

        猜你喜欢
        • 2012-01-07
        • 2011-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-16
        • 2015-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多