Java复习第十七天学习笔记(转发、重定向,GET,POST),附有道云笔记链接

【有道云笔记】十七 4.3 转发、重定向、Get、POST、乱码
https://note.youdao.com/s/GD5TRksQ

一、转发

转发:一般查询了数据之后,转发到一个jsp页面进行展示

req.setAttribute("list", list);

req.getRequestDispatcher("student_list.jsp").forward(req, resp);

二、重定向

0

重定向:一般添加、删除、修改之后重定向到查找所有

resp.sendRedirect("/student");

重定向的状态码是302,重定向的地址最终是由浏览器发送这个请求

0

给超链接添加点击事件并触发:

<a href="javascript:void(0)" οnclick="method()"></a> <a href="javascript:;" οnclick="method()"></a> <a href="javascript:method();">xxx</a>

三、Get

  1. 采用URL请求路径传输参数,参数拼接在URL后面
  2. 参数传输过程中隐私性较差,直接在URL后面
  3. 路径可以容纳的数据有限,只能传递少量参数
  4. form表单请求默认就是get

http://localhost:8080/student?method=deleteById&id=23

http://localhost:8080/student?name=zhangsan&age=12&gender=男

Get方式传参,不是非得在form表单里面,可以手动写,在超链接的href里面直接在地址后面加?id=2

四、POST

  1. 采用实体内容传参数
  2. 参数在传输过程中不可见,隐私性好
  3. 实体内容专门用来传输数据,大小没有限制
  4. 使用:在form上加method="post"

0

不管是Get方式还是POST方式传参数,后台代码获取参数的方式都是一样的。

req.getParameter("name");

五、乱码问题总结

1、数据库创建时候选择utf-8编码

连接数据库url:

jdbc:mysql://localhost:3306/java?useUnicode=true&characterEncoding=UTF-8

2、解决post请求乱码问题 method="post"

0

req.setCharacterEncoding("UTF-8");

3、服务器响应浏览器的乱码问题:

resp.setContentType("text/html;charset=utf-8");

六、前台往后台发请求方式

  1. form表单
  2. 超链接删除
  3. location.href
  4. ajax

跳转到一个jsp页面的方式:

  1. 直接访问这个jsp页面 http://localhost:8080/student_update.jsp
  2. 访问servlet转发到这个页面

七、增删改查代码

//http://localhost:8080/index.jsp //http://localhost:8080/student @WebServlet("/student") public class StudentServlet extends HttpServlet { //默认访问service @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //System.out.println("StudentServlet.service"); //解决post请求乱码问题 req.setCharacterEncoding("UTF-8"); // http://localhost:8080/student?method=selectAll // http://localhost:8080/student?method=deleteById&id=23 String method = req.getParameter("method"); if (method == null || method.equals("")) { method = "selectAll"; } switch (method) { case "selectAll": selectAll(req, resp); break; case "deleteById": deleteById(req, resp); break; case "add": add(req, resp); break; case "toUpdate": toUpdate(req, resp); break; case "update": update(req, resp); break; } } private void update(HttpServletRequest req, HttpServletResponse resp) throws IOException { System.out.println("StudentServlet.update"); String id = req.getParameter("id"); String name = req.getParameter("name"); String age = req.getParameter("age"); String gender = req.getParameter("gender"); Connection connection = null; PreparedStatement preparedStatement = null; try { connection = JDBCUtil.getConnection(); String sql = "update student set name=?,age=?,gender=? where id=?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, name); preparedStatement.setInt(2, Integer.parseInt(age)); preparedStatement.setString(3, gender); preparedStatement.setInt(4, Integer.parseInt(id)); System.out.println(preparedStatement); int count = preparedStatement.executeUpdate(); System.out.println("count: " + count); } catch (SQLException throwables) { throwables.printStackTrace(); } resp.sendRedirect("/student"); } private void toUpdate(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("StudentServlet.toUpdate"); String id = req.getParameter("id"); Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; Student student = null; try { connection = JDBCUtil.getConnection(); String sql = "SELECT id,name,age,gender FROM student where id=?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, Integer.parseInt(id)); System.out.println(preparedStatement); resultSet = preparedStatement.executeQuery(); while (resultSet.next()) {//判断下一个有没有,如果返回true而且指向下一个,没有返回false //int id = resultSet.getInt("id"); String name = resultSet.getString("name"); int age = resultSet.getInt("age"); String gender = resultSet.getString("gender"); student = new Student(Integer.parseInt(id), name, age, gender); } } catch (SQLException throwables) { throwables.printStackTrace(); } finally { JDBCUtil.close(connection, preparedStatement, resultSet); } //把list数据放到req里面 req.setAttribute("student", student); //转发到student_list.jsp页面进行展示 req.getRequestDispatcher("student_update.jsp").forward(req, resp); } private void add(HttpServletRequest req, HttpServletResponse resp) throws IOException { System.out.println("StudentServlet.add"); String name = req.getParameter("name"); String age = req.getParameter("age"); String gender = req.getParameter("gender"); Connection connection = null; PreparedStatement preparedStatement = null; try { connection = JDBCUtil.getConnection(); String sql = "insert into student(name,age,gender) values(?,?,?)"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, name); preparedStatement.setInt(2, Integer.parseInt(age)); preparedStatement.setString(3, gender); System.out.println(preparedStatement); int count = preparedStatement.executeUpdate(); System.out.println("count: " + count); } catch (SQLException throwables) { throwables.printStackTrace(); } finally { JDBCUtil.close(connection, preparedStatement, null); } resp.sendRedirect("/student?method=selectAll"); } private void deleteById(HttpServletRequest req, HttpServletResponse resp) throws IOException { String id = req.getParameter("id"); Connection connection = null; PreparedStatement preparedStatement = null; try { connection = JDBCUtil.getConnection(); String sql = "delete from student where id=?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, Integer.parseInt(id)); System.out.println(preparedStatement); int count = preparedStatement.executeUpdate(); System.out.println("count: " + count); } catch (SQLException throwables) { throwables.printStackTrace(); } finally { JDBCUtil.close(connection, preparedStatement, null); } // /student 302 // 重定向 resp.sendRedirect("/student?method=selectAll"); } private void selectAll(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; List<Student> list = new ArrayList<>(); try { connection = JDBCUtil.getConnection(); String sql = "SELECT id,name,age,gender FROM student"; //预编译 preparedStatement = connection.prepareStatement(sql); System.out.println(preparedStatement); resultSet = preparedStatement.executeQuery(); while (resultSet.next()) {//判断下一个有没有,如果返回true而且指向下一个,没有返回false int id = resultSet.getInt("id"); String name = resultSet.getString("name"); int age = resultSet.getInt("age"); String gender = resultSet.getString("gender"); Student student = new Student(id, name, age, gender); list.add(student); } for (Student student : list) { System.out.println(student); } } catch (SQLException throwables) { throwables.printStackTrace(); } finally { JDBCUtil.close(connection, preparedStatement, resultSet); } //把list数据放到req里面 req.setAttribute("list", list); //转发到student_list.jsp页面进行展示 req.getRequestDispatcher("student_list.jsp").forward(req, resp); } }

student_list.jsp

<%@ page import="com.situ.web.pojo.Student" %> <%@ page import="java.util.List" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <link rel="stylesheet" href="static/bootstrap-3.4.1-dist/css/bootstrap.css"> </head> <body> <% //JSP页面中可以嵌套Java代码 //JSP脚本:在这里可以写任意的Java代码 //request、response:JSP页面的内置对象 List<Student> list = (List<Student>) request.getAttribute("list"); %> <a class="btn btn-primary" href="/student_add.jsp">添加</a> <table class="table table-striped table-bordered table-hover table-condensed"> <tr> <td>ID</td> <td>名字</td> <td>年龄</td> <td>性别</td> <td>编辑</td> <td>删除</td> </tr> <% for (Student student : list) { %> <tr> <td><%=student.getId()%></td> <td><%=student.getName()%></td> <td><%=student.getAge()%></td> <td><%=student.getGender()%></td> <td><a href="/student?method=toUpdate&id=<%=student.getId()%>">编辑</a></td> <%--/deleteStudent?id=12 --%> <%--<td><a href="/deleteStudent?id=<%=student.getId()%>">删除</a></td>--%> <%--<td><a href="/student?method=deleteById&id=<%=student.getId()%>">删除</a></td>--%> <td><a href="javascript:deleteById(<%=student.getId()%>)">删除</a></td> </tr> <% } %> </table> <script> function deleteById(id) { var isDelete = confirm('您确认要删除?'); if (isDelete) { location.href = '/student?method=deleteById&id=' + id; } } </script> </body> </html>

student_add.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="/student?method=add" method="post"> 用户名:<input type="text" name="name"/><br/> 年龄:<input type="text" name="age"/><br/> 性别:<input type="text" name="gender"/><br/> <input type="submit" value="添加"/> </form> </body> </html>

student_update.jsp

<%@ page import="com.situ.web.pojo.Student" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% Student student = (Student) request.getAttribute("student"); %> <form action="/student?method=update" method="post"> <input type="hidden" name="id" value="<%=student.getId()%>"/> 用户名:<input type="text" name="name" value="<%=student.getName()%>"/><br/> 年龄:<input type="text" name="age" value="<%=student.getAge()%>"/><br/> 性别:<input type="text" name="gender" value="<%=student.getGender()%>"/><br/> <input type="submit" value="修改"/> </form> </body> </html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/309456.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈函数 fscanf/sscanf 和 fprintf/sprintf

目录 一&#xff0c;fprintf 的介绍和使用1. 函数介绍2. 函数使用 二&#xff0c;fscanf 的介绍和使用1. 函数介绍2. 函数使用 三&#xff0c;sprintf 的介绍和使用1. 函数介绍2. 函数使用 四&#xff0c;sscanf 的介绍和使用1&#xff0c;函数介绍2&#xff0c;函数使用 五&am…

关于MCU产品开发参数存储的几种方案

关于MCU产品开发参数存储的几种方案 Chapter1 关于MCU产品开发参数存储的几种方案Chapter2 单片机参数处理[保存与读取]Chapter3 嵌入式设备参数存储技巧Chapter4 STM32硬件I2C的一点心得(AT24C32C和AT24C64C) Chapter1 关于MCU产品开发参数存储的几种方案 原文链接 在工作中…

【系统分析师】计算机网络

文章目录 1、TCP/IP协议族1.1 DHCP协议1.2 DNS协议1.3网络故障诊断 2、网路规划与设计2.1逻辑网络设计2.2物理网络设计2.3 分层设计 3、网络接入3.1 接入方式3.2 IPv6地址 4、综合布线技术5、物联网5.1物联网概念与分层5.2 物联网关键技术 6、云计算7、网络存储技术&#xff08…

C语言中局部变量和全局变量是否可以重名?为什么?

可以重名 在C语言中, 局部变量指的是定义在函数内的变量, 全局变量指的是定义在函数外的变量 他们在程序中的使用方法是不同的, 当重名时, 局部变量在其所在的作用域内具有更高的优先级, 会覆盖或者说隐藏同名的全局变量 具体来说: 局部变量的生命周期只在函数内部,如果出了…

AI来了,Spring还会远吗?(Spring AI初体验)

目录 一、创建项目二、first demo1、application.properties2、ChatController3、结果 三、个人思考 一、创建项目 官方文档的Getting Started 最低要求&#xff1a;JDK17 阿里云的Server URL&#xff08;https://start.aliyun.com/&#xff09;搜不到Spring AI&#xff0c;…

数据库:SQL分类之DQL详解

1.DQL语法 select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数 基本查询 条件查询&#xff08;where&#xff09; 聚合函数&#xff08;count、max、min、avg、sum &#xff09; 分组查询&…

C语言100道练习题打卡(1)

1 有1&#xff0c;2&#xff0c;3&#xff0c;4四个数字&#xff0c;能组成多少个互不相同且不重复的三位数&#xff0c;都是多少 #include<stdio.h> //有1&#xff0c;2&#xff0c;3&#xff0c;4四个数字&#xff0c;能组成多少个互不相同且不重复的三位数&#xff…

分享一些有趣的 Linux 命令

1、sl 会显示一辆火车穿过你的终端屏幕 2、cmatrix 在终端中显示类似于《黑客帝国》电影中的绿色数字雨效果 3、fortune 显示一个随机的名人名言或者笑话 4、cowsay 让一头牛说出你输入的话 5、toilet 在终端中将输入的文本以艺术字体的形式呈现 6、figlet 类似于 toile…

ssm051网上医院预约挂号系统+jsp

网上医院预约挂号系统设计与实现 摘 要 如今的信息时代&#xff0c;对信息的共享性&#xff0c;信息的流通性有着较高要求&#xff0c;因此传统管理方式就不适合。为了让医院预约挂号信息的管理模式进行升级&#xff0c;也为了更好的维护医院预约挂号信息&#xff0c;网上医院…

Vue入门:天不生Vue,前端万古如长夜 - Vue从入门到放弃

目录 &#x1f44b; Vue环境搭建 1.安装node.js 2.配置环境变量 3.VSCode配置 4.安装Vue CLI 5.在VS Code中打开Vue项目 6.运行Vue项目 &#x1f440; Vue基础学习 1.引入vue.js 2.数据方法 3.生命周期&#xff01; 4.模板语法 5.对象语法 6.条件渲染 7.列表渲…

简历上写熟悉Linux下常用命令?直接寄

大家写简历技术栈时&#xff0c;都觉得越多越好&#xff0c;其中一条&#xff0c;熟悉Linux下常用命令&#xff1f;其实开发中Linux不是必备考点&#xff0c;除了运维&#xff0c;真正用的多的仅仅cd ls mkdir等&#xff0c;但当面试官问到上面命令时&#xff0c;是不是就傻眼了…

Java使用OpenOffice将office文件转换为PDF

Java使用OpenOffice将office文件转换为PDF 1. 先行工作1.1 OpenOffice官网下载1.2 JODConverter官网下载1.3 下载内容 2.介绍3. 安装OpenOffice服务3.1.Windows环境3.2 Linux环境 4. maven依赖5. 转换代码 1. 先行工作 请注意&#xff0c;无论是windows还是liunx环境都需要安装…

基于深度学习的花卉检测系统(含PyQt界面)

基于深度学习的花卉检测系统&#xff08;含PyQt界面&#xff09; 前言一、数据集1.1 数据集介绍1.2 数据预处理 二、模型搭建三、训练与测试3.1 模型训练3.2 模型测试 四、PyQt界面实现参考资料 前言 本项目是基于swin_transformer深度学习网络模型的花卉检测系统&#xff0c;…

建模设计软件 Archicad 27 for mac激活版

在建筑设计领域&#xff0c;每一次技术的革新都意味着设计效率和质量的飞跃。Archicad 27 for Mac&#xff0c;就是这样一款引领行业变革的设计软件。 Archicad 27凭借出色的性能优化和强大的功能更新&#xff0c;为Mac用户带来了前所未有的建筑设计体验。它支持BIM&#xff08…

基于java的社区生活超市管理系统

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

低代码开发师中级实操题

目录 实操题一 1.创建空白应用 2.创建普通表单仓库库存表 3.创建客户信息表 4.创建进货登记表 5.创建出货登记表 6.设置数据联动 1&#xff09;进货登记表 2&#xff09;出货登记表数据联动 实操题二 1.提前下载好数据 2.新建空白应用 3.创建表单-员工信息录入名单…

26-51单片机-LCD12864液晶显示实验

一 主要涉及到的知识点: 1.1LCD12864 介绍: LCD12864 液晶屏结构上与 LCD1602 一样&#xff0c;只是在行列数与显示像素上区别很LCD12864&#xff0c; 以下简称 12864&#xff0c;注意区分 LCD1602 和 LCD12864。12864是 64行 128 列&#xff0c;当然也有可能会设 计成 64 列…

5-51单片机-蜂鸣器实验

一 主要涉及到的知识点: 1. 对系统默认的数据类型进行重定义,u8,u16; 2.延时函数,主要是将传过来的整数进行减减实现延时; 3.还用到了while()循环; 二 代码分析: 1. 首次定义一个变量,主要是为了延时蜂鸣器响亮的时长; 2.通过while()循环,使得Buzzer_Port产生脉冲信号,从而使蜂…

python-numpy(3)-线性代数

一、方程求解 参考资料 对于Ax b 这种方程&#xff1a; np.linalg.inv(A).dot(B)np.linalg.solve(A,b) 1.1 求解多元一次方程一个直观的例子 # AXB # X A^(-1)*B A np.array([[7, 3, 0, 1], [0, 1, 0, -1], [1, 0, 6, -3], [1, 1, -1, -1]]) B np.array([8, 6, -3, 1]…

嵌入式单片机 TTL电平、232电平、485电平的区别和联系

一、简介 TTL、232和485是常见的串口通信标准&#xff0c;它们在电平和通信方式上有所不同&#xff0c; ①一般情况下TTL电平应用于单片机外设&#xff0c;属于MCU/CPU等片外外设&#xff1b; ②232/485电平应用于产品整体对外的接口&#xff0c;一般是片外TTL串口转232/485…