-1

メールとパスワードを受け取り、それらを logincheck サーブレットに転送するログイン サーブレットがあります。各フィールドに入力したままフォームを送信すると、対応する入力値に Cookie が設定されますが、電子メールとパスワードのフィールドが空白のままの場合、Cookie の値は空白に設定され、指示が表示されるように、logincheck サーブレットを設計しました。ログインサーブレットに戻ります。

ログインページにリダイレクトされるのではなく、フォームを未記入のまま送信すると、「要求されたソースは利用できません」という説明のエラーページにリダイレクトされます。親切に助けてください。

package newpackage;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class logincheck extends HttpServlet {

  protected void processRequest(HttpServletRequest request, HttpServletResponse  response)
        throws ServletException, IOException {


    //recieving form parameters
    String email=request.getParameter("email");
    String pass=request.getParameter("pass");

    //setting up cookies as a white field  if any credential has been left unfilled
    Boolean isMissingValue=false;
    if(email==null || email.trim().equals("")){
        email="";                                   //return white field as a cookie if the user doesnt enter anything and submits
        isMissingValue=true;
    }
    if(pass==null || pass.trim().equals("")){
        pass="";                                    //return white field as a cookie if the user doesnt enter anything and submits    
        isMissingValue=true;
    }

    //setting up cookies based on what the user entered last
    Cookie c1=new LongLivedCookie("email",email);
    response.addCookie(c1);
    Cookie c2=new LongLivedCookie("pass",pass);
    response.addCookie(c2);
    if(isMissingValue){
        RequestDispatcher obj=request.getRequestDispatcher("login.java");
        obj.forward(request,response);
    }
}
}

ここに私のLongLivedCookieクラスがあります

package newpackage;

import javax.servlet.http.Cookie;

public class LongLivedCookie extends Cookie {

public static final int seconds_per_year=60*60*25*365;

public LongLivedCookie(String name, String value) {
    super(name,value);
    setMaxAge(seconds_per_year);
}
}
4

2 に答える 2

1

あなたはRequestDispather正しくインスタンス化していません。

RequestDispatcher obj=request.getRequestDispatcher("login.java");

RequestDispatcher状態のJavaドキュメント

クライアントからリクエストを受信し、サーバー上の任意のリソース (サーブレット、HTML ファイル、JSP ファイルなど) に送信するオブジェクトを定義します。

したがって、login.javaターゲット リソースとして渡すのは正しくありません。既存のサーブレットまたは JSP リソースへの正しいパスを指定する必要があります。たとえば、Loginページが次のような JSP 転送である場合

RequestDispatcher view = request.getRequestDispatcher("login.jsp");
view.forward(request, response);

サーブレットのRequestDispatcher場合、正しい URL パターンが必要です。したがって、Loginページがサーブレットである場合は<url-pattern>、で指定されているとおりにチェックし、次のようweb.xmlに転送します

RequestDispatcher view = request.getRequestDispatcher("/Login");

また、 a は と の両方から取得できることに注意してください。ただし、RequestDispatcher前者は相対パスも取得できるという違いがあります。ServletRequestServletContext

参考
http ://docs.oracle.com/javaee/5/api/javax/servlet/RequestDispatcher.html

于 2013-09-20T04:11:48.037 に答える
0

As per your code and description, I am assuming you are expecting the cookie values as request parameter. But cookies doesn't work in that way. To get cookie values, you will have to use HttpRequest.getCookies() method and read the values.

Cookies[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
    if (cookie.getName().equals("email")) {
         ;//logic here
    } else if (cookie.getName().equals("pass")) {
         ;//logic here.
    }
}
于 2013-09-19T19:29:13.040 に答える