1.什么是Servlet
1.1 servlet是javaEE规范之一。规范就是接口
1.2 Servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序,Filter过滤器, Listener监听器。
1.3 Servlet是运行在服务器上的一个java小程序,它可以接收客户端发送过来的请求,
并响应数据给客户端。
2. 手动实现Servlet程序
2.1 编写一个类去实现Servlet接口
2.2 实现service方法,处理请求,并响应数据
2.3 到web.xml 中去配置servlet程序的访问地址
实现类实现servlet接口
package com.atguigu.servlet;
import javax.servlet.*;
import java.io.IOException;
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* service 方法是专门用来处理请求与响应的
*
* */
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Hello Servlet 被访问了");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
web.xml文件
<?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 标签给Servlet程序器一个别名(一般是类名 -->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class 是Servlet程序的全类名 -->
<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet-mapping 标签给Servlet程序配置一个访问地址 -->
<servlet-mapping>
<!-- servlet-name 标签的作用是告诉服务器,我当前配置的地址给哪个Servlet程序使用 -->
<servlet-name>HelloServlet</servlet-name>
<!-- url-pattern 标签配置访问地址
/斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径
/hello 表示表示地址为:http://ip:port/工程路径/hello <br/>
-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
常见错误1: url-pattern中路径没有以 / 开头;
常见错误2:servlet-name 配置的值不存在;
常见错误3:servlet-class标签 全路径名错误;
3. Servlet-url地址如何定位到Servlet程序去访问
4.Servlet的声明周期
1.执行Servlet构造器方法
2. 执行init初始化方法
第一、二步在第一次访问的时候创建Servlet程序会调用;
3. 执行service方法
第三步每次访问都会调用;
4. 执行destroy方法
第四步,在web工程停止的时候才会调用;
5. servlet请求分发处理
web 文件夹下新建html页面。
a.html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/06_servlet/hello" method="get">
<input type="submit">
</form>
</body>
</html>
访问地址:http://localhost:8080/06_servlet/a.html
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3. service === Hello Servlet 被访问了");
HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
String method = httpServletRequest.getMethod();
System.out.println(method);
if("GET".equals(method)){
doGet();
}else if("POST".equals(method)){
doPost();
}
}
public void doGet(){
System.out.println("Get请求");
System.out.println("Get请求");
}
public void doPost(){
System.out.println("Post请求");
System.out.println("Post请求");
}
6. 通过继承HttpServlet实现 Servlet程序
一般在实际项目开发中,都是使用继承HttpServlet类的方式去实现Servlet程序。
1. 编写一个类去继承HttpServlet类;
2. 根据业务需要重写doGet 或 doPost方法;
3. 到web.xml中配置 Servlet程序的访问地址;
package com.atguigu.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet2 extends HttpServlet {
/**
* doGet()在get请求时候调用
* */
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doGet方法");
}
/**
* doPost()在post请求时候调用
* */
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doPost方法");
}
}
web.xml文件
<?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>
<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>
</web-app>
7.通过IDEA生成Servlet程序
8. Servlet类的继承体系