0

我试图将一个小型网上商店作为学校项目的一部分进行编程。我们必须在 java 中使用 servlet,因此也必须使用 .jsp 页面。我的问题是我想检查用户是否登录。如果没有,我想显示一个登录表单,如果他们登录,我想显示他们的购物篮。这里的主要问题是,当我尝试通过我的 servlet 将 .jsp 代码发送到我的主 .jsp 页面时,它不会翻译代码,它只是简单地打印出来:

这是我的servlet代码:

package coreservlets;

import java.io.*;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.*;
import javax.servlet.http.*;

@WebServlet({"/loggedIn"})
public class LoggedIn extends HttpServlet
{
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException
   {
     doPost(request, response);
   }

   protected void doPost(HttpServletRequest request, HttpServletResponse response)         throws ServletException, IOException {
 HttpSession session = request.getSession();

 PrintWriter pw = response.getWriter();

 if (session.getAttribute("loggedInName") == null) 
 {
   pw.println("<tr><td>" + 
     "<%@include file=\"messages.jsp\"%> </td>" + 
     "<td>"
     + "<form action=\"login\" method=\"POST\">"
        + "<table>"
            + "<tr>"
                + "<td>Username</td>"
                + "<td><input type=\"text\" name=\"username\" />"
                + "</td>"
            + "</tr>"
            + "<tr>"
                + "<td>Password</td>"
                + "<td><input type=\"password\" name=\"password\" />"
                + "</td>"
            + "</tr>"
            + "<tr>"
                + "<td></td>"
                + "<td><input type=\"submit\" value=\"login\" /> or" 
                + " <ahref=\"register.jsp\">register here!</a>"
                + "</td>"
            + "</tr>"
        + "</table>"
    + "</form> </td>" +  
     "</tr>");
 }
 else 
 {
     pw.println("<%@include file=\"shoppingBasket.jsp\"%>");

 }
   }
}

在 index.jsp 中,我使用以下方法简单地加载上面的 servlet:

有没有一种聪明的方法来解决这个问题,而不会使它变得复杂,并且不添加单独的登录页面(知道其他人这样做了,但我认为这只会带来很多额外的麻烦来检查人们是否在结帐之前登录等等

请记住这只是一个学校项目,所以我知道它可能不是最聪明的做事方式,也不是最安全的,但它只是一个虚构的网上商店 :)

4

1 回答 1

0

这是错误的方式。

JSP 将被编译为在运行时生成 HTML 的纯 Java-Servlet。你不能用Java 生成JSP 生成Java 生成HTML。

尝试使用

package coreservlets;

import java.io.*;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.*;
import javax.servlet.http.*;

@WebServlet({"/loggedIn"})
public class LoggedIn extends HttpServlet
{
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException
   {
     doPost(request, response);
   }

   protected void doPost(HttpServletRequest request, HttpServletResponse response)         throws ServletException, IOException {
 HttpSession session = request.getSession();

 PrintWriter pw = response.getWriter();

 if (session.getAttribute("loggedInName") == null) 
 {
   pw.println("<tr><td>");
   request.getRequestDispatcher().include("/messages.jsp");  
   pw.println("<td>"
     + "<form action=\"login\" method=\"POST\">"
        + "<table>"
            + "<tr>"
                + "<td>Username</td>"
                + "<td><input type=\"text\" name=\"username\" />"
                + "</td>"
            + "</tr>"
            + "<tr>"
                + "<td>Password</td>"
                + "<td><input type=\"password\" name=\"password\" />"
                + "</td>"
            + "</tr>"
            + "<tr>"
                + "<td></td>"
                + "<td><input type=\"submit\" value=\"login\" /> or" 
                + " <ahref=\"register.jsp\">register here!</a>"
                + "</td>"
            + "</tr>"
        + "</table>"
    + "</form> </td>" +  
     "</tr>");
 }
 else 
 {
     pw.println("<%@include file=\"shoppingBasket.jsp\"%>");

 }
   }
}

而不是线

"<%@include file=\"messages.jsp\"%> </td>" + 

问候

于 2013-02-08T07:22:08.400 回答