✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:JAVA开发者成长之路
✨特色专栏:国学周更-心性养成之路
🥭本文内容:Java Servlet详解(补充,极其重要)
更多内容点击👇
Servlet与表单数据交互(如文本框、单选按钮、复选框、下拉列表等)
本文目录
- Servlet核心接口和类
- 【1】Servlet接口
- 【2】GenericServlet抽象类
- 【3】HttpServlet类
- Servlet两种创建方式
- 【1】实现Servlet接口
- 【2】继承HttpServlet(推荐使用)
- Servlet两种配置方式
- 【1】使用web.xml配置
- 【2】资源配置属性
- 【3】使用注解配置
- 【4】@WebServlet注解常用属性
Servlet核心接口和类
在Servlet体系结构中,除了第三节中讲的实现Servlet接口,还可以通过继承GenericServlet或HttpServlet类,完成自定义Servlet的编写。
【1】Servlet接口
在Servlet API中最重要的是Servlet接口,所有Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或间接继承自实现了该接口的类。该接口中包括以下5个方法:其中三个生命周期方法和两个普通方法。
destroy()
ServletConfig getServletConfig()
String getServletInfo()
void init(ServletConfig arg0)
void service(ServletRequest arg0, ServletResponse arg1)
【2】GenericServlet抽象类
GenericServlet使编写Servlet变得更容易。它提生命周期方法init和destroy的简单实现,要编写一般的Servlet,只需要重写service方法即可。
在 GenericServlet 中,主要完成了以下任务:
- 将 init() 中的 ServletConfig 赋给一个类级变量,可以由 getServletConfig 获得;
- 为 Servlet 所有方法提供默认实现;
- 可以直接调用 ServletConfig 中的方法;
public class ServletDemo2 extends GenericServlet {
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("heihei");
}
}
【3】HttpServlet类
HttpServlet是在继承GenericServlet的基础上进一步的扩展。提供将要被子类化以创建适用于Web站点的HTTP servlet的抽象类。
HTTPServlet的子类至少必须重写一个方法,该方法通常是:
- doGet():用于HTTP GET请求
- doPost():用于HTTP POST请求
- doPut():用于HTTP PUT请求
- doDelete():用于HTTP DELETE请求
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("haha");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("ee");
doGet(req,resp);
}
}
Servlet两种创建方式
【1】实现Servlet接口
使用这种方式创建Servlet类比较麻烦,需要重写Servlet接口中的所有方法
package com.cxyzxc.www.servlet01;
import javax.servlet.*;
import java.io.IOException;
/**
* 使用实现Servlet接口创建的Servlet类
*/
public class MyServlet01 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("使用实现Servlet接口创建的MyServlet类");
servletResponse.getWriter().println("Servlet is very interesting ");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
【2】继承HttpServlet(推荐使用)
package com.cxyzxc.www.servlet01;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 使用继承HttpServlet类创建的MyServlet类,开发中推荐使用这种方式
*/
public class MyServlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("使用继承HttpServlet类创建的MyServlet类");
resp.getWriter().println("Servlet is very funny ");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
Servlet两种配置方式
【1】使用web.xml配置
这种配置是Servlet2.5之前使用的
<?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>myServlet01</servlet-name>
<!-- Servlet的全称类名 -->
<servlet-class>com.cxyzxc.www.servlet01.MyServlet01</servlet-class>
<!-- 启动的优先级,数字越小越先起作用 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Servlet映射配置 -->
<servlet-mapping>
<!-- Servlet名称 -->
<servlet-name>myServlet01</servlet-name>
<!-- 资源的匹配原则:精确匹配 -->
<url-pattern>/servlet01</url-pattern>
</servlet-mapping>
</web-app>
【2】资源配置属性
url-pattern 定义匹配规则,取值说明:
匹配 | 名称 | 说明 |
---|---|---|
精确匹配 | /具体的名称 | 只有url路径是具体的名称的时候才会触发Servlet |
后缀匹配 | *.xxx | 只要是以xxx结尾的就匹配触发Servlet |
通配符匹配 | /* | 匹配所有请求,包含服务器的所有资源 |
通配符匹配 | / | 匹配所有请求,包含服务器的所有资源,不包括.jsp |
load-on-startup
1】元素标记容器是否应该在web应用程序启动的时候就加载这个servlet。
2】它的值必须是一个整数,表示servlet被加载的先后顺序。
3】如果该元素的值为负数或者没有设置,则容器会当servlet被请求时再加载。
4】如果值为整数或0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。
【3】使用注解配置
这种配置是Servlet3.0之后使用的,推荐使用这种方式
@WebServlet("/servlet02")
public class MyServlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("使用继承HttpServlet类创建的MyServlet类");
resp.getWriter().println("Servlet is very funny ");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
【4】@WebServlet注解常用属性
- name:Servlet名字(可选)
- value:配置url路径,可以配置多个
- urlPatterns:配置url路径,和value作用一样,不能同时使用
- loadOnStartup:配置Servlet的创建的时机,如果是0或者正数,启动程序时创建,如果是负数,则访问时创建。数字越小优先级越高。
码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。