Servlet笔记9--转发与重定向
关于Web中资源跳转的问题:
转发和重定向基本代码:
package com.bjpowernode.javaweb; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class AServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//向request范围中存储数据
request.setAttribute("username", "zhangsan"); //转发forward:一次请求
//request.getRequestDispatcher("/b").forward(request, response); //重定向redirect:两次请求
//执行到此处之后,将/prj-servlet-16/b路径响应给浏览器,浏览器又向服务器发送了一次全新的请求
response.sendRedirect("/prj-servlet-16/b");
//response.sendRedirect(request.getContextPath() + "/b");
}
}
package com.bjpowernode.javaweb; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class BServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//向request范围中取数据
Object obj = request.getAttribute("username");
System.out.println(obj);
}
}
使用重定向解决页面刷新问题:
<html>
<head>
<title>save user</title>
<meta charset="UTF-8">
</head>
<body>
<form action="/prj-servlet-17/save" method="post">
usercode<input type="text" name="usercode">
username<input type="text" name="username">
<input type="submit" value="save">
</form>
</body>
</html>
package com.bjpowernode.javaweb.servlet; import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class SaveUserServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//解决中文乱码
request.setCharacterEncoding("UTF-8"); //获取表单提供的数据
String usercode = request.getParameter("usercode");
String username = request.getParameter("username"); //JDBC
Connection conn = null;
PreparedStatement ps = null;
int count = 0;
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1", "root", "248xiaohai");
conn.setAutoCommit(false);
String sql = "insert into t_user(usercode,username) values(?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, usercode);
ps.setString(2, username);
count = ps.executeUpdate();
conn.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(ps != null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if(count == 1){
//保存成功,跳转到成功页面
//转发,刷新的时候会重复保存数据,因为刷新的是第一个请求/prj-servlet-17/save
//request.getRequestDispatcher("/success.html").forward(request, response);
//重定向,刷新的时候不会重复保存数据,因为刷新的是后一个请求/prj-servlet-17/success.html
response.sendRedirect(request.getContextPath() + "/success.html");
}
}
} }
Servlet笔记9--转发与重定向的更多相关文章
- Servlet的请求转发和重定向
在学习servlet中对于转发和重定向的理解是非常重要的,但是常常把重定向和转发给混了,今天特地花点时间来总结以下. 一.servlet的转发 1.请求原理图如下所示: 2.可以简单理解转发就好比一 ...
- SERVLET API中转发与重定向的区别?
SERVLET API中转发与重定向的区别? 1.转发(forward方法) 转发仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址. 转发是服务器请求资源,服务器直接访问目标地址的 ...
- Servlet中的转发与重定向
Sevlet 的转发与重定向都可以使得浏览器指向另一个资源文件,但它们的运行机制不相同. 一.Servlet的转发 有两种方式获得转发对象(RequestDispathcer): HttpServle ...
- servlet中的转发和重定向问题
重定向和请求转发在学习servlet的时候很容易混淆,故在此特意记录. 1. 重定向---------sendRedirect()方法 Servlet响应请求有两种方式,一个是重定向,返回一个页面给客 ...
- idea创建简单web项目分析Servlet的请求转发与重定向的区别
注:如需转载,请附上原文链接,如有建议或意见,欢迎批评指正! 需求说明: // index.jsp页面 1 <% 2 String basePath = request.getScheme() ...
- servlet的请求转发与重定向
重定向: Spring的重定向 spring的请求转发:
- Servlet到Servlet的请求转发与重定向的区别
Servlet跳转到另一个Servlet中: request.getRequestDispatcher().forward();代表默认的是post方法,即在被跳转的Servlet的doPost()方 ...
- jsp servlet 的 请求转发和重定向
以前对于servlet和servlet/jsp之间的跳转路径问题感到很迷惑,今天亲自动手实验了一把,总结如下: servlet已经是项目根路径下面的资源了,所以servlet跳转的时候,在跳转路径上面 ...
- JavaWeb(一)Servlet中乱码解决与转发和重定向的区别
前言 前面其实已经把Servlet中所有的内容都介绍完了,这篇讲补充一点乱码和重定向与转发之间的区别! 一.request请求参数出现乱码问题 1.1.get请求 1)乱码示例 get请求的参数是在u ...
随机推荐
- BlogPublishTool - 博客发布工具
BlogPublishTool - 博客发布工具 这是一个发布博客的工具.本博客使用本工具发布. 本工具源码已上传至github:https://github.com/ChildishChange/B ...
- Data Plane
2015-2018,部分关于SDN数据平面的故障恢复文献粗读 SHEAR: A highly available and flexible network architecture marrying ...
- 学习Java并发的课程
https://www.javaspecialists.eu/courses/concurrency.jsp http://www.jconcurrent.com/ javaConcurrentAni ...
- Jmeter使用笔记之组件的作用域
以前一直使用loadrunner,最近入职新公司后需要使用jmeter,这里把使用过程中出现的一些问题进行总结,同时会和自己使用loadrunner的情况相比较,以后也会不断总结,GO! 一.组件的作 ...
- mysql 存储过程中结尾分割符修改
mysql中修改命令结束符delimiter的用法:mysql中的delimiter会告诉MySQL解释器,命令的结束符是什么,默认情况下MySQL的命令是以分号(;)结束的.在遇到(;)时,MySQ ...
- (转)CS0016: 未能写入输出文件
转自:http://www.pageadmin.net/article/20130305/537.html 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息 ...
- CF1110E Magic Stones(构造题)
这场CF怎么这么多构造题…… 题目链接:CF原网 洛谷 题目大意:给定两个长度为 $n$ 的序列 $c$ 和 $t$.每次我们可以对 $c_i(2\le i<n)$ 进行一次操作,也就是把 $c ...
- 置换群和Burnside引理,Polya定理
定义简化版: 置换,就是一个1~n的排列,是一个1~n排列对1~n的映射 置换群,所有的置换的集合. 经常会遇到求本质不同的构造,如旋转不同构,翻转交换不同构等. 不动点:一个置换中,置换后和置换前没 ...
- vmware:Could not open /dev/vmmon: No such file or directory.
Q: Could not open /dev/vmmon: No such file or directory. Please make sure that the kernel module `vm ...
- Python中的ujson模块
听说ujson比json模块快了很多,特来一试: # -*- coding: utf-8 -*- import json import ujson import time def cost_time( ...