jsp servlet拦截完成功近路class文件里resrequest.sendredirectt来显示一个页面

12920人阅读
这次涉及到四个文件:
登录页面:login.jsp
登录成功欢迎页面:success.jsp
登录失败页面:fail.jsp
Servlet处理文件:LoginServlet.java
其实还涉及到一个文件:web.xml,这个后面再说:
下面分别介绍这几个文件:
//--------------------------------------------------------------------------------------------------------------------
LoginServlet.java&& 内容:
package org.cai.
import java.sql.* ;
import java.io.* ;
import javax.servlet.http.* ;
import javax.servlet.* ;
public class LoginServlet extends HttpServlet implements Servlet{
&public LoginServlet(){
&protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
//&protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
//&&System.out.println(&-------------------------&) ;
//&&doPost(request, response) ;
&protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
&&response.setContentType(&text/charset=gb2312&) ;
&&request.setCharacterEncoding(&gb2312&) ;
&&String result = && ;
&&//获取用户名
&&String username = request.getParameter(&username&) ;
&&String psw = request.getParameter(&password&) ;
&&if ((username == &&) || (username==null) || (username.length() & 20 )){
&&&&result = &请输入用户名(不能超过20个字符)!& ;
&&&&request.setAttribute(&message& ,result) ;
&&&&response.sendRedirect(&login.jsp&) ;
&&&}catch(Exception e){
&&&&e.printStackTrace() ;
&&if ((psw == &&) || (psw==null) || (psw.length() & 20 )){
&&&&result = &请输入密码(不能超过20个字符)!& ;
&&&&request.setAttribute(&message& ,result) ;
&&&&response.sendRedirect(&login.jsp&) ;
&&&}catch(Exception e){
&&&&e.printStackTrace() ;
&&//登记JDBC驱动程序
&&&Class.forName(&org.gjt.mm.mysql.Driver&) ;
&&}catch(ClassNotFoundException e){
&&&e.printStackTrace() ;
&&&System.out.println(&Class Not Found Exception . &) ;
&&//连接URL
&&String url =&jdbc:mysql://localhost:3306/learnJSP& ;
&&Connection conn =
&&Statement stmt =
&&ResultSet rs =
&&&conn = DriverManager.getConnection(url, &root&, &root&) ;
&&&stmt = conn.createStatement() ;
&&&//SQL语句
&&&String sql =&select * from userInfo where username='&+username+&' and userpsw= '&+psw+&'& ;
&&&rs = stmt.executeQuery(sql) ;//返回查询结果
&&}catch(SQLException e){
&&&e.printStackTrace() ;
&&&HttpSession session =& request.getSession() ;
&&&session.setAttribute(&username&, username) ;
&&&//System.out.println(&+++++++++++++++++++++++&+ username) ;
&&&if (rs.next()){&//如果记录集非空,表明有匹配的用户名和密码,登陆成功
&&&&&& // 登录成功后将username设置为session变量的username
&&&&&&&&& // 这样在后面就可以通过 session.getAttribute(&username&) 来获取用户名,
&&&&&&&&& // 同时这样还可以作为用户登录与否的判断依据
&&&&session.setAttribute(&age&,rs.getString(&age&)) ;
&&&&session.setAttribute(&sex&,rs.getString(&sex&)) ;
&&&&session.setAttribute(&weight&,rs.getString(&weight&)) ;
&&&&response.sendRedirect(&success.jsp&) ;
&&&&session.setAttribute(&message&, &用户名或密码不匹配。&);
&&&&response.sendRedirect(&fail.jsp&) ;
&&}catch(SQLException e){
&&&e.printStackTrace() ;
&private static final long serialVersionUID = 1L;
//--------------------------------------------------------------------------------------------------------------------
login.jsp内容:
&%@ page language=&java& contentType=&text/charset=gb2312&%&
&&&title&登陆&/title&
&&&form method=&POST& name=&frmLogin& action=&LoginServlet&&
&&&&h1 align=&center&&用户登录&/h1&&br /&
&&&&center&
&&&&&table border=1&
&&&&&&&td&用户名:&/td&
&&&&&&&td&
&&&&&&&&input type=&text& name=&username& value=&Your name& size=&20& maxlength=&20& onfocus=&if (this.value=='Your name')& this.value='';& /&
&&&&&&&/td&
&&&&&&/tr&
&&&&&&&td&密&&码:&/td&
&&&&&&&td&
&&&&&&&&input type=&password& name=&password& value=&Your password& size=&20& maxlength=&20& onfocus=&if (this.value=='Your password')& this.value='';& /&
&&&&&&&/td&
&&&&&&/tr&
&&&&&&&td&
&&&&&&&&input type=&submit& name=&Submit& value=&提交& onClick=&return validateLogin()& /&
&&&&&&&/td&
&&&&&&&td&
&&&&&&&&input type=&reset& name=&Reset& value=&重置& /&
&&&&&&&/td&
&&&&&&/tr&
&&&&&/table&
&&&&/center&
&&&script language=&javascript&&
&&&function validateLogin(){
&&&&var sUserName = document.frmLogin.username.
&&&&var sPassword = document.frmLogin.password.
&&&&if ((sUserName ==&&) || (sUserName==&Your name&)){
&&&&&alert(&请输入用户名!&);
&&&&if ((sPassword ==&&) || (sPassword==&Your password&)){
&&&&&alert(&请输入密码!&);
&&&/script&
//--------------------------------------------------------------------------------------------------------------------
success.jsp 内容;
&%@ page language=&java& contentType=&text/charset=gb2312& pageEncoding =&gb2312&%&
&&&title&欢迎&/title&
&&&String userName = (String)session.getAttribute(&username&) ;
&&&String age = (String)session.getAttribute(&age&) ;
&&&String weight = (String)session.getAttribute(&weight&) ;
&&&String sex = (String)session.getAttribute(&sex&) ;
&&&System.out.println(&性别:A& + sex +&A&)& ;
&&&if (sex.trim().equals(&M&)) {
&&&&sex =&男& ;
&&&&sex = &女&&;
&&&div align=&center&&
&&&&%=userName %&
&&&欢迎您,登陆成功!&br /&
&&&&font color=&blue&&登陆用户信息:&/font&
&&&&table border =1 &
&&&&&&td&&姓名:&&/td&
&&&&&&td&&&&%=userName %&&&&/td&
&&&&&&td&&年龄:&&/td&
&&&&&&td&&&&%=age %&&&&/td&
&&&&&&td&&体重:&&/td&
&&&&&&td&&&&%=weight %&&kg&&/&
&&&&&&td&&性别:&&/td&
&&&&&&td&&&&%=sex %&&&&/&
&&&&/table&
&&&&a href=&login.jsp&&返回&/a&
//--------------------------------------------------------------------------------------------------------------------
fail.jsp 内容:
&%@ page language=&java& contentType=&text/charset=gb2312& pageEncoding =&gb2312&%&
&&&title&登陆失败&/title&
&&&String userName = (String)session.getAttribute(&username&) ;
&&&String msg& = (String)session.getAttribute(&message&) ;
&&&div align=&center&&
&&&&%=userName %&
&&&对不起,登陆失败!&br /&
&&&&font color=&red&&原因: &/font&
&&&&%=msg %&
&&&5秒后将返回登陆界面。
&&&&&response.setHeader(&Refresh&,&5;URL=/learnJSP/login.jsp&);&&
//--------------------------------------------------------------------------------------------------------------------
& mysql数据库中需要创建数据库learnJSP,其中创建表userInfo 创建表语句为:
& create database learnJSP ;
& use learnJSP
& create table userInfo(id int not null primary key,username char(20) not null,userpsw char(20) ,age int ,weight int ,sex enum('M','F')) ;
& 需要把连接mysql的jar包放到项目的lib目录中
//--------------------------------------------------------------------------------------------------------------------
web.xml 内容:
&?xml version=&1.0& encoding=&ISO-8859-1&?&
&!DOCTYPE web-app
&&& PUBLIC &-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&
&&welcome-file-list&
&&&welcome-file&index.jsp&/welcome-file&
&&/welcome-file-list&
&&servlet&
&&&&&&& &servlet-name&
&&&&&&&&&&& LoginServlet
&&&&&&& &/servlet-name&
&&&&&&& &servlet-class&
&&&&&&&&&&& org.cai.servlet.LoginServlet
&&&&&&& &/servlet-class&
&&& &/servlet&
&&& &servlet-mapping&
&&&&&&& &servlet-name&LoginServlet&/servlet-name&
&&&&&&& &url-pattern&/LoginServlet&/url-pattern&
&&& &/servlet-mapping&
&/web-app&
//--------------------------------------------------------------------------------------------------------------------
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:158435次
积分:2370
积分:2370
排名:第7668名
原创:72篇
转载:30篇
评论:44条
(2)(1)(1)(1)(3)(1)(1)(6)(3)(1)(4)(3)(3)(3)(2)(7)(1)(8)(4)(5)(5)(16)(5)(1)(3)(1)(2)(1)(1)(1)(5)(1)JAVA Web开发 &&&&最新内容
JAVA Web开发 &&&&随机内容本人最近学习java 过滤器 出现如下困惑问题
从一个jsp页面提交到某个Servlet后想实现一个跳转,使用的是response.sendRedirect这个方法
我工程结构如下,java类文件就无所谓了,主要是页面跳转找不到页面,奇怪的是不加过滤器都能找到,加上过滤器就不行了
test-
&&&& src-
&&&& webRoot-下有个login.jsp文件,还有一个我自己创建的test文件夹,在其内创建了一个error,ok,faild页面&&&
login.jsp 表单
&& &form action="HelloServlet" method="post"&
&&& 姓名 &input type="text" name="name"&
&&& 密码 &input type="password" name="pwd"&
&&& &input type="submit"&
&&& &/form&
HelloServlet doGet 如下
&&&&&&&&&&&&&&&&&&&& String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
HttpSession session=request.getSession();
if(name!=""&&name.equals("test")){
if(pwd!=""&&pwd.equals("test")){
session.setAttribute("userName", name);
response.sendRedirect("test/ok.html");
response.sendRedirect("test/error.html");
response.sendRedirect("test/faild.html");
}
web.xml 如下
&filter&
&filter-name&filterDemo&/filter-name&
&filter-class&com.filter.FilterDemo&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&utf-8&/param-value&
&/init-param&
&filter-mapping&
&filter-name&filterDemo&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&servlet&
&&& &description&This is the description of my J2EE component&/description&
&&& &display-name&This is the display name of my J2EE component&/display-name&
&&& &servlet-name&HelloServlet&/servlet-name&
&&& &servlet-class&test.HelloServlet&/servlet-class&
& &/servlet&
&servlet-mapping&
&&& &servlet-name&HelloServlet&/servlet-name&
&&& &url-pattern&/HelloServlet&/url-pattern&
& &/servlet-mapping&
主要问题就是经过过滤后就不能找到相应的页面路径了,我曾经输出过request.getContextPath(),想拼接路径也不行,感觉是相对路径,和绝对路径的问题
你最好发一下错误提示
因为那上面显示有你请求的页面路径
你在jsp的form 的action
&form action="&%=request.request.getcontextpath%&/HelloServlet" method="post"&
&&& 姓名 &input type="text" name="name"&
&&& 密码 &input type="password" name="pwd"&
&&& &input type="submit"&
&&& &/form&
response.sendRedirect("/faild.html";试试
已解决问题
未解决问题页面导航:
→ 正文内容 jsp 页面跳转
jsp下页面跳转的几种方法小结
jsp 页面跳转的几种方法,需要的朋友可以参考下。
1. RequestDispatcher.forward()  在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet或者是JSP到另外的一个Servlet、JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递. 但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面。  重定向后浏览器地址栏URL不变。  例:在servlet中进行重定向  public void doPost(HttpServletRequest request,HttpServletResponse response)  &&&&&&&&&&&&&&&&&&&&&&&&&&&&& throws ServletException,IOException{  response.setContentType("text/ charset=gb2312");  ServletContext sc = getServletContext();  RequestDispatcher rd =  rd = sc.getRequestDispatcher("/index.jsp"); //定向的页面  rd.forward(request, response);  }  通常在servlet中使用,不在jsp中使用。
2. response.sendRedirect()  在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.  重定向后在浏览器地址栏上会出现重定向页面的URL。  例:在servlet中重定向  public void doPost(HttpServletRequest request,HttpServletResponse response)  &&&&&&&&&&&&&&&&&&&&&&&&&&&&& throws ServletException,IOException{  response.setContentType("text/ charset=gb2312");  response.sendRedirect("/index.jsp");  }  由于response是jsp页面的隐含对象,故在jsp页面中可用response.sendRedirect()直接实现重定位。  注意:  (1) 使用response.sendRedirect时,前面不能有HTML输出;  这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制,一般在8K(我是说 JSP SERVER),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的HTML输出也是允许的。  (2) response.sendRedirect之后,应该紧跟一句return。  我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。  比较:  (1) Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;  (2) response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。  前者更加高效,在前者可以满足需要时,尽量使用RequestDispatcher.forward()方法。  在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使HttpServletResponse.sendRequest()方法。
3. <jsp:forward page="" />  它的底层部分是由RequestDispatcher来实现的,因此它带有RequestDispatcher.forward()方法的印记。  如果在之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。  注意:它不能改变浏览器地址,刷新的话会导致重复提交
4. 修改HTTP header的Location属性来重定向  通过设置直接修改地址栏来实现页面的重定向。  jsp文件代码如下:  <%  response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);  String newLocn = "/newpath/jsa.jsp";  response.setHeader("Location",newLocn);  %>
5. JSP中实现在某页面停留若干秒后,自动重定向到另一页面  在html文件中,下面的代码:  <meta http-equiv="refresh" content="300; url=target.jsp">  它的含义:在5分钟之后正在浏览的页面将会自动变为target.html这一页。代码中300为刷新的延迟时间,以秒为单位。targer.html为你想转向的目标页,若为本页则为自动刷新本页。  由上可知,可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。代码:  String content=stayTime+";URL="+URL;  response.setHeader("REFRESH",content);下面是其他网友的文章1. request.getRequestDispatcher("/admin.jsp").forward(request, response);//转发到admin.jsp 2. RequestDispatcher rd=request.getRequestDispatcher("/admin.jsp"); rd.forward(request, response); 3. getServletConfig().getServletContext().getRequestDispatcher("/admin.jsp").forward(request, response); 其它的方法当然可以用html js,的方法,需要jsp输出的,根据需要选择。
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行
12345678910您的邮箱:
请将您的邮箱作为登录账号
您的昵称:
4~30个字符,可以为中文
登陆密码:
6~30个半角字符
确认密码:
请再次输入密码
验 证 码 :
五种 JSP页面跳转方法详解
时间:  
作者:huhao; 
本文向您介绍Servlet页面跳转实现方法的几种区别,包括Servlet和JSP中的不同实现,比如Servlet中的redirect方式和forward方式得区别等。
1. RequestDispatcher.forward()
是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递. 但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面。
重定向后浏览器地址栏URL不变。
例:在servlet中进行重定向
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
response.setContentType("text/ charset=gb2312");
ServletContext sc = getServletContext();
RequestDispatcher rd =
rd = sc.getRequestDispatcher("/index.jsp"); //定向的页面
rd.forward(request, response);
通常在servlet中使用,不在jsp中使用。
2. response.sendRedirect()
是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.
重定向后在浏览器地址栏上会出现重定向页面的URL
例:在servlet中重定向
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
response.setContentType("text/ charset=gb2312");
response.sendRedirect("/index.jsp");
由于response是jsp页面中的隐含对象,故在jsp页面中可以用response.sendRedirect()直接实现重定位。
(1) 使用response.sendRedirect时,前面不能有HTML输出;
这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制,一般在8K(我是说 JSP SERVER),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的HTML输出也是允许的。
(2) response.sendRedirect之后,应该紧跟一句return。
我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。
(1) Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
(2) response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
前者更加高效,在前者可以满足需要时,尽量使用RequestDispatcher.forward()方法。
注:在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法。
3. <jsp:forward page="" />
它的底层部分是由RequestDispatcher来实现的,因此它带有RequestDispatcher.forward()方法的印记。
如果在之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。
另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交
4. 修改HTTP header的Location属性来重定向
通过设置直接修改地址栏来实现页面的重定向。
jsp文件代码如下:
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/jsa.jsp";
response.setHeader("Location",newLocn);
5. JSP中实现在某页面停留若干秒后,自动重定向到另一页面
在html文件中,下面的代码:
<meta http-equiv="refresh" content="300; url=target.jsp">
它的含义:在5分钟之后正在浏览的页面将会自动变为target.html这一页。代码中300为刷新的延迟时间,以秒为单位。targer.html为你想转向的目标页,若为本页则为自动刷新本页。
由上可知,可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。
关键代码:
String content=stayTime+";URL="+URL;
response.setHeader("REFRESH",content);
我要留言/评论
CopyRight ©
 京ICP备号

我要回帖

更多关于 jsp servlet 的文章

 

随机推荐