day47_servlet

今日内容

0 复习昨日

1 接收请求

2 处理响应

0 复习昨日

HTTP请求中

  • 请求行
    • 请求方法,请求路径
  • 请求头
    • 页面信息
  • 请求正文
    • 请求的数据

HTTP响应中

  • 响应行
    • 状态码 信息
  • 响应头
    • 页面信息
  • 响应正文
    • 要给浏览器的内容

1 接收请求

浏览器发出请求,经过web.xml映射匹配,找到Servlet对应的方法(doGet/doPost),接收请求数据,可以接收请求中的请求行,请求头,请求正文

  • 浏览器发出请求
    • a/form/ajax
  • 经过web.xml映射匹配
    • web.xml(8行代码)
  • doGet/doPost
    • 前端是get请求,就重写doGet
    • 前端是post请求,就重写doPost
  • 如何接收数据
    • 通过HttpServletRequest对象处理

需求: html页面中写一个表单,发送请求,后台服务器接收所有请求数据

1.1 编写页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--表单提交数据,一定要有name属性,后台服务器,就是name获得值------------------------点击提交,会以method指定的请求方式,将数据发送到action指定后台服务器action路径,建议是 /项目名/路径-->
<form action="/day47/req" method="get">用户名 <input type="text" name="username"><br>密码 <input type="password" name="password"><br>性别 <input type="radio" name="sex" value="1"><input type="radio" name="sex" value="2"><br>技能<input type="checkbox" name="skill" value="Java">Java<input type="checkbox" name="skill" value="JavaScript">JavaScript<input type="checkbox" name="skill" value="SSM">SSM<br>学历<select name="xueli"><option value="gaozhong">高中</option><option value="dazhuan">大专</option><option value="benke">本科</option></select><input type="submit" value="提交">
</form></body>
</html>

1.2 编写Servlet

package com.qf.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.util.Enumeration;/*** --- 天道酬勤 ---** @author QiuShiju* @desc*/
public class MyServlet extends HttpServlet {/**** @param req 处理请求的对象* @param resp 处理响应的对象* @throws ServletException* @throws IOException*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 请求方法String method = req.getMethod( );System.out.println("method = "+method);// 获得请求路径String requestURI = req.getRequestURI( );// 资源标识符StringBuffer requestURL = req.getRequestURL( ); // 资源定位符System.out.println("requestURI = " + requestURI);System.out.println("requestURL = " + requestURL);System.out.println("--------------------------------------" );// 接收请求头【了解】String host = req.getHeader("Host");System.out.println("host = " + host);Enumeration<String> keys = req.getHeaderNames( );while (keys.hasMoreElements()) {String key = keys.nextElement( );String value = req.getHeader(key);System.out.println(key + " : " + value);}System.out.println("--------------------------------------" );// 接收请求数据【重点】// 接收请求数据,无论单选,还是下拉框等都是getParameter(name);// name是前端标签name属性的值String username = req.getParameter("username");String password = req.getParameter("password");String sex = req.getParameter("sex");String xueli = req.getParameter("xueli");System.out.println("username = " + username);System.out.println("password = " + password);System.out.println("sex = " + sex);System.out.println("xueli = " + xueli);// 复选框// 如果一个没选,数组没有创建,是null,不是长度为0String[] skills = req.getParameterValues("skill");// 空指针异常,就是使用空对象调用属性和方法for (int i = 0; skills != null && i < skills.length; i++) {System.out.println("skill["+(i+1)+"] = " + skills[i]);}}
}

1.3 配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list><servlet><servlet-name>servlet</servlet-name><servlet-class>com.qf.servlet.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>servlet</servlet-name><!--此处不需要写项目名,只需要写请求路径--><url-pattern>/req</url-pattern></servlet-mapping>
</web-app>

1.4 部署项目

1.5 启动测试

2 做出响应

做出响应是通过HttpServletResponse对象

  • 响应行
    • 状态码
  • 响应头
    • 响应信息,其中有一个cookie后续会用到,以及编码格式
  • 响应正文
    • 向浏览器展现的内容
// 响应状态码// 200 是成功, 302 重定向 404 资源未找到 500 服务器错误// 一般不用设置,为自动响应// resp.setStatus(200);// 设置响应头// resp.setHeader("key","value");// 指定浏览器如何解析响应的内容,解决响应乱码resp.setContentType("text/html;charset=utf-8");// 向浏览器响应内容(响应正文)PrintWriter out = resp.getWriter( );out.write("<html>");out.write("     <head>");out.write("         <title>这是响应</title>");out.write("     </head>");out.write("     <body>");out.write("         <div style='background-color:red;width:500px;height:500px;font-size:50px'>");out.write("         这是响应,欢迎"+username);out.write("         </div>");out.write("     </body>");out.write("</html>");

3 乱码解决

请求乱码

 req.setCharacterEncoding("utf-8");

响应乱码

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

作业

画javaweb开发流程图
画servlet执行图
---------------------
前端html页面用户名+密码,
后端servlet接收数据
数据库根据数据查询用户
查询到,页面欢迎语
查询不到,页面展现登录失败信息-------------------------
复习JDBC
复习HTML(表单/表格) JS(语法/函数) JQuery(DOM)  Ajax(语法模板)

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

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

相关文章

STL容器之map和set

map和set ​ c98支持的是单参数的隐式类型转换&#xff0c;而c11支持多参数的隐式类型转换&#xff1b; 1.map和set的使用 1.1set ​ set实现key值不允许修改&#xff0c;是将iterator转变成const_iterator&#xff1b;可以对同一个类型typedef成两个不同的自定义标识符。即…

Rocky 9 安装 R-CytoTRACE

官网给出的详细指南&#xff0c;只是可能大家打不开或者懒得去看E文。 第一步&#xff0c;下载CytoTRACE安装包。 wget https://cytotrace.stanford.edu/CytoTRACE_0.3.3.tar.gz 第二步&#xff0c;打开R或者Rstudio-server # 安装依赖包 if (!requireNamespace("Bioc…

在vue中$nextTick 原理及作用

在vue中$nextTick 原理及作用 Vue 的 nextTick 其本质是对 JavaScript 执行原理 EventLoop 的一种应用。 nextTick 的核心是利用了如 Promise 、MutationObserver、setImmediate、setTimeout的原生 JavaScript 方法来模拟对应的微/宏任务的实现&#xff0c;本质是为了利用 Java…

每周AI新闻(2024年第9周)微软与Mistral AI达成合作 | 谷歌发11B基础世界模型 | 传苹果放弃电动汽车制造转向生成式AI

这里是陌小北&#xff0c;一个正在研究硅基生命的碳基生命。正在努力成为写代码的里面背诗最多的&#xff0c;背诗的里面最会写段子的&#xff0c;写段子的里面代码写得最好的…厨子。 每周日解读每周AI大事件。 大厂动向 【1】微软与Mistral AI达成合作 微软官宣与法国生成…

视频云平台——搭建SRS5平台支持GB28181视频流的推送

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;我们面对的不仅…

谨用ArrayList中的subList方法

谨用ArrayList中的subList方法 规范一&#xff1a; ArrayList 的 subList 结果不可强转成 ArrayList&#xff0c;否则会抛出 ClassCastException 异常&#xff1a; public static void test7() {List<Integer> list new ArrayList<>();list.add(1);list.add(2);…

JavaWeb—— SpringBootWeb综合案例(登录功能、登录校验、异常处理)

案例-登录认证 目录 案例-登录认证1. 登录功能1.1 需求1.2 接口文档1.3 思路分析1.4 功能开发1.5 测试 2. 登录校验2.1 问题分析2.2 会话技术2.2.1 会话技术介绍2.2.2 会话跟踪方案2.2.2.1 方案一 - Cookie2.2.2.2 方案二 - Session2.2.2.3 方案三 - 令牌技术 2.3 JWT令牌2.3.1…

程序员眼中的“祖传代码”

引言 在IT界&#xff0c;特别是在Java项目中&#xff0c;“祖传代码”通常指的是那些经过长时间积累、由多位开发者共同维护、且蕴含深厚技术沉淀的代码片段或模块。这些代码可能存在于项目的核心模块&#xff0c;也可能是一些辅助性的工具类。它们承载着项目的历史&#xff0…

Matlab 多项式插值(曲线拟合)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 由于对曲线拟合有些兴趣,这里就找了一些资料从最基本的方法来看一下曲线拟合的效果: 二、实现代码 % **********

Vue.js中的路由导航守卫和其使用方法

Vue.js 中的路由导航守卫是 Vue Router 提供的一套机制&#xff0c;用于在路由切换的过程中执行自定义代码逻辑&#xff0c;包括但不限于权限验证、页面滚动位置保存、加载数据等。它分为三种类型&#xff1a; 全局前置守卫 (Global beforeEach Guard) 全局前置守卫应用在整个…

python科学计算库之Numpy库的使用的简单习题

Numpy库 Numpy&#xff08;Numerical Python的缩写&#xff09;是一个开源的Python库&#xff0c;用于进行科学计算。它提供了一个高性能的多维数组对象&#xff08;ndarray&#xff09;及用于处理这些数组的各种工具和函数。由于其高效和灵活的数据结构以及丰富的功能&#x…

Google 地图 API 教程--干货(1/2)

Google Maps API 教程 在本教程中我们将学习如何使用谷歌地图API V3创建交互式地图。 什么是 API? API = 应用程序编程接口(Application programming interface)。 API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,…

【d34】【Java】【力扣】27. 移除元素

题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长…

案例介绍:汽车售后服务网络构建与信息抽取技术应用(开源)

一、引言 在当今竞争激烈的汽车行业中&#xff0c;售后服务的质量已成为品牌成功的关键因素之一。作为一位经验丰富的项目经理&#xff0c;我曾参与构建一个全面的汽车售后服务网络&#xff0c;旨在为客户提供无缝的维修、保养和配件更换服务。这个项目的核心目标是通过高效的…

spring、springmvc、springboot框架的介绍

前言 我们已经学过Spring&#xff0c;SpringMVC&#xff0c;SpringBoot了&#xff0c;那这三者之间有没有联系或者区别呢&#xff1f; spring是一个一站式的轻量级java开发的框架&#xff0c;那我们刚开始使用spring的时候&#xff0c;是需要配置很多的配置文件以及繁琐的过程…

状态机实现双击、短按、长按等按键识别检测算法

1、按键识别算法的作用 按键识别算法在不同的技术和应用背景下有不同的作用&#xff0c;但其核心目标都是准确、可靠地检测和区分用户通过物理或虚拟按键所执行的操作。按键识别算法在各类电子设备及系统中起到至关重要的作用&#xff0c;它确保了人机交互的有效性和准确性&…

Vue前端+快速入门【详解】

目录 1.Vue概述 2. 快速入门 3. Vue指令 4.表格信息案例 5. 生命周期 1.Vue概述 1.MVVM思想 原始HTMLCSSJavaScript开发存在的问题&#xff1a;操作麻烦&#xff0c;耦合性强 为了实现html标签与数据的解耦&#xff0c;前端开发中提供了MVVM思想&#xff1a;即Model-Vi…

Mysql-主从架构篇(一主多从,半同步案例搭建)

主从架构 主从架构有什么用&#xff1f; 通过搭建MySQL主从集群&#xff0c;可以缓解MySQL的数据存储以及访问的压力。 数据安全&#xff08;主备&#xff09;&#xff1a;给主服务增加一个数据备份。基于这个目的&#xff0c;可以搭建主从架构&#xff0c;或者也可以基于主…

GO语言学习笔记(与Java的比较学习)(九)

读写数据 读取用户的输入 最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数。 Scanln 扫描来自标准输入的文本&#xff0c;将空格分隔的值依次存放到后续的参数内&#xff0c;直到碰到换行。Scanf 与其类似&#xff0c;除了 Scanf 的第一个参数用作格式字符串&…

大数据开发(Java面试真题-卷三)

大数据开发&#xff08;Java面试真题&#xff09; 1、简要介绍以下JVM有几种垃圾收集器&#xff1f;2、Java中Synchronized的底层原理是什么&#xff1f;3、Java String为什么是不可变的&#xff1f;为什么要设计成不可变&#xff1f;4、泛型&#xff1f;5、常用的反射方法&…