【问题标题】:Adding .jsp code to a .jsp file through servlet通过 servlet 将 .jsp 代码添加到 .jsp 文件
【发布时间】:2013-02-07 23:42:55
【问题描述】:

我正在尝试编写一个小型网上商店作为学校项目的一部分。我们必须在 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:

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

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

【问题讨论】:

    标签: jsp servlets


    【解决方案1】:

    这是错误的方式。

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

    尝试使用

    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>" + 
    

    问候

    【讨论】:

    • 当我尝试使用您的建议时,我在尝试编译 java 文件时遇到错误:接口 ServeletRequest 中的方法 getRequestdispatcher 无法应用于给定类型。
    • d 是大写的,我的错。它仍然不会编译
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多