package com.txt.servlet;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
public class ServletDemo01 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service 方法执行了...");
}
}
<servlet>
<servlet-name>servletDemo01servlet-name>
<servlet-class>com.txt.servlet.ServletDemo01servlet-class>
servlet>
<servlet-mapping>
<servlet-name>servletDemo01servlet-name>
<url-pattern>/servletDemo01url-pattern>
servlet-mapping>


对象的生命周期,就是对象从出生到死亡的过程。官方说法就是对象创建到死亡的过程
出生:请求第一次到达 Servlet 时,对象就创建出来,并且初始化成功。指出生一次,将对象放到内存中
活着:服务器提供服务的整个过程中,该对象一直存在,每次都是执行 service 方法
死亡:当服务停止时,或者服务器宕机时,对象死亡
结论:Servlet 对象只会创建一次,销毁一次。索引 Servlet 对象只有一个实例。如果一个对象实例在应用中是唯一的存在,那么我们就称它为单例模式
由于 Servlet 采用的是单例模式,也就是整个应用中只有一个实例对象。所以我们需要分析这个唯一的实例对象中的类成员是否线程安全
结论:Servlet 是线程不安全的
解决:定义类成员要谨慎。如果是共用的,并且只会在初始化时赋值,其他时间都是获取的话,那么是没问题的。如果不是共用的,或者每次使用都有可能对其赋值,那就要考虑线程安全问题,可以将其定义到 doGet 或 doPost 方法内或者使用同步功能即可
<servlet>
<servlet-name>servletDemo04servlet-name>
<servlet-class>com.txt.servlet.ServletDemo04servlet-class>
servlet>
<servlet-mapping>
<servlet-name>servletDemo04servlet-name>
<url-pattern>/servletDemo04url-pattern>
servlet-mapping>
<servlet>
<servlet-name>servletDemo04servlet-name>
<servlet-class>com.txt.servlet.ServletDemo04servlet-class>
servlet>
<servlet-mapping>
<servlet-name>servletDemo04servlet-name>
<url-pattern>/servlet/*url-pattern>
servlet-mapping>
<servlet>
<servlet-name>servletDemo04servlet-name>
<servlet-class>com.txt.servlet.ServletDemo04servlet-class>
servlet>
<servlet-mapping>
<servlet-name>servletDemo04servlet-name>
<url-pattern>*.dourl-pattern>
servlet-mapping>
注意:优先级问题。越是具体的优先级越高,越是模糊通用的优先级越低。第一种 > 第二种 > 第三种
package com.txt.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 ServletDemo05 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 定义一个商品金额
int money = 1000;
//2. 获取访问资源路径
String path = req.getRequestURI();
path = path.substring(path.lastIndexOf("/"));
//3. 条件判断
if ("/vip".equals(path)){
System.out.println("商品原价为" + money + ",优惠后是:" + (money*0.9));
}else if ("/vvip".equals(path)){
System.out.println("商品原价为" + money + ",优惠后是:" + (money*0.5));
}else {
System.out.println("商品的价格为:" + money);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
<servlet>
<servlet-name>servletDemo05servlet-name>
<servlet-class>com.txt.servlet.ServletDemo05servlet-class>
servlet>
<servlet-mapping>
<servlet-name>servletDemo05servlet-name>
<url-pattern>/servlet/*url-pattern>
servlet-mapping>

标签中,添加 标签
/ ,我们在发送请求时,首先会在我们项目中的 web.xml 中查找映射配置,找到则执行。但是当找不到对应的 Servlet 路径时,就去找默认的 Servlet 处理。所以,一切都是 Servlet。