大家好,今天分享一下 servlet 的原理
可以看这个(如果从流程的角度上去解释)
或者这个
看的懂哪个看哪个
如果是从代码实现的角度上
servlet的核心就是在服务器端创建用户请求的对象
我在下面使用大白话讲一遍
用户通过浏览器访问网站
首先使用浏览器向网站的服务器发送http 请求
服务器使用servlet引擎来处理请求,然后会选择响应的servlet 来响应这个请求,并且将响应的结果交给浏览器
servlet 引擎访问servlet的过程分为两种情况
- 第一次访问
servlet 引擎创建servlet实例,之后定义servlet init 方法对servlet进行初始化,再调用servlet的service 方法来响应用户请求
2… 第二次访问
再次访问的时候,servlet引擎会自动检查servlet是否已经存在,如果存在,就直接调用servtice法来响应用户请求,不需要再进行初始化
servlet引擎在调用service方法之前,会创建request的请求对象以及response响应对象,service方法会读取request 请求信息,处理service请求,并将处理结果响应到响应对象response中
这就是service方法要做的工作,servlet引擎会将响应对象response中存放的信息通过浏览器发送给用户
在它的整个过程当中,有4 个生命周期
还有关于servlet 的位置层次的理解
接着上次的再来
hi ceshi.FirstServlet hi /hi
这是我们上次在web.xml 上写的代码
在这个里面,我们的注意点是
hi
/hi
这里的路径可以随便改的
第一个注意点就是
一个servlet可以映射一个地址(像这样)
hi
/hi
浏览器的处理结果:
http://localhost:8082/s01/ localhost 代表了我们自己的主机,8082 指的是我们tomcat服务器的端口(默认是8080 ,这是后改的)
s01 : 这是我们在使用idea 连接tomcat时自己配置的路径
这是servlet程序在浏览器上的结果(我们指定了一个映射路径)
同样,我们可以指定多个路径
我们添加了三个路径
hi ceshi.FirstServlet hi /hi01 hi /hi03 hi /hi04
这是hi01的路径
这是hi03的路径
这是hi04的路径
在一个servlet当中, 映射路径不可以重复(就是不可以有两个一样的)
否则将会报错
对于这个路径,我们也可以使用通配符
它的意思就是: 让规定路径下的任何资源,都可以走这个servlet
hi
/hi01/*
后面直接写上123 可以的
写上帅哥(帅哥)也可以
它的意思就是: 让规定路径下的任何资源,都可以走这个servlet
路径就写一个通配符的结果 ,就会提到原先的默认主页
这个带着通配符的路径是默认的请求路径,它的优先级也很高
模拟404 报错的网络资源请求
自己随意写一个类 (见名之意就可以了)
package ceshi;
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 ServletError extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
和上次一样
这就是一个完整的类
package ceshi;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class ServletError extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
resp.setCharacterEncoding("utf-8"); //防止乱码
resp.setContentType("text/html"); //文本类型
PrintWriter writer = resp.getWriter();
writer.print("404"); //这是浏览器当中用户可以看到的东西
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
同样,我们需要注册
hi ceshi.FirstServlet hi /hi01 hi /hi03 hi /hi04 error ceshi.ServletError error /*
关于404 的注册
error
ceshi.ServletError
error
/*
重启一下tomcat 服务器
后面怎么些都是对的,因为我们注册的时候使用了通配符
好了,有关于servlet 的原理以及应用就到这里了,谢谢大家



