Java Servlet cookies工作不正常
我有一个登录servlet,在这里我接收电子邮件和密码,并将它们引导到一个登录检查servlet。我设计了我的logincheck servlet,这样,如果提交表单时每个字段都已填写,cookie将设置为相应的输入值,但如果电子邮件和密码字段为空,cookie值将设置为空,我们将被引导回登录servlet 当我提交表单时,未填写表单,而不是重定向到登录页面,我将被重定向到一个错误页面,页面描述为“请求的源不可用”。请帮忙Java Servlet cookies工作不正常,java,servlets,cookies,Java,Servlets,Cookies,我有一个登录servlet,在这里我接收电子邮件和密码,并将它们引导到一个登录检查servlet。我设计了我的logincheck servlet,这样,如果提交表单时每个字段都已填写,cookie将设置为相应的输入值,但如果电子邮件和密码字段为空,cookie值将设置为空,我们将被引导回登录servlet 当我提交表单时,未填写表单,而不是重定向到登录页面,我将被重定向到一个错误页面,页面描述为“请求的源不可用”。请帮忙 package newpackage; import java.io.
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);
}
}
根据您的代码和描述,我假设您期望cookie值作为请求参数。但是饼干不是那样的。要获取cookie值,必须使用HttpRequest.getCookies()方法并读取值
Cookies[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("email")) {
;//logic here
} else if (cookie.getName().equals("pass")) {
;//logic here.
}
}
您没有正确实例化您的
RequestDispather
RequestDispatcher obj=request.getRequestDispatcher("login.java");
RequestDispatcher
的java文档声明
定义一个对象,该对象接收来自客户端的请求并将它们发送到服务器上的任何资源(如servlet、HTML文件或JSP文件)
因此,将login.java
作为目标资源传递是不正确的。它希望您提供指向现有servlet或JSP资源的正确路径。例如,如果您的登录
页面是一个JSP转发
RequestDispatcher view = request.getRequestDispatcher("login.jsp");
view.forward(request, response);
RequestDispatcher view = request.getRequestDispatcher("/Login");
对于servlet,RequestDispatcher
需要正确的URL模式。因此,如果您的登录
页面是一个servlet,请按照web.xml
中的指定检查它的
,并作为
RequestDispatcher view = request.getRequestDispatcher("login.jsp");
view.forward(request, response);
RequestDispatcher view = request.getRequestDispatcher("/Login");
还要注意,aRequestDispatcher
可以从ServletRequest
和ServletContext
中检索,区别在于前者也可以采用相对路径
参考:我的这段代码只向客户端发送cookie。你建议的是你读饼干的部分。我向您保证,我有另一个类,它的代码与您建议的类似,我从客户端读取cookies