0

学校のプロジェクトの一環として小さなウェブショップをプログラムしようとしています。Java でサーブレットを使用する必要があるため、.jsp ページも使用する必要があります。私の問題は、ユーザーがログインしているかどうかを確認したいということです。ログインしていない場合はログインフォームを表示し、ログインしている場合は買い物かごを表示したいです。ここでの主な問題は、サーブレットを介して .jsp コードをメインの .jsp ページに送信しようとすると、コードが変換されず、単純に出力されることです。

ここに私のサーブレットコードがあります:

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 では、次を使用して上記のサーブレットを簡単にロードします。

複雑になることなく、別のログインページを追加せずに、これを解決するスマートな方法はありますか(他の人がそれを行ったことを知っていますが、チェックアウトする前に人々がログインしているかどうかを確認するために多くの余分な問題をもたらすと思います。

これは単なる学校のプロジェクトであることを覚えておいてください.

4

1 に答える 1

0

これは間違った方法です。

JSP は、実行時に HTML を生成するプレーンな Java サーブレットにコンパイルされます。Java を使用して、HTML を生成する Java を生成する JSP を生成することはできません。

を使用してみてください

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 に答える