1.Servlet技术
1.1 Servlet是什么
对于没有接触过Servlet程序的小伙伴在首次学习中,可能会有一个大大的疑问,什么是Servlet?
- Servlet是JavaEE规范之一,所谓规范就是接口。
- Servlet是JavaWeb三大组件之一。JavaWeb三个组件分别为:Servlet程序、Filter过滤器、Listener监听器。
- Servlet是运行在服务器上的一个java程序,它可以接收到客户端发送过来的请求,并响应数据给客户端。
1.2 手动实现第一个Servlet程序
- 手动实现第一个Servlet程序的步骤:
- 1.编写一个类去实现Servlet接口
- 2.实现service方法,处理请求,并响应数据
- 3.到web.xml中去配置servlet程序的访问地址
手动创建一个Servlet程序实现Servlet接口,实现service方法
public class HelloServlet implements Servlet {
/***
* service方法用来处理请求和响应的
* @param servletConfig
* @throws ServletException
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("HelloServlet被访问了");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
web.xml中配置servlet
<?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_4_0.xsd"
version="4.0">
<!--servelt标签给Tomcat服务器配置Servlet程序-->
<servlet>
<!--servlet-name标签:给Servlet程序起一个别名(一般是类名)-->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class是Servlet程序的全类名-->
<servlet-class>com.westos.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet-mapping标签:可以给servelt程序配置访问路径-->
<servlet-mapping>
<!--servlet-name标签的作用是告诉服务器,当前配置的地址给哪个Servlet程序使用-->
<servlet-name>HelloServlet</servlet-name>
<!--url-pattern标签配置访问地址
/ 斜杠表示服务器解析的时候,表示地址为:http://ip:port/工程路径
/hello 表示地址为:http://ip:port/工程路径/helloo
-->
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
</web-app>
在浏览器地址栏输入:
运行后的结果为:
1.3 url地址(浏览器地址栏输入的地址)到Servlet程序访问
从浏览器地址栏中输入的地址到Servlet程序访问过程可以用下图具体进行阐述。
1.4 Servlet的生命周期
Servlet内方法的执行顺序:
- 1.执行Servlet构造器方法
- 2.执行init初始化方法
注意:第1、2步,是在第一次访问的才会调用。
- 3.执行service方法
第3步,每次访问都会被调用。
- 4.执行destory方法
第4步,在web工程停止的时候调用。
1.5 Get和Post请求的分发处理
public class HelloServlet2 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service方法被执行了==HelloServlet被访问了");
//类型转换(因为转换后的类型具有getMethod()方法)
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
//获取请求的方式
String method = httpServletRequest.getMethod();
if (("GET").equals(method)) {
doGet();
}else if(("POST").equals(method)){
doPost();
}
}
/**
* 做get请求的操作
*/
public void doGet(){
System.out.println("get请求");
}
/**
*做post请求的操作
*/
public void doPost(){
System.out.println("post请求");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
运行后的结果为:
1.6 通过继承HttpServlet实现Servlet程序
上面实现Servlet接口不是特别方便,在一般实际项目中,都是使用继承HttpServlet类的方式去实现Servlet程序。
- 1.编写一个类去继承HttpServlet类
- 2.根据业务需要重写doGet或doPost方法
- 3.到web.xml配置文件中配置Servlet程序的访问地址
Servlet类的代码:
public class HelloServlet3 extends HttpServlet {
/***
* doGet()在get请求的时候进行调用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet3的doGet方法");
}
/***
*doPost()在post请求的时候调用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet3的doPost方法");
}
}
web.xml中的配置
<servlet>
<servlet-name>HelloServlet3</servlet-name>
<servlet-class>com.westos.servlet.HelloServlet3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet3</servlet-name>
<url-pattern>/helloServlet3</url-pattern>
</servlet-mapping>
运行后的结果为:
1.7 使用IDEA快速创建Servlet程序
1.8 Servlet类的继承体系
2.ServletConfig类
Servlet类从类名上来看,是Servlet程序的配置信息类。
Servlet程序和ServletConfig对象都是由Tomcat负责创建,我们只负责使用。
Servlet程序默认是第一次访问的时候创建,ServletConfig是每个ServletConfig是每个Servlet程序创建时,就会创建一个对应的ServletConfig对象。
ServletConfig类的三大作用:
- 1.可以获取Servlet程序的别名servlet-name的值
- 2.获取初始化参数init-param
- 3.获取ServletContext对象
Servlet中的代码:
public class HelloServlet4 extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init 初始化方法");
//1.可以获取Servlet程序的别名servlet-name的值
System.out.println("HelloServlet程序的别名是:"+config.getServletName());
//2.获取初始化参数init-param
System.out.println("初始话参数username的值为:"+config.getInitParameter("username"));
System.out.println("初始化参数url的值是:"+config.getInitParameter("url"));
//3.获取ServletContext对象
System.out.println(config.getServletContext());
}
}
web.xml中的配置:
<!--servlet标签给Tomcat配置Servlet程序-->
<servlet>
<!--servlet-name标签Servlet程序起一个别名(一般是类名)-->
<servlet-name>HelloServlet4</servlet-name>
<servlet-class>com.westos.servlet.HelloServlet4</servlet-class>
<!--init-param是初始化参数-->
<init-param>
<!--参数名-->
<param-name>username</param-name>
<!--参数值-->
<param-value>root</param-value>
</init-param>
<init-param>
<!--参数名-->
<param-name>url</param-name>
<!--参数值-->
<param-value>jdbc:mysql://localhost:3306/test</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet4</servlet-name>
<url-pattern>/helloServlet4</url-pattern>
</servlet-mapping>
3.ServletContext类
3.1 ServletContext概述
- 1.ServletContext是一个接口,它表示Servlet上下文对象。
- 2.一个web工程,只有一个ServletContext对象实例。
- 3.ServletContext对象是一个域对象。
- 4.ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁。
域对象,是可以像Map一样存取数据的对象,叫域对象。这里的域指的是存取数据的操作范围,为整个web工程。
存数据 | 取数据 | 删除数据 | |
---|---|---|---|
Map | put() | get() | remove() |
域对象 | setAttribute() | getAttribute() | removeAttribute() |
3.2 ServletContext类的四个作用
ServletContext类四个作用:
- 1.获取web.xml中配置的上下文参数context-param
- 2.获取当前的工程路径,格式:/工程路径
- 3.获取工程部署在服务器硬盘上的绝对路径
- 4.像Map一样存取数据
ServletContext代码配置上下文参数,当前工程路径,获取工程部署在服务器硬盘上的绝对路径:
public class HelloServlet5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取web.xml中配置的上下文参数context-param
ServletContext context = getServletConfig().getServletContext();
String username = context.getInitParameter("username");
System.out.println("context-param参数username的值是:"+username);
System.out.println("context-param参数password的值是:"+context.getInitParameter("password"));
//2.获取当前的工程路径,格式:/工程路径
System.out.println("当前工程路径:"+context.getContextPath());
//3.获取工程部署在服务器硬盘上的绝对路径
/**
* / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射在IDEA代码的web目录
*/
System.out.println("工程部署的路径在:"+context.getRealPath("/"));
}
}
web.xml配置文件中的配置:
<!--context-param是上下文参数(它是属于整个web工程)-->
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>root</param-value>
</context-param>
运行后的结果为:
ServletContext像Map一样存取数据:
public class ContextServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取ServletContext对象
ServletContext context = getServletContext();
System.out.println(context);
System.out.println("保存之前:Context获取key1的值为:"+context.getAttribute("key1"));
context.setAttribute("key1","value1");
System.out.println("Context1中获取域数据key1的值是"+context.getAttribute("key1"));
}
}
运行后的结果为:
4.HTTP协议
4.1 HTTP协议的概述
协议是指双方或者多方相互约定好的,大家都需要遵守的规则称为协议。
所谓HTTP协议,就是指客户端或者服务器之间通信时,发送的数据需要遵守的规则叫做HTTP协议。HTTP协议中的数据又叫做报文。
4.2 请求的HTTP协议格式
客户端给服务器发送数据称为请求。服务器给客户端回传数据称为响应。
请求又分为GET请求和POST请求。
4.2.1 GET请求
GET请求的具体组成部分 |
---|
1.请求行:(1)请求的方式 GET(2)请求的资源路径[+?+请求参数] (3)请求的协议的版本号:HTTP/1.1 |
2.请求头: key:value组成 不同的键值对,表示不同的含义 |
4.2.2 POST请求
POST请求的组成部分 |
---|
1.请求行:(1)请求的方式 POST (2)请求的资源路径[+?+请求参数] (3)请求的协议版本号:HTTP/1.1 |
2.请求头:key:value 不同的请求头,有不同的含义 |
空格 |
3.请求体======>>>>>就是发送到服务器的数据 |
4.3 常见的GET请求,POST请求
GET请求有哪些 |
---|
1.form标签 method=get |
2.a标签 |
3.link标签引入css |
4.Script标签引入js文件 |
5.img标签引入html页面 |
6.iframe引入html页面 |
7.在浏览器地址栏中输入地址后敲回车 |
POST请求有哪些 |
---|
1.form标签 method=post |
4.4 响应的HTTP协议格式
响应的HTTP协议格式 |
---|
1.响应行 (1)响应的协议和版本号(2)响应状态码 (3)响应状态描述符 |
2.响应头 key:value 不同的响应头,有不同的含义 |
空行 |
3.响应体=====》就是回传给客户端的数据 |
4.5 常用的响应码说明
常用响应码说明 |
---|
200:表示请求成功 |
302:表示请求重定向 |
404:表示请求服务器已经收到了,但是要的数据不存在(请求地址错误) |
500:表示服务器已经收到请求,但是服务器内部错误(代码错误) |
4.6 谷歌浏览器查看HTTP协议
谷歌浏览器查看HTTP协议:
附录
学习图片资源内容来源:
B站:尚硅谷2020最新版JavaWeb全套教程,java web零基础入门完整版
https://www.bilibili.com/video/BV1Y7411K7zz?
上为个人学习笔记