【request,response】全面认识Servlet

一篇让你全面认识Servlet,对知识点进行通俗化

制作不易,如果觉得不错,请点赞收藏 !!!


目录

1.Servlet定义

2.Servlet的主要特点

3.Servlet执行流程

4.Servlet生命周期

5.HttpServlet原理

6.@GetMapping和HttpServlet的doGet()方法有什么异同

7.@WebServlet(urlPattern=""),urlPattern配置规则

8.Request和Response重点

9.Request

9.1  请求三要素

9.2  请求转发

10.Response

10.1  响应三要素

10.2  重定向


【与众不同】详细讲解过滤器和拦截器-CSDN博客文章浏览阅读1k次,点赞19次,收藏13次。Filter表示过滤器,是 JavaWeb三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能使用了过滤器之后,要想访问web服务器上的资源,必须先经过滤器,过滤器处理完毕之后,才可以访问对应的资源。过滤器一般完成一些通用的操作,比如:登录校验、统一编码处理、敏感字符处理等。是一种动态拦截方法调用的机制,类似于过滤器。拦截器是Spring框架中提供的,用来动态拦截控制器方法的执行。https://blog.csdn.net/2301_77358195/article/details/137073280

1.Servlet定义

Servlet是Java编写的服务器端程序,用于处理客户端的请求并生成响应。它运行在支持Java Servlet规范的Web服务器上,如Apache Tomcat。Servlet可以接收来自客户端的HTTP请求,
并根据请求生成动态的HTML页面或其他类型的响应。

再讲简单点就是
Servlet是java提供的一门动态web资源开发技术,就是通过后端的逻辑判断,可以根据不同请求,动态响应不同数据在页面上
相当于前端html,css等静态web资源开发技术

2.Servlet的主要特点


①. 独立于平台和协议:Servlet可以在不同的操作系统和Web服务器上运行,并且可以处理不同的协议,如HTTP、HTTPS等。
②. 动态生成内容:Servlet可以根据客户端请求的不同动态生成内容,例如生成HTML页面、XML数据等。
③. 多线程支持:Servlet容器会为每个请求创建一个线程,使得多个请求可以并发处理。
④. 生命周期管理:Servlet具有自己的生命周期,包括初始化、服务处理和销毁等阶段。

Servlet通常用于开发Web应用程序的后端逻辑,例如处理用户登录、注册、数据查询等功能。它可以与数据库进行交互、调用其他Java类库,并生成相应的响应返回给客户端。

3.Servlet执行流程


Servlet是一个接口,实现这个接口必须重写里面5个方法,其中一个重要的方法是service(ServletRequest req, ServletResponse res),这个方法是由tomcat创建Servlet对象并且调用

4.Servlet生命周期


①.加载和实例化:默认情况下,当Servlet第一次被访问时调用,由容器创建Servlet对象
②.初始化:在Servlet实例化后,容器将调用Servlet的init()方法初始化这个对象,完成一些加载配置文件.该方法只被调用一次
③.请求处理:每次发送请求Servlet是,容器就会调用Servlet的service()方法对请求进行处理
④.服务终止:当需要释放内存和容器关闭时,容器就会调用Servlet实例调用destory()方法,该方法只调用一次.destory()方法被调用后,容器会释放Servlet实例,
该实例会被垃圾回收机制回收

5.HttpServlet原理


获取请求方式,并根据不同的请求方式,调用不同的doXxx方法,继承HttpServlet,重写里面的doXxx方法


6.@GetMapping和HttpServlet的doGet()方法有什么异同

①.所属框架/类别

@GetMapping是Spring框架中的注解,用于处理Spring MVC中的请求映射;
doGet()方法是HttpServlet类中的方法,用于处理Java Servlet中的HTTP GET请求。


②.使用方式

@GetMapping注解需要标注在Controller类的方法上,指定处理特定请求路径的方法;
HttpServlet中的doGet()方法是覆盖了HttpServlet中的方法,用于处理GET请求。


③.参数传递

@GetMapping注解可以通过@RequestParam注解来获取请求参数;
对于HttpServlet中的doGet()方法,可以通过HttpServletRequest对象来获取请求参数。

7.@WebServlet(urlPattern=""),urlPattern配置规则

@WebServlet(urlPattern="")
urlPattern配置规则(优先级:精确路径 > 目录路径 > 拓展名路径 > /* > /)
①.精确匹配(/user/aa)
②.目录匹配(/user/*)
③.拓展名匹配(*.aa)注意*前面不能加/
④.任意匹配(/或者/*)可以匹配多级目录

8.Request和Response重点


Request:获取请求数据       发送请求时,tomcat会解析这个请求,并把请求封装到Request对象
Response:设置响应数据    服务端处理这次请求,然后设置响应的数据封装到Response对象,然后tomcat响应时会读取这个对象,然后在响应给浏览器

HttpServletRequest是一个接口,HttpServletRequest的实现类是由tomcat提供,因为打印System.out.println(request)是tomcat的实现类,
因此查看源码只需查HttpServletRequest

9.Request

9.1  请求三要素


请求行:请求方式 + 请求路径 + 协议 + 版本号
 http://localhost:8080/request-demo/req1?username=zhangsan&password=123
request.getMethod();     获取请求方式            get
request.getContextPath(); 获取虚拟目录(项目访问路径)    /request-demo
request.getRequestURL(); 获取URL(统一资源定位符)        http://localhost:8080/request-demo/req1
request.getRequestURI(); 获取URI(统一资源标识符)        /request-demo/req1
request.getQueryString(); 获取请求参数(GET方式)        username=zhangsan&password=123
请求头:客户端浏览器名称以及版本
request.getHeader(String name),比如:getHeader("user-agent")获取浏览器版本信息
请求体:Post请求存储的数据
request.getReader();       获取字符输入流,如果前端发送的是纯文本数据
request.getInputStream(); 获取字节输入流,如果前端发送的是字节数据,比如传递的是文件数据,则使用该方法

9.2  请求转发

请求转发(forward):一种服务器内部资源的跳转方式
实现方式:req.getRequest("另外一个资源的路径").forward(req,resp);
请求转发资源共享数据:使用request对象
setAttribute(String name,Object o):存储数据到request域中
getAttribute(String name) :根据key,取值
removeAttribute(String name) :根据key,删掉数据

资源转发特点:
①.浏览器地址栏不发生改变
②.只能转发到当前服务器的内部资源
③.一次请求,可以在转发资源间进行request数据共享


10.Response

10.1  响应三要素


响应行:协议 + 响应状态码 + 状态码描述
setStatus(int sc)                    设置响应状态码
响应头:响应数据格式(key-value)
setHeader(String name,String value)        设置响应头键值对
响应体:
response.getWriter();               获取字符输出流
response.getOutputStream();           获取字节输出流    
设置响应类型,以及支持中文编码
response.setContentType("text/html;charset=utf8");
注意:不需要关闭流,因为随着响应结束,response对象销毁,由服务器关闭

10.2  重定向

重定向(Redirect):一种资源跳转方式
实现方式:resp.setStatus(302);     302就是告诉浏览器是重定向
                  resp.setHeader("location","资源B的URI");
简化版:    resp.sendRedirect("资源B的URI");

重定向特点:
①.浏览器地址栏发生变化
②.可以重定向到任意位置的资源(服务器内部、外部都可以)
③.两次请求,不能在多个资源使用request资源共享


路径问题:
浏览器使用:需要加上虚拟目录
服务端使用:不需要加虚拟目录
 

  • 25
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值