Servlet总结

本文主要介绍了JavaWeb中的Servlet核心概念,包括Servlet的三大组件、生命周期、GET和POST数据的处理方式。通过实例展示了如何在Tomcat服务器上进行配置,并探讨了Servlet的继承体系,如ServletConfig和ServletContext的作用。此外,还详细解释了请求转发与重定向的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要知道javaWeb三大组件(Servlet程序 Listener监听器 Filter过滤器 都配置在web.xml文件下)

生命周期:
1先执行Servlet的构造方法
2执行Servlet程序的init初始化方法
以上两个方法是在第一次访问的时候由tomcat服务器来调用的~ 只调用一次

3执行Service方法:接受客户端请求 并且响应数据 每次请求进来的时候处理业务(每次访问都会调用~)
4执行destroy方法:服务器停止的时候调用

获取GET或者POST类型

1service方法中将ServletRequest强转成HttpServletRequest
2调用getMethod方法

实际开发中我们不实现Servlet接口 而是继承HttpServlet抽象类重写doGet doPost并且配置访问地址(可以直接用eclipse直接生成)

Servlet的继承体系:
在这里插入图片描述

 HttpServlet中的doGet doPost方法认实现是返回状态代码为405的HTTP错误,表示对于指定资源的请求方法不被允许。
 所以自己的Servlet程序需要进行重写并且重写时要去掉super.deget()之类的语句;

分隔~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ServletConfig 类: 封装了Servlet程序的配置信息 该对象是从Servlet的init方法中传递进来的~

ServletConfig对象的创造
(1)也可以从doGet doPost方法中getServletConfig获取到 因为父类GenericServlet持有了ServletConfig对象的一个引用~
并且在GenericServlet的init(ServletConfig)方法中初始化 所以在我们的子类的init方法中要调用super.init(ServletConfig);否则父类中的ServletConfig就不能得到初始化
(2)当然我也觉得可以在自己的类中写一个全局变量 直接将init中的ServletConfig赋值过去 但是没必要 也没人这么做
 
三大作用:
1获取Servlet程序在web.xml中配置的名称 getServletName
2获取在web.xml中配置的初始化参数(即web.xml中servlet init-param里的参数) getInitParameter
3获取ServletContext对象 getServletContext

分隔~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ServletContext对象:是一个接口 getServletcConfig .getServletContext(或者getServletContext)获取

1一个web工程中只要一个该对象的实例 由tomcat服务器创建
2是一个域对象,像map一样存储数据的对象
3操作范围是整个web工程
4在web工程启动的时候创建 在web工程停止的时候销毁~

作用:
1获取web.xml中配置的上下文参数<context-param>   getInitParameter
2获取到当前工程的工程名   getContextPath
3获取web工程发布到服务器上之后,文件或目录在服务器磁盘上的绝对路径  getRealPath
		/:在web工程中表示到http://ip:port/工程名/ 映射到WebContent目录
4域对象,像map一样存储数据的对象

HttpServletRequest:封装了所有请求过来的数据,由tomcat在每次请求进来时创建,然后传递给doGet或doPost方法使用 ,可以用它获取到所有请求的信息

1getRequestURI()				获取请求的资源路径(哪个工程下的哪个请求路径)
  getContextPath() 				 获取工程路径
2getRequestURL()				获取请求的统一资源定位符(协议+ip+port+请求资源路径)
3getRemoteHost()				获取请求的客户端ip地址
4getHeader()					获取请求头信息
5getParameter() 				获取请求参数值
6getParameterValues()			获取请求的多个值(常用于复选框和下拉列表多选)。
7getRequestDispatcher() 		获取请求的转发对象。转发请求(转发的请求和原请求共享request对象和response对象)
8getMethod()					获取请求的方式GET 或 POST
-----------------------HttpServletRequest也是域对象~----------------------
9setAttribute(key, value);	设置Request请求范围的属性值。
10getAttribute(key);  			获取Request请求范围的属性值。
----------------------------------------------------------------------------------------
11getCookies()					获取Cook对象
12getSession()					获取或创建Session对象
13getScheme()					获取协议
14getServerName()				获取服务器ip
15getServerPort()				获取服务器端口号

请求的转发:request.getRequestDispatcher().forward;

1浏览器地址栏中请求地址没有变化
2是一次请求
3共享request对象
4可以访问WEB-INF下的资源目录~!!!
5只能跳到当前工程下的资源~~

HttpServletResponse类

(1)作用:表示响应 所有返回给客户端的信息 都可以通过该类进行设置
(2)拥有两个输出流:两个流只能使用其中一个 同时使用两个 最后一个就会报错!~
			字节流:      getOutPutStream ()
			字符流:		getWriter()
(3)乱码解决问题 请看https://blog.youkuaiyun.com/weixin_40695328/article/details/89448072

请求重定向:
1客户端发送一个请求给服务器
2服务器设置响应状态码为302,设置响应头Location值为新的地址
3客户端收到响应后 发现响应状态吗为302 再次发送请求去访问新的地址
4收到新的地址的响应数据 展示在页面上

方式1:
(1)response.setStatus(302);
(2)response.setHeader("Location","....")
方式2:
response.sendRedirect("...");

请求重定向的特点:
		1浏览器地址栏有变化
		2是两次请求
		3不共享request域对象中的数据
		4不可以访问WEB-INF下的资源
		5可以访问站内或站外的资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值