在我的项目中,仅当用户已经登录时,我才禁止用户访问每个页面。这就是为什么我编写以下代码。当我输入浏览器时,例如http:// localhost:8080/ JSP1 /Students,我进入login.jsp
页面。但是在我输入了登录ID和密码后,仅出现空白页http://localhost:8080 / JSP1 /Logged,GlassFish表示在
if (userPath.equals("/Students")){
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/Students.jsp");
requestDispatcher.forward(request, response);
}
java.lang.IllegalStateException: PWC1227: Cannot forward after response has been committed
doGet和doPost的完整代码:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession ses = request.getSession();
String login = (String)ses.getAttribute("login");
String password = (String)ses.getAttribute("password");
if ((login==null)|(password==null)){
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/login.jsp");
requestDispatcher.forward(request, response);
}
//Now we think that we are successfully logged in
String userPath = request.getServletPath();
// System.out.println(userPath);
if (userPath.equals("/Login")){
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/login.jsp");
requestDispatcher.forward(request, response);
}
if (userPath.equals("/Students")){
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/Students.jsp");
requestDispatcher.forward(request, response);
}
if (userPath.equals("/Student")){
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/Student.jspx");
requestDispatcher.forward(request, response);
}
if (userPath.equals("/StudentEdit")){
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/StudentEdit.jsp");
requestDispatcher.forward(request, response);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// processRequest(request, response);
PrintWriter out = response.getWriter();
String userPath = request.getServletPath();
System.out.println(userPath);
if (request.getRequestURI().equals("/Logged")){
String Login = request.getParameter("login");
String Password = request.getParameter("password");
request.getSession().setAttribute("login", Login);
request.getSession().setAttribute("password", Password);
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/Students.jsp");
requestDispatcher.forward(request, response);
}
if (userPath.equals("/addStudent")) {
// System.out.println(request.getContextPath());
String Name = request.getParameter("name");
String Surname = request.getParameter("surname");
String Login = request.getParameter("login");
String Password = request.getParameter("password");
Student student = new Student(Name,Surname,Login,Password);
if (student != null) {
dao.insertStudent(student);
} else {
System.out.println("Not valid parameter!!!");
}
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/Students.jsp");
requestDispatcher.forward(request, response);
}
if (request.getRequestURI().equals("/Edit")) {
System.out.println("We work with students!!!");
String delete = request.getParameter("Add_new_student");
if (delete != null){
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/Student.jspx");
requestDispatcher.forward(request, response);
}
Enumeration parameters = request.getParameterNames();
while (parameters.hasMoreElements()) {
String parameterName = (String) parameters.nextElement();
String parameterValue = request.getParameter(parameterName);
String norder = parameterName.substring(parameterName.indexOf("_")+1);
ArrayList<Student> curStudents = dao.getAllStudents();
int norderint = Integer.parseInt(norder);
Student studentToWork = curStudents.get(norderint);
String actionToDo = parameterName.substring(0, parameterName.indexOf("_"));
if (actionToDo.equals("Edit")){
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/StudentEdit.jsp");
ServletContext cont = request.getServletContext();
cont.setAttribute("studentToEdit", studentToWork);
requestDispatcher.forward(request, response);
} else {
boolean attemp = dao.deleteStudent(studentToWork);
if (attemp){
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/Students.jsp");
requestDispatcher.forward(request, response);
} else {
out.println("Unsuccessfull attemp to delete a Student");
}
}
}
}
if (userPath.equals("/EditStudent")){
System.out.println("We work with StudentEdit!");
Student studentToEdit = (Student)request.getSession().getAttribute("studentToEdit");
String newName = request.getParameter("name");
String newSurname = request.getParameter("surname");
String newLogin = request.getParameter("login");
String newPassword = request.getParameter("password");
Student newStudent = new Student(newName, newSurname,newLogin,newPassword);
boolean update = dao.updateStudent(studentToEdit, newStudent);
if (update){
out.println("<p>You have successfully edited a Student=" + studentToEdit.toString() + " to Student="+ newStudent.toString());
} else {
out.println("<p>Unsuccessful attempt to edit!</p>" );
}
}
}
login.jsp很简单:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form action="/JSP1/Logged" method="POST">
<table>
<tr>
<td>Login:</td>
<td><input type="text" name="login" value=""/> </td>
</tr>
<tr>
<td>Password </td>
<td><input type="password" name="password"/> ></td>
</tr>
<tr>
<td><input type="submit" name="OK" value="OK" /> </td>
</tr>
</table>
</form>
</body>
我不知道发生了什么事。
未提供登录名和/或密码时,您不会在前进后返回。入门者之间普遍存在误解,即该forward()
方法神奇地终止了代码执行并以某种方式跳出了该方法。因此,这是不正确的。您必须从方法中返回并自己停止执行代码的剩余部分。
您需要添加一个 return;
if ((login==null)|(password==null)){
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/login.jsp");
requestDispatcher.forward(request, response);
return;
}
或添加一个 else
if ((login==null)|(password==null)){
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/login.jsp");
requestDispatcher.forward(request, response);
} else {
// Now we think that we are successfully logged in.
// Yes, that above comment is now finally true.
// Put your bunch of non-DRY if-else code here.
}
我知道这里已经讨论过至少一百万次了,但是每个servlet在调用forward()之前都会重定向或刷新输出。我有同样的问题,但我没有做任何与输出。我的servlet只接受请求参数并提交到数据库,并在请求上设置一个属性。然后,它将请求转发给jsp,jsp显示属性。我在Tomcat7上使用Servlet3.0。下面是我的servlet doPost方法,后面是转发到的jsp: JSP: 我相信我可能错
我使用过滤器来确定请求的页面是否具有有效的会话。 这是我的密码<代码>网络。xml: 过滤器类别: 我有一个登录页面,用于检查用户是否有效。如果用户有效,则将控制转移到此servlet。 这在没有过滤器的情况下可以工作,但是当我将控件转发到“//showuserImages.jsp”时,过滤器会显示一个错误。
你好,Hibernate和Jackson有问题。有两个POJO 为Spring Security集成而设计的用户及其角色。 还有一个控制器,通过Jackson从用户Json生成。With方法 当此方法返回不带null字段的用户时,将抛出: 当我添加@OneTo很多时,这个问题就出现了(mep dBy="user", cascade=CascadeType. ALL, fetch=FetchType
我使用下面的jsp和得到
问题内容: 逻辑是过滤器被命中,条件不成立,因此它遍历过滤器链。提交响应后,过滤器将被命中,并且条件现在为true(已设置请求属性)。它可以执行转发,但是页面从不转发。我知道这与提交的响应有关,因为我在第一次到达链之前测试了转发的不同逻辑,并且确实转发成功。 我的部署描述符中的示例: 问题答案: an的“已提交”状态实际上是说明响应头是否已写入基础套接字的一种方式。“已提交”响应已(至少)写入了第
我试图创建一个api的商店以下属性:StoreId,名称,位置,电话,产品列表(ProductId,对象,价格,股票),产品列表的大小 问题是,当存储区与列表中的项目不一致时,它会以以下方式响应: 但是,如果所有的商店都没有项目,就没有问题,但是如果所有的商店都没有项目,api就没用了。
在我的应用程序中执行一些操作时,我得到了 Java . lang . illegalstateexception无法调用sendError() 当我再次重新加载页面时,它会正常工作一段时间,但一段时间后它再次显示相同的异常。我如何克服这个异常? 以下是例外: 支柱.xml