JAVAEE_Servlet_19_重定向可以解决页面刷新问题(sendRedirect)
重定向可以解决页面刷新问题(sendRedirect)
在向数据库中添加数据的时候,如果使用转发(getRequestDispatcher),数据插入成功后,转发到提示插入成功页面,在数据插入成功页面刷新该页面,那么就会再次向数据库中添加一遍该数据,因为转发是一次请求,刷新一次添加一次数据。
如果使用重定向(sendRedirect),那么数据插入成功之后跳转到提示插入成功页面,此时刷新该页面,刷新的只是提示插入成功页面,因为重定向是两次请求。
代码:
向数据库中插入数据Servlet
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*; public class SaveServlet extends HttpServlet {
@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"); //创建数据库连接对象
Connection connection=null;
PreparedStatement preparedStatement=null; try {
// 连接数据库
Class.forName("com.mysql.cj.jdbc.Driver"); // 获取连接
connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
"root","123456"); // 获取预编译数据库操作对象
String sql="insert into t_user(usercode,username)values(?,?)";
preparedStatement=connection.prepareStatement(sql); //给预编译数据库操作对象插入值
preparedStatement.setString(1,userCode);
preparedStatement.setString(2,userName); //执行SQL语句
int count=preparedStatement.executeUpdate(); // 显示执行结果
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
if(count!=0){
out.print("数据插入成功,正在跳转...");
//转发
//request.getRequestDispatcher("/SearchServlet").forward(request,response);
//跳转
response.sendRedirect("/myWeb/SearchServlet");
} } catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}finally { //释放资源
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
- 提示成功页面,并把数据库中的数据显示出来的 Servlet
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
public class SearchServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决中文乱码问题
request.setCharacterEncoding("UTF-8");
//创建数据库连接对象
Connection connection=null;
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
try {
// 连接数据库
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取连接
connection= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
"root","123456");
// 获取预编译数据库操作对象
String sql="select * from t_user";
preparedStatement=connection.prepareStatement(sql);
//执行SQL语句
resultSet=preparedStatement.executeQuery();
//处理查询结果集
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
//HTML代码
out.print(" <!DOCTYPE html>");
out.print("<meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\"/> ");
out.print(" <head>");
out.print(" <meta charset='UTF-8'>");
out.print(" <title>用户信息</title>");
out.print(" </head>");
out.print(" <body>");
out.print(" <h3 align='center'>用户信息表</h3>");
out.print(" <hr width='60%'>");
out.print(" <table border='1' align='center' width='50%'>");
out.print(" <tr align='center'>");
out.print(" <th>序号</th>");
out.print(" <th>用户编号</th>");
out.print(" <th>用户姓名</th>");
out.print(" </tr>");
int i=1;
while(resultSet.next()){
String userCode=resultSet.getString("usercode");
String userName=resultSet.getString("username");
out.print(" <tr align='center'>");
out.print(" <th>"+(i++)+"</th>");
out.print(" <th>"+userCode+"</th>");
out.print(" <th>"+userName+"</th>");
out.print(" </tr>");
}
out.print(" </table>");
out.print(" </body>");
out.print(" </html>");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}finally {
//释放资源
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
JAVAEE_Servlet_19_重定向可以解决页面刷新问题(sendRedirect)的更多相关文章
- C# 中解决页面刷新后字体等变大问题
来源:http://blog.csdn.net/wcsjsdn/article/details/5109605 我们在.net开发中时常会遇到一个问题,那就是,当点击某个按钮后,调用js语句,当点击& ...
- vue路由传参的三种方式以及解决vue路由传参页面刷新参数丢失问题
最近项目中涉及到跨页面传参数和后台进行数据交互,看到需求之后第一反应就是用路由传参来解决:Vue中给我们提供了三种路由传参方式,下面我们一个一个的来看一下: 方法一:params传参: this.$r ...
- vue路由传参页面刷新参数丢失问题解决方案
最近项目中涉及到跨页面传参数和后台进行数据交互,看到需求之后第一反应就是用路由传参来解决:Vue中给我们提供了三种路由传参方式,下面我们一个一个的来看一下: 方法一:params传参: this.$r ...
- 解决angular2页面刷新后报404错误
如果你的angular项目部署到一个tomcat容器里面,localhost:8080是JavaWeb的主页,localhost:8080/driver/login是你angular2项目的登陆地址. ...
- AngularJS进阶(二十八)解决AngualrJS页面刷新导致异常显示问题
解决AngualrJS页面刷新导致异常显示问题 绪 俗话说,细节决定成败,编程亦是如此.编程过程中我们可能会不自觉的忽视一些细节问题,殊不知,这些细节正是导致页面显示出现问题的地方.今略举一例,与君共 ...
- vue 使用localStorage解决vuex在页面刷新后数据被清除的问题
通常,我们在使用vue编写页面时,会需要使用vuex在组件间传递(或者说共同响应)同一个数据的变化.例如:用户的登录信息. 下面,我们使用传递用户登录信息的例子来一步步解决这个问题. 首先,我们的第一 ...
- 2、vuex页面刷新数据不保留,解决方法(转)
今天这个问题又跟页面的刷新有一定的关系,虽然说跟页面刷新的关系不大,但确实页面刷新引起的这一个问题. 场景: VueX里存储了 this.$store.state.PV这样一个变量,这个变量是在app ...
- 【vue】使用localStorage解决vuex在页面刷新后数据被清除的问题
通常,我们在使用vue编写页面时,会需要使用vuex在组件间传递(或者说共同响应)同一个数据的变化.例如:用户的登录信息. 下面,我们使用传递用户登录信息的例子来一步步解决这个问题. 首先,我们的第一 ...
- 移动端点击返回时强制页面刷新解决办法(pageshow)
在做移动端项目的时候经常遇到这样一个功能比如: 返回后页面不刷新,一些失效的信息依然显示在页面上.这个问题在iphone手机上会出现,在Android手机上返回时会自动刷新(由于手机机器种类不多,无法 ...
随机推荐
- c# 打印面单
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { ...
- ajax缺点
ajax请求在SEO中效率低,SEO就是关键字搜索的匹配度. 比如在百度搜索Java,一般来说内容中出现Java的次数越多排名越靠前,当使用ajax时,它的异步刷新导致必须是页面刷新出来才去刷新数据, ...
- 为WebView 同步cookie
import android.os.Build;import android.text.TextUtils;import android.webkit.CookieManager;import and ...
- RabbitMQ(三) SpringBoot2.x 集成 RabbitMQ
3-1 RabbitMQ 整合 SpringBoot2.x 生产者发送消息 创建 SpringBoot 项目application.properties 配置 spring.rabbitmq.host ...
- 如何理解JavaScript中的函数
转: 如何理解JavaScript中的函数 JS中的函数简介 JS中的函数是一种通过调用来完成具体业务的一段代码块.最核心的目的是将可重复执行的操作进行封装,然后供调用方无限制的调用. JS中的函数的 ...
- Hi3559AV100板载开发系列-pthread_create()下V4L2接口MJPEG像素格式的VIDIOC_DQBUF error问题解决-采用阻塞方式下select监听
最近一直加班加点进行基于Hi3559AV100平台的BOXER-8410AI板载开发,在开发的过程中,遇到了相当多的问题,其一是板载的开发资料没有且功能不完整,厂家不提供太多售后技术支持,厂家对部分 ...
- Jacobi与SOR迭代法的实现与性能比较及均匀间距与Chebyshev插值的实现、性能分析及二者生成的插值误差比较
这篇文章给出(1)Jacobi与SOR迭代法的实现与性能比较及(2)均匀间距与Chebyshev插值的实现.性能分析及二者生成的插值误差比较,给出完整的实现代码,没有进行性能优化,仅供参考. (1)J ...
- 漫漫Java路1—基础知识—初涉java
前言 主学信息安全,在编程的路上还是一个孩子,还在一步一步探索,有些东西可能是站在自己的位置思考的,很可能会出现一些啼笑皆非的错误,如果有误,还希望各位斧正. Java安装 jdk的安装 甲骨文官网选 ...
- springAop:Aop(Xml)配置,Aop注解配置,spring_Aop综合案例,Aop底层原理分析
知识点梳理 课堂讲义 0)回顾Spring体系结构 Spring的两个核心:IoC和AOP 1)AOP简介 1.1)OOP开发思路 OOP规定程序开发以类为模型,一切围绕对象进行,OOP中完成某个任务 ...
- 【java框架】MyBatis(7)--MyBatis注解开发
1.MyBatis注解开发 1.1.Lombok的基本使用 Lombok是SpringBoot2.1.X版本与IDEA官方支持的一个插件,它是为简化POJO类中繁杂重复代码:geter/setter/ ...