-- 作者:海军
-- 发布时间:2009/6/4 19:42:27
-- 关于J2EE中servlet向jsp转发出现的异常?
李老师,你好,我是NIIT班的一个学生,我在写最后的购物车作业的时候,帮人家查看一个代码的时候,出现了一个问题,我请教了好多同学都没有发现怎么解决这个问题。
我做了一个简单的实验:我写了三个jsp跟一个servlet,模拟用户登录
login.jsp:
<%@ page language="java" c%>
<html> <head> <title>登陆</title> </head>
<body> <h3><font color="#FF0000"><strong>用户登陆</strong></font></h3>
<!-- 登录信息填写表单 --> <form name="form" method="post" action="LoginServlet"> <table> <tr> <td align="left"><strong>用户姓名:</strong></td> <td><input type="text" name="username"></td> </tr> <tr> <td align="left"><strong>用户密码:</strong></td> <td><input type="password" name="password"></td> </tr> <tr> <td align="left"><input type="submit" name="Submit" value="提交"> <input type="reset" name="reset" value="重置"></td> </tr>
</table> </form>
</body> </html>
LoginServlet:
package Servlets;
import java.io.IOException; import java.io.PrintWriter;
import javabeans.Student; import javabeans.User;
import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;
import services.AdministratorService; import services.StudentService;
/** * Servlet implementation class for Servlet: LoginServlet * */ public class LoginServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { static final long serialVersionUID = 1L;
/* * (non-Java-doc) * * @see javax.servlet.http.HttpServlet#HttpServlet() */ public LoginServlet() { super(); }
/* * (non-Java-doc) * * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, * HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub PrintWriter out = response.getWriter(); response.setContentType("text/html;cherset=GBK"); HttpSession session = request.getSession(true); request.setCharacterEncoding("gbk"); System.out.print("1"); ServletContext servletContext = this.getServletContext(); System.out.print("2"); StudentService ss = (StudentService) servletContext .getAttribute("studentSrvc");
AdministratorService as = (AdministratorService) servletContext .getAttribute("adminSrvc");
System.out.print("3"); String username = ""; String password = ""; username = new String(request.getParameter("username").getBytes( "ISO-8859-1"), "GBK");
password = new String(request.getParameter("password").getBytes( "ISO-8859-1"), "GBK"); System.out.print(username); System.out.print(password); System.out.print("4");
User user = null; user = ss.getUser(username, password); System.out.print(user.getUsername());
if (user != null) { if (user instanceof Student) { session.setAttribute("user", user); try { System.out.print("5"); RequestDispatcher disp = request .getRequestDispatcher("admin.jsp");
disp.forward(request, response);
} catch (Exception e) {
e.printStackTrace(); } }
}
}
/* * (non-Java-doc) * * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, * HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
其中数据库是能成功获取的;
如果成功登陆的话会转发到admin.jsp这个网页中:
admin.jsp:
<%@page language="java" c %> <html> <head> <title>Insert title here</title> </head> <body> <h3>欢迎你:<jsp:getProperty name="user" property="username"/></h3> <ul> <li><a href="admin_gradescore.jsp">给学生评定成绩</a></li> <li><a href="admin_browseuserinfo.jsp">查看学生信息</a></li> <li><a href="admin_browseuserscore.jsp">查看学生成绩</a></li> <li><a href="admin_browseusercredit.jsp">查看学生学分</a></li> <li><a href="admin_browserscscore.jsp">查看某门课程成绩</a></li> <li><a href="admin_browsescinfo.jsp">查看某门课的选课情况</a></li> <li><a href="admin_addcourse.jsp">添加课程</a></li> <li><a href="admin_deletescore.jsp">删除课程</a></li> <li><a href="admin_deleteuserinfo.jsp">删除学生信息</a></li> <li><a href="logout.jsp">注销</a></li> </ul>
</body> </html>
问题就出现了;当我输入用户为lj,密码为lj时,此时浏览器的url为:http://localhost:8088/LJ/LoginServlet
<!--StartFragment -->
但是如果我改成http://localhost:8088/LJ/admin.jsp时,又能够正常的现实,还能获取我一开始在servlet中设置的session里面的值。
<!--StartFragment -->
感觉就好像servlet没有转到admin.jsp中,当是为什么servlet也能够显示那么多的???呢?希望老师能为我解决这个困惑??
---------------------------------------------- 一直被模仿,从未被超越!
[此贴子已经被admin于2010-12-12 18:09:07编辑过]
|