【javaWeb】Servlet核心技术(上)

文章内容输出来源:拉勾教育JAVA就业训练营
总目录跳转链接:总目录
如有侵权请联系本人
邮箱:xiaogueika@tom.com

文章代码内容:https://gitee.com/akiaug/Servlet01


一、基本概念(常识)

1. C/S架构的概念(Client/Server,客户端/服务器模式)

  • C/S架构例子:QQ、英雄联盟、迅雷
  • C/S架构的主要优点如下
    1. 客户端的界面和功能可以很丰富。
    2. 应用服务器的负荷较轻。
    3. 响应速度较快。
  • C/S架构的主要缺点如下
    1. 适用面窄,用户群固定。
    2. 维护和升级的成本高,所有的客户端都需要更新版本。

C/S架构(Client/Server,客户端/服务器模式),是一种比较早的软件体系结构,也是生活中很常见的结构。这种结构将需要处理的业务合理地分配到客户端和服务器端,客户端通常负责完成与用户的交互任务,服务器通常负责数据的管理。

2. B/S架构的概念(Browser/Server,浏览器/服务器模式)

  • B/S架构例子:各大平台网站
  • B/S架构的主要优点如下
    1. 无需安装客户端,只要有浏览器即可。
    2. 适用面广,用户群不固定。
    3. 通过权限控制实现多客户访问的目的,交互性较强。
    4. 维护和升级的成本低,无需更新所有客户端版本。
  • B/S架构的主要缺点如下
    1. 应用服务器的负荷较重。
    2. 浏览器的界面和功能想要达到客户端的丰富程度需要花费大量的成本。
    3. 在跨浏览器上不尽如人意,适配比较麻烦。

B/S架构(Browser/Server,浏览器/服务器模式),是互联网兴起后的软件体系结构,该结构将系统功能实现的主要业务逻辑集中到服务器端,极少数业务逻辑在浏览器实现,浏览器通常负责完成与用户的交互任务,服务器通常负责数据的管理。

二、HTTP协议(熟悉)

  • HTTP协议(HyperText Transfer Protocol,超文本传输协议)是由W3C(万维网联盟)组织制定的一种应用层协议,是用来规范浏览器与Web服务器之间如何通讯的数据格式,主要涉及浏览器的发请求格式和服务器的响应格式。
  • HTTP协议通常承载于TCP协议之上,而承载于TLS或SSL协议层之上的协议就是常说的HTTPS协议。
  • HTTP默认的端口号为80,HTTPS默认的端口号为443

1. HTTP请求格式

客户端发送一个HTTP请求到服务器的请求消息主要包括:请求行请求头空白行请求体

  • 请求行用来说明请求类型和要访问的资源以及所使用的HTTP版本,格式如下:
    请求类型 请求的路径 协议的版本(1.1)

  • 请求头是紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息,格式(key:value)如下:
    主机 请求长度 请求的浏览器相关信息

  • 空白行就是请求头部的空行,即使后面的请求数据为空则必须有空行。

  • 请求体也叫请求数据,可以添加任意的其他数据。

  • HTTP请求格式例子

    POST /task01_demo01/demo1.html HTTP/1.1			//请求行
    Host: localhost:8088							//请求头
    Content-Length: 21								//请求头
    Cache-Control: max-age=0						//请求头
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64)	//请求头
    												//空白行
    name=scott&pwd=123456							//请求体
    

2. HTTP响应格式

通常情况下服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息,主要包括:响应行响应头空白行响应体

  • 响应行用来说明HTTP协议版本号状态码以及状态消息,格式如下:
    协议的版本(1.0 1.1) 状态码 (200 成功404 路径错误500 服务错误) 状态信息

  • 响应头用来说明客户端要使用的一些附加信息,格式(key:value)。

  • 空白行就是响应头部的空行,即使后面的请求数据为空则必须有空行。

  • 响应体用来服务器返回给客户端的文本信息。

  • HTTP响应格式

HTTP/1.1 200 OK				//响应行
Content-Type: text/html		//响应头
Content-Length: 588
Date: Thu, 08 Sep 2021 12:59:54 GMT
	//空白行
<html><head><title>示例1</title></head>	//响应体
<body><h1>这是一个HTML页面</h1></body>
</html>

三、Servlet的概念和使用(重点)

1. 基本概念

  • Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,是Java语言编写的服务器端程序,换句话说,Servlet就是运行在服务器上的Java类。
  • Servlet用来完成B/S架构下客户端请求的响应处理,也就是交互式地浏览和生成数据,生成动态Web内容。

2. Servlet的编程步骤

  1. 建立一个Java Web Application项目并配置Tomcat服务器。

  2. 自定义类实现Servlet接口或继承 HttpServlet类(推荐) 并重写service方法。

  3. 将自定义类的信息配置到 web.xml文件并启动项目,配置方式如下:

    <!-- 配置Servlet -->
    <servlet>
    	<!-- HelloServlet是Servlet类的别名 -->
    	<servlet-name> HelloServlet </servlet-name>
    	<!-- com.lagou.task01.HelloServlet是包含路径的真实的Servlet类名 -->
    	<servlet-class> com.lagou.task01.HelloServlet </servlet-class>
    </servlet>
    
    
    <!-- 映射Servlet -->
    <servlet-mapping>
    	<!-- HelloServlet是Servlet类的别名,与上述名称必须相同 -->
    	<servlet-name> HelloServlet </servlet-name>
    	<!-- /hello是供浏览器使用的地址 -->
    	<url-pattern> /hello </url-pattern>
    </servlet-mapping>
    

    市面上开发Servlet都使用注解方式创建,XML方式几乎很少看见了

    @WebServlet(name = "HelloServlet4",urlPatterns = "/hello4")
    				//HelloServlet4是Servlet类的别名	  //"/hello4"供浏览器使用的地址
    
    

3. 创建Servlet时继承的类/接口

3.1 Servlet接口

javax.servlet.Servlet接口用于定义所有servlet必须实现的方法。

常用的方法:

方法声明功能介绍
void init(ServletConfig config)由servlet容器调用,以向servlet指示servlet正在被放入服务中
void service(ServletRequest req,
ServletResponse res)
由servlet容器调用,以允许servlet响应请求
ServletConfig getServletConfig()返回ServletConfig对象,该对象包含此servlet的初始化和启动参数
String getServletInfo()返回有关servlet的信息,如作者、版本和版权
void destroy()由servlet容器调用,以向servlet指示该servlet正在退出服务

3.2 GenericServlet类

javax.servlet.GenericServlet类主要用于定义一个通用的、与协议无关的servlet,该类实现了Servlet接口。
若编写通用servlet,只需重写service抽象方法即可。

常用的方法:

方法声明功能介绍
abstract void service(ServletRequest req,
ServletResponse res)
由servlet容器调用允许servlet响应请求

3.3 HttpServlet类(开发中推荐该方式!)

javax.servlet.http.HttpServlet类是个抽象类并继承了GenericServlet类。
用于创建适用于网站的HTTP Servlet,该类的子类必须至少重写一个方法。

常用的方法:

方法声明功能介绍
void doGet(HttpServletRequest req,
HttpServletResponse resp)
处理客户端的GET请求
void doPost(HttpServletRequest req,
HttpServletResponse resp)
处理客户端的POST请求
void init()进行初始化操作
void service(HttpServletRequest req,
HttpServletResponse resp)
根据请求决定调用doGet还是doPost方法
void destroy()删除实例时释放资源

4. Servlet的生命周期

在这里插入图片描述

  • 构造方法只被调用一次,当第一次请求Servlet时调用构造方法来创建Servlet的实例。
  • init()方法只被调用一次,当创建好Servlet实例后立即调用该方法实现Servlet的初始化。
  • service()方法被多次调用,每当有请求时都会调用service方法来用于请求的响应。
  • destroy()方法只被调用一次,当该Servlet实例所在的Web应用被卸载前调用该方法来释放当前占用的资源。

四、POST和GET请求(重点)

1. GET请求

发出GET请求的主要方式:
	(1)在浏览器输入URL按回车
	(2)点击<a>超链接
	(3)点击submit按钮,提交 <form method=“get”>表单
GET请求特点:
	会将请求数据添加到请求URL地址的后面,只能提交少量的数据、不安全

2. POST请求

发出POST请求的方法如下:
	点击submit按钮,提交 <form method=“post”>表单
POST请求的特点:
	请求数据添加到HTTP协议体中,可提交大量数据、安全性好

3. Request接口(请求信息打包:客户端发送过来的请求信息)

PS:解决中文乱码:(tomcat8前GET和POST解决中文方式不同,tomcat8以后不需要GET方式)
POSTrequest.setCharacterEncoding("utf-8");
GET:String userName = new String(name.getBytes(“ISO-8859-1”),“utf-8");

3.1 ServletRequest接口

javax.servlet.ServletRequest接口主要用于向servlet提供客户端请求信息,可以从中获取到任何请求信息。
Servlet容器创建一个ServletRequest对象,并将其作为参数传递给Servlet的service方法。

常用的方法:

方法声明功能介绍白话
String getParameter(String name)以字符串形式返回请求参数的值,如果该参数不存在,则返回空值根据name找值,
String[] getParameterValues(String name)返回一个字符串对象数组,其中包含给定请求参数所具有的所有值,
如果该参数不存在,则返回空值
同上
Enumeration getParameterNames()返回包含此请求中包含的参数名称的字符串对象的枚举。
如果请求没有参数,则方法返回空枚举
找出所有键值
Map<String, String[]> getParameterMap()返回请求参数的键值对,一个键可以对应多个值找出键值对
String getRemoteAddr()返回发送请求的客户端或最后一个代理的IP地址客户端ip地址
int getRemotePort()返回发送请求的客户端或最后一个代理的端口号客户端端口

3.2 HttpServletRequest接口

javax.servlet.http.HttpServletRequest接口是ServletRequest接口的子接口,主要用于提供HTTP请求信息的功能。
不同于表单数据,在发送HTTP请求时,HTTP请求头直接由浏览器设置。
可直接通过HttpServletRequest对象提供的一系列get方法获取请求头数据。

常用的方法:

方法声明功能介绍白话
String getRemoteAddr()返回发送请求的客户端或最后一个代理的IP地址客户端ip地址
int getRemotePort()返回发送请求的客户端或最后一个代理的端口号客户端端口
String getRequestURI()返回此请求的资源路径信息项目路径
StringBuffer getRequestURL()返回此请求的完整路径信息网址地址
String getMethod()返回发出此请求的HTTP方法的名称,例如GET、POST请求类型
String getQueryString()返回路径后面请求中附带的参数get请求参数
String getServletPath()返回此请求中调用servlet的路径部分servlet的路径

4. Response接口(响应信息打包:向客户端发送响应)

PS:解决中文乱码:response.setContentType("text/html;charset=UTF-8");

4.1 ServletResponse接口

javax.servlet.ServletResponse接口用于定义一个对象来帮助Servlet向客户端发送响应。
Servlet容器创建ServletResponse对象,并将其作为参数传递给servlet的service方法。

常用的方法:

方法声明功能介绍白话
PrintWriter getWriter()返回可向客户端发送字符文本的PrintWriter对象
String getCharacterEncoding()获取响应内容的编码方式获取当前字符集
void setContentType(String type)如果尚未提交响应,则设置发送到客户端响应的内容类型。内容类型
可以包括字符编码规范,例如text/html;charset=UTF-8
改字符集

4.2 HttpServletResponse接口

javax.servlet.http.HttpServletResponse接口继承ServletResponse接口,以便在发送响应时提供特定于HTTP的功能。

常用的方法:

方法声明功能介绍白话
void sendRedirect(String location)使用指定的重定向位置URL向客户端发送临时重定向响应转到指定的页面

五、ServletConfig接口(熟悉)

javax.servlet.ServletConfig接口用于描述Servlet本身的相关配置信息,在初始化期间用于将信息传递给Servlet配置对象。

配置方式:
XML方式

<!-- 在web.xml中配置ServletConfig初始化参数 -->
<servlet>
	<servlet-name>actionservlet</servlet-name>
	<servlet-class>com.lagou.demo01.ActionServlet</servlet-class>
<!-- 配置 Serlvet 的初始化参数 -->
	<init-param>
		<!-- 参数名 -->
		<param-name>userName</param-name>
		<!-- 参数值 -->
		<param-value>admin</param-value>
	</init-param>
	<init-param>
		<param-name>password</param-name>
		<param-value>123123</param-value>
	</init-param>
</servlet>

注解方式

@WebServlet(name = "ConfigServlet",urlPatterns = "/config",
        initParams = { @WebInitParam(name = "userName", value = "admin"),
                @WebInitParam(name = "password",value = "123123")})

常用的方法:

方法声明功能介绍
String getServletName()返回Servlet的别名
String getInitParameter(String name)返回包含初始化参数值的字符串,如果该参数不存在,则返回null
Enumeration getInitParameterNames()将servlet的初始化参数的名称作为字符串对象的枚举返回,如果servlet没有初始化参数,则返回空枚举
ServletContext getServletContext()返回对调用方正在其中执行的ServletContext的引用

六、ServletContext接口(熟悉)

javax.servlet.ServletContext接口主要用于定义一组方法,Servlet使用这些方法与它的Servlet容器通信。
服务器容器在启动时会为每个项目创建唯一的一个ServletContext对象,用于实现多个Servlet之间的信息共享和通信。
在Servlet中通过this.getServletContext()方法可以获得ServletContext对象。

获取ServletContext对象的两种方式

ServletContext servletContext = getServletConfig().getServletContext();
ServletContext servletContext = this.getServletContext();

配置方式:
XML方式

<!--在web.xml中配置ServletContext初始化参数 -->
<context-param>
	<param-name>username</param-name>
	<param-value>admin</param-value>
<context-param>
<context-param>
	<param-name>password</param-name>
	<param-value>123123</param-value>
<context-param>

常用的方法:

方法声明功能介绍白话
String getInitParameter(String name)返回包含初始化参数值的字符串,如果该参数不存在,则返回null
Enumeration getInitParameterNames()将servlet的初始化参数的名称作为字符串对象的枚举返回,如果servlet没有初始化参数,则返回空枚举
String getRealPath(String path)返回包含给定虚拟路径的实际路径的字符串本地路径
String getContextPath()返回与此上下文关联的主路径
InputStream getResourceAsStream(String path)将位于指定路径的资源作为InputStream对象返回
void setAttribute(String name, Object object)将指定的属性名和属性值绑定到当前对象
Object getAttribute(String name)根据执行的属性名获取属性值
void removeAttribute(String name)删除指定的属性名信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值