Servlet 是Java Web开发中重要的一个类
该类是一个接口,使用 Servlet 需要实现其中的方法
package study.demo.web;
import javax.servlet.*;
import java.io.IOException;
/**
* Servlet 是一个接口
* 使用 Servlet 需要实现其中的方法
*/
public class Servers implements Servlet {
/**
* 初始化方法
* 该方法 在Servlet被创建时执行 只会执行一次
* 该方法可以指定创建时间:
* 在 web.xml 中 <servlet>标签下 创建 <load-on-startup> 标签
* 该标签的值为负数 表示 在第一次访问时创建
* 该标签的值为正数 表示 在服务器启动后创建
*
* 注意:Servlet对象是单例模式,多个用户访问时可能会造成线程安全问题
* 解决:尽量不要在Servlet中操作成员变量
* @param servletConfig
* @throws ServletException
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init 执行成功");
}
/**
* 获取ServletConfig对象
* @return
*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* Servlet 入口方法
* 每一次Servlet被执行时 都会执行
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("我是Servlet的入口方法");
}
/**
* 获取Servlet的一些信息:版本、作者等等
* @return
*/
@Override
public String getServletInfo() {
return null;
}
/**
* 销毁方法
* 在服务器正常关闭时执行一次
*/
@Override
public void destroy() {
System.out.println("Servlet 关闭了");
}
}
根据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>
<servlet-name>demo1</servlet-name>
<servlet-class>study.demo.web.Servers</servlet-class>
</servlet>
<!--servlet访问的地址-->
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
</web-app>
以上是使用Servlet的方法
但实际中一般使用Servlet的子类:HttpServlet
HttpServlet类继承自Servlet 并且重新了Servlet类的方法
并且 HttpServlet 封装了 HttpServletRequest类和HttpServletResponse类
package study.web.day01;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 通过注解 代替web.xml配置路由
* @WebServlet() 该注解支持层级目录和通配目录
* @WebServlet("/xxx/xxx") : 多层级目录
* @WebServlet("/xxx/*") :多层级目录,并且文件名可以匹配所有
* @WebServlet("*.访问后缀") :匹配所有输入的路径,但是后缀需要定义,并且访问时需要匹配后缀
*/
@WebServlet("/demo1")
public class HttpServer extends HttpServlet {
/**
*
* @param req HttpServletRequest 请求对象
* @param resp HttpServletResponse 相应对象
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get...");
}
/**
*
* @param req HttpServletRequest 请求对象
* @param resp HttpServletResponse 相应对象
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post...");
}
/**
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.service(req, resp);
}
}
555