HTTP和Request笔记

## HTTP

        1、概念:Hyper Text Transfer Protocol 超文本传输协议

                * 传输协议:定义了客户端和服务端通信时,发送数据的格式

                * 特点:

                        1、基于TCP/IP的高级协议

                        2、默认端口号:80

                        3、基于请求/响应模型的,一次请求对应一次响应

                        4、无状态的:每次请求之间相互独立,不能交互数据

                * 历史版本:

                        * 1.0:每一次请求响应都会建立新的连接

                        * 1.1:复用连接

        2、请求消息数据格式

                1、请求行

                        请求方式 请求url 请求协议/版本

                        *请求方式:HTTP协议中有7种请求方式,常用的有2种

                                * GET:

                                        1、请求参数在请求行中,在url之后

                                        2、请求的url长度有限制的

                                        3、不太安全

                                * POST:

                                        1、请求参数在请求体中

                                        2、请求的url长度没有限制

                                        3、相对安全

                2、请求头:客户端浏览器告诉服务器一些信息

                        * 格式:         请求头名称:请求头值

                        *常见的请求头:

                                 1、User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息

                                       * 可以在服务器端获取该头的信息,解决浏览器的兼容性问题

                                 2、Referer: http://localhost/login.html

                                       * 告诉服务器,(当前请求)从哪里来

                                       * 作用:

                                                1、防盗链

                                                2、统计工作

                3、请求空行

                        就是一行空行,分割请求头和请求体的

                4、请求体

                        * 封装POST请求消息的请求参数的

                * 字符串格式:

POST /demo3 HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 17
Cache-Control: max-age=0
sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
Origin: http://localhost
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost/login.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=1381112E0583480CE8884D5D669D7248

username=zhangsan

        3、响应消息数据格式

## Request:

        1、request对象和respons对象的原理

                1、request和response对象是由服务器创建的,由我们来使用他们

                2、request对象是来获取请求消息,response对象是来设置响应消息的

        2、request对象继承体系结构:

                1、ServletRequest        --        接口

                                |    继承

                2、HttpServletRequest        --        接口

                                |    实现

                3、org.apache.catalina.connector.RequestFacade   类(tomcat)

        3、request:获取请求消息

                功能:

                        1、获取请求消息数据

                                1、获取请求行数据

                                        * GET /demo3?username=zhangsan HTTP/1.1

                                        * 方法:

                                                1、获取请求方式:GET

                                                        * String getMethod()

                                                2、(*)获取虚拟目录:

                                                        * String getContextPath()

                                                3、获取Servlet路径:/demo3

                                                        * String getServletPath()

                                                4、获取get方式请求参数:username=zhangsan

                                                        * String getQueryString()

                                                5、(*)获取请求URI:/虚拟目录/Servlet路径

                                                        * String getRequestURI():/虚拟目录/Servlet路径

                                                        * StringBuffer getRequestURL():http://localhost/虚拟目录/Servlet路径

                                                6、获取协议及版本:HTTP/1.1

                                                        * String getProtocol()

                                                7、获取客户机的IP地址

                                                        * String getRemoteAddr()

                                2、获取请求头数据

                                        * 方法:

                                                1、String GetHeader(String name):通过请求头的名称获取请求头的值

                                                2、Enumeration<String> getHeaderNames():获取所有的请求头名称

                                3、获取请求体数据

                                        * 请求体:只有POST请求方式才有请求体,在请求体中封装了POST请求的请求参数

                                        * 步骤:

                                                1、获取流对象

                                                        * BufferedReader getReader():获取字符输入流,只能操作字符数据

                                                        * ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据

                                                2、再从流对象中拿数据

                        2、其他功能:

                                1、获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数

                                        1、String getParameter(String name):根据参数名称获取参数值

                                        2、String[] getParameterValues(String name):根据参数名称获取参数值的数组

                                        3、Enumeration<String> getParameterNames():获取所有请求的参数名称

                                        4、Map<String,String[]> getparameterMap():获取所有参数的map集合

                                        * 中文乱码问题

                                                * get方式:tomcat 8 已经将get方式乱码问题解决了

                                                * post方式:会乱码

                                                        * 解决 :在获取参数前设置request的编码

request.setCharacterEncoding("utf-8");

                                2、请求转发:一种在服务器内部的资源跳转方式

                                        * 步骤:

                                                1、通过request对象获取请求转发器对象,RequestDispatcher getRequestDispatcher(String path)

                                                2、使用RequestDispatcher对象进行转发:forward(ServletRequest request,ServletResponse response)

                                        * 特点:

                                                1、浏览器地址栏路径没有发生变化

                                                2、只能转发到当前服务器内部资源中

                                                3、转发是一次请求

                                3、共享数据

                                        * 域对象:一个有作用范围的对象,可以在范围内共享数据

                                        * request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

                                        * 方法:

                                                1、void setAttribute(String name,Object obj):存储数据

                                                2、Object getAttribute(String name):通过键获取值

                                                3、void removeAttribute(String name):通过键移除键值对

                                4、获取ServletContext

                                        * ServletContext getServletContext()

## 总结案例:用户登录

        * 用户登录案例需求:

·                1、编写login.html登录页面

                        username & password 两个输入框

                2、使用Druid数据库连接池技术,操作mysql,test数据库中user表

                3、使用JdbcTemplate技术封装JDBC

                4、登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您

                5、登录失败跳转到FailServlet展示:登录失败,用户名或密码错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用JSP和Servlet来实现一个简单的笔记本功能。下面是一个简单的示例: 1. 首先,创建一个名为"index.jsp"的JSP文件,作为应用程序的入口点。在该文件中,你可以添加一个表单,用于用户输入笔记的标题和内容。例如: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>笔记本</title> </head> <body> <h1>笔记本</h1> <form action="NoteServlet" method="post"> <label for="title">标题:</label> <input type="text" id="title" name="title"><br><br> <label for="content">内容:</label> <textarea id="content" name="content"></textarea><br><br> <input type="submit" value="保存"> </form> </body> </html> ``` 2. 创建一个名为"NoteServlet"的Java Servlet,用于处理表单的提交和笔记的保存。在该Servlet中,你可以使用一个ArrayList来保存笔记。例如: ```java import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class NoteServlet extends HttpServlet { private List<Note> notes = new ArrayList<>(); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String title = request.getParameter("title"); String content = request.getParameter("content"); Note note = new Note(title, content); notes.add(note); response.sendRedirect("index.jsp"); } } ``` 3. 创建一个名为"Note"的Java类,用于表示笔记的标题和内容。例如: ```java public class Note { private String title; private String content; public Note() { } public Note(String title, String content) { this.title = title; this.content = content; } // getters and setters } ``` 这样,当用户在"index.jsp"页面填写笔记的标题和内容并点击保存按钮时,表单数据将会被提交到"NoteServlet",该Servlet会将笔记保存到"notes"列表中,并重定向回"index.jsp"页面。 请注意,这只是一个简单的实现示例,没有进行数据持久化和用户认证等功能。在实际应用中,你可能需要使用数据库来保存笔记,并添加用户认证和权限控制等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值