1. servlet技术基本概念
1. 什么是servlet?
- servlet是接口:Interface servlet
- Servlet 就 JavaWeb 三大组件之一。 三大组件分别是: Servlet 程序、 Filter 过滤器、 Listener 监听器。
- Servlet 是运行在服务器上的一个 java 小程序, 它可以接收客户端发送过来的请求, 并响应数据给客户端
2. 手动实现 Servlet 程序
- 1、 编写一个类去实现 Servlet 接口
- 2、 实现 service 方法, 处理请求, 并响应数据
- 3、 到 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">
<!--可以理解为程序存储位置--><!--servlet标签给tomcat配置servlet程序-->
<servlet>
<servlet-name>HelloServlet</servlet-name> <!--给servlet程序起别名,一般是类名-->
<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class><!--servlet程序的全类名-->
</servlet>
<!--可以理解为服务器内部处理过程--><!--<servlet-mapping>给servlet程序配置访问地址-->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name> <!--告诉服务器,当前配置的地址是给哪个servlet程序使用的-->
<url-pattern>/hello</url-pattern><!--配置访问地址:http:ip:port/工程路径/hello-->
</servlet-mapping>
</web-app>
3. servlet生命周期
- step1、 执行 Servlet 构造器方法
- step2、 执行 init 初始化方法
- step1、step2是在第一次访问的时候执行,只执行这一次
- step3、 执行 service 方法
- step3 每次调用的时候都会执行
- step4、 执行 destroy 销毁方法
4. 实际开发中都是继承HttpServlet实现Servlet程序
- 1、 编写一个类去继承 HttpServlet 类
- 2、 根据业务需要重写 doGet 或 doPost 方法
3、 到 web.xml 中的配置 Servlet 程序的访问地址 ```java public class HelloServlet2 extends HttpServlet {
@Override public void init(ServletConfig config) throws ServletException {
super.init(config); System.out.println("重写了init初始化方法,做了一些工作");
}
/**
- doGet()在get请求的时候调用
- @param req
- @param resp
- @throws ServletException
@throws IOException */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { int i = 12 / 0; System.out.println(“HelloServlet2 的doGet方法”); // 也可以使用. ServletConfig servletConfig = getServletConfig(); System.out.println(servletConfig);
// 2、获取初始化参数init-param System.out.println(“初始化参数username的值是;” + servletConfig.getInitParameter(“username”)); System.out.println(“初始化参数url的值是;” + servletConfig.getInitParameter(“url”)); } /**
- doPost()在post请求的时候调用
- @param req
- @param resp
- @throws ServletException
- @throws IOException */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(“HelloServlet2 的doPost方法”); } }
web.xml配置:
```xml
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>com.atguigu.servlet.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
5. Servlet 类的继承体系
6. ServletConfig类
- 从名字上就可以知道是servlet程序的配置信息类
- 作用:
- 1、 可以获取 Servlet 程序的别名 servlet-name 的值 :
- 在httpServlet类中的init()方法中: String servletName = servletConfig.getServletName();
- 2、 获取初始化参数 init-param :
- String user = servletConfig.getInitParameter(“user”);
- 3、 获取 ServletContext 对象 :
- 1、 可以获取 Servlet 程序的别名 servlet-name 的值 :
- 作用:
7. ServletContext接口
- 概念
- ServletContext 是一个接口, 它表示 Servlet 上下文对象
- 概念
- 特点
- 一个 web 工程, 只有一个 ServletContext 对象实例
- ServletContext 对象是一个域对象
- 域对象, 是可以像 Map 一样存取数据的对象, 叫域对象
- 这里的域指的是存取数据的操作范围, 整个 web 工程
- ServletContext 是在 web 工程部署启动的时候创建。 在 web 工程停止的时候销毁
- 特点
- 作用
获取 web.xml 中配置的上下文参数 context-param
<!--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>
获取当前的工程路径, 格式: /工程路径
- 获取工程部署后在服务器硬盘上的绝对路径
像 Map 一样存取数据
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1、获取web.xml中配置的上下文参数context-param ServletContext context = getServletConfig().getServletContext(); String username = context.getInitParameter("username"); System.out.println("context-param参数username的值是:" + username); //context System.out.println("context-param参数password的值是:" + context.getInitParameter("password")); // root // 2、获取当前的工程路径,格式: /工程路径 System.out.println( "当前工程路径:" + context.getContextPath() ); // 3、获取工程部署后在服务器硬盘上的绝对路径 /** * / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到IDEA代码的web目录<br/> */ System.out.println("工程部署的路径是:" + context.getRealPath("/")); System.out.println("工程下css目录的绝对路径是:" + context.getRealPath("/css")); System.out.println("工程下imgs目录1.jpg的绝对路径是:" + context.getRealPath("/imgs/1.jpg")); }
二、Http协议
1. http协议基本概念
1. 什么是 HTTP 协议 ?
- HTTP 协议, 就是指, 客户端和服务器之间通信时, 发送的数据, 需要遵守的规则, 叫 HTTP 协议
- HTTP 协议中的数据又叫报文