Servlet笔记9--转发与重定向

关于Web中资源跳转的问题:

  转发和重定向基本代码:

 1 package com.bjpowernode.javaweb;
 2
 3 import java.io.IOException;
 4
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9
10 public class AServlet extends HttpServlet {
11
12     private static final long serialVersionUID = 1L;
13
14     @Override
15     protected void doGet(HttpServletRequest request, HttpServletResponse response)
16             throws ServletException, IOException {
17         //向request范围中存储数据
18         request.setAttribute("username", "zhangsan");
19
20         //转发forward:一次请求
21         //request.getRequestDispatcher("/b").forward(request, response);
22
23         //重定向redirect:两次请求
24         //执行到此处之后,将/prj-servlet-16/b路径响应给浏览器,浏览器又向服务器发送了一次全新的请求
25         response.sendRedirect("/prj-servlet-16/b");
26         //response.sendRedirect(request.getContextPath() + "/b");
27     }
28 }
 1 package com.bjpowernode.javaweb;
 2
 3 import java.io.IOException;
 4
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9
10 public class BServlet extends HttpServlet {
11
12     private static final long serialVersionUID = 1L;
13
14     @Override
15     protected void doGet(HttpServletRequest request, HttpServletResponse response)
16             throws ServletException, IOException {
17         //向request范围中取数据
18         Object obj = request.getAttribute("username");
19         System.out.println(obj);
20     }
21 }

  使用重定向解决页面刷新问题:

 1 <html>
 2     <head>
 3         <title>save user</title>
 4         <meta charset="UTF-8">
 5     </head>
 6     <body>
 7         <form action="/prj-servlet-17/save" method="post">
 8             usercode<input type="text" name="usercode">
 9             username<input type="text" name="username">
10             <input type="submit" value="save">
11         </form>
12     </body>
13 </html>
 1 package com.bjpowernode.javaweb.servlet;
 2
 3 import java.io.IOException;
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 import java.sql.PreparedStatement;
 7 import java.sql.SQLException;
 8
 9 import javax.servlet.ServletException;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13
14 public class SaveUserServlet extends HttpServlet {
15
16     private static final long serialVersionUID = 1L;
17
18     @Override
19     protected void doPost(HttpServletRequest request, HttpServletResponse response)
20             throws ServletException, IOException {
21         //解决中文乱码
22         request.setCharacterEncoding("UTF-8");
23
24         //获取表单提供的数据
25         String usercode = request.getParameter("usercode");
26         String username = request.getParameter("username");
27
28         //JDBC
29         Connection conn = null;
30         PreparedStatement ps = null;
31         int count = 0;
32         try{
33             Class.forName("com.mysql.jdbc.Driver");
34             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1", "root", "248xiaohai");
35             conn.setAutoCommit(false);
36             String sql = "insert into t_user(usercode,username) values(?,?)";
37             ps = conn.prepareStatement(sql);
38             ps.setString(1, usercode);
39             ps.setString(2, username);
40             count = ps.executeUpdate();
41             conn.commit();
42         } catch (Exception e) {
43             e.printStackTrace();
44         } finally {
45             if(ps != null){
46                 try {
47                     ps.close();
48                 } catch (SQLException e) {
49                     e.printStackTrace();
50                 }
51             }
52             if(conn != null){
53                 try {
54                     conn.close();
55                 } catch (SQLException e) {
56                     e.printStackTrace();
57                 }
58             }
59
60             if(count == 1){
61                 //保存成功,跳转到成功页面
62                 //转发,刷新的时候会重复保存数据,因为刷新的是第一个请求/prj-servlet-17/save
63                 //request.getRequestDispatcher("/success.html").forward(request, response);
64                 //重定向,刷新的时候不会重复保存数据,因为刷新的是后一个请求/prj-servlet-17/success.html
65                 response.sendRedirect(request.getContextPath() + "/success.html");
66             }
67         }
68     }
69
70
71 }
时间: 2024-12-28 23:52:20

Servlet笔记9--转发与重定向的相关文章

Servlet技术-请求转发,重定向和包含的关系

Web组件之间的关系包含3种,请求转发,URL重定向和包含 1.请求转发 请求转发允许把请求转发给同一应用程序的其他web组件,这种技术通常用于Web应用控制层的Servlet流程控制器,可检查HTTP请求的数据,并将请求转发到合适的目标组件,目标组件执行具体的请求处理操作并生成响应结果. 实例: 如果当前的Servlet组件要把请求转发给一个jsp组件,如hello.jsp,可在Servlet中的service方法中执行一下代码: RequestDispatcher rd=request.ge

Servlet 及 请求转发与重定向

Servlet: Java编写的服务器端程序,处理客户端的http请求并将其结果发送到客户端. Servlet容器Tomcat: 最熟悉的是容器就是tomcat.在tomcat中,server-包含-service-包含-connector+container+other 最核心的组件: Connector:接收TCP请求,创建response和request对象,分配线程给container处理 Container:servlet容器,责任链模式的子容器:engine--host--Conte

SERVLET API中转发与重定向的区别?

SERVLET API中转发与重定向的区别? 1.转发(forward方法) 转发仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址. 转发是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址. 2.重定向(sendRedirect方法) 重定向是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接.这样,从浏览器的地址栏中可以看到跳转后的链

servlet中的转发和重定向问题

重定向和请求转发在学习servlet的时候很容易混淆,故在此特意记录. 1. 重定向---------sendRedirect()方法 Servlet响应请求有两种方式,一个是重定向,返回一个页面给客户端,另一种方式是直接向客户端输出内容. 重定向功能是让浏览器重新发生请求,但是将请求的是另外一个Servlet. A.使用方法: response.sendRedirect("/ServletProject/fristServlet"). forward(request, respons

idea创建简单web项目分析Servlet的请求转发与重定向的区别

注:如需转载,请附上原文链接,如有建议或意见,欢迎批评指正! 需求说明: // index.jsp页面 1 <% 2 String basePath = request.getScheme()+":"+"//"+request.getServerName()+":"+request.getServerPort()+"/" 3 +request.getServletContext().getContextPath()+&q

Servlet到Servlet的请求转发与重定向的区别

Servlet跳转到另一个Servlet中: request.getRequestDispatcher().forward();代表默认的是post方法,即在被跳转的Servlet的doPost()方法中接收或写代码 response.sendRedirector()代表默认的是get方法.//因为重定向,又重新从页面发送请求到服务端

jsp servlet 的 请求转发和重定向

以前对于servlet和servlet/jsp之间的跳转路径问题感到很迷惑,今天亲自动手实验了一把,总结如下: servlet已经是项目根路径下面的资源了,所以servlet跳转的时候,在跳转路径上面可以加"/",也可以不加,加上表示从根路径下面开始找,用的是绝对路径, 不加"/"呢,表示是相对路径,因为本身servlet已经是根路径下面的资源了,所以能相对到项目中的任何路径下面去. jsp跳转(提交也是跳转)到servlet的时候加"/"还是不

SpringMVC转发和重定向区别!

在servlet中,转发和重定向是由request和response完成的.两者之间的区别请看我之前的文章.那么在springMVC中是如何完成的呢? /**转发**/ @RequestMapping("/login.do") public String login(HttpServletRequest request,HttpServletResponse response){ request.setAttribute("message", "hello

http页面转发和重定向的区别

一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下:request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jspresponse.sendRedirect("new.jsp");//重定向到new.jsp 在jsp页面中你也会看到通过下面的方式实现转发:<jsp:forward page="apage.jsp" /> 当