Servlet的原理及其使用
1 servlet的体系结构
Servlet—>generservlet-- >httpservlet 接口 -> 抽象类 -> 抽象类
现在所学习的都是httpservlet;Httpservlet:对http协议的一种封装,简化了操作,不用我们自己判断前台传输的方式(post/get),它自己判断。然后自动的调用对用的方法来执行。
2 servlet的生命周期
servlet的执行流程:init初始化->运行service服务处理客户端的请求->调用destroy方法进行销毁->GC垃圾回收进行回收。
初始化init()方法只会被调用一次,在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用了。
Service()方法是执行任务的主要方法。Servlet容器(web服务器)调用service方法来处理客户端请求,并且处理完请求,把结果返回给客户端。
每次服务器接收到servlet请求时,服务器会产生一个线程,并调用service()服务方法。而在service方法中,会自动的检查客户端的http请求类型(post/get),并且在恰当的时机调用方法。
destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。
3 servlet的使用
创建servlet用来继承httpservlet,并且重写其中的方法。如4.2中的实例。并在对应的方法里面写上需要的代码即可。
4 Servlet配置
4.1 在web.xml中配置
<servlet>
<servlet-name>servlet name</servlet-name>
<servlet-class>具体对应的servlet的名称,全类名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet name</servlet-name>
<url-pattern>访问路径的url</url-pattern>
</servlet-mapping>
4.2 使用@webServlet配置
在类前添加@WebServlet(“url路径”)即可
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public TestServlet() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username=request.getParameter("username");
String password=request.getParameter("password");
System.out.println("这是账号与密码:"+username+" "+password);
if (username.equals("123")&&password.equals("123")) {
HttpSession session=request.getSession();
User user=new User(username,password);
session.setAttribute("user", user);
request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);
}else {
request.setAttribute("logerr", "账号密码错误");
request.getRequestDispatcher("Login.html").forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
4.3 servlet路径的配置
一个servlet可以配置多个请求路径,路径的配置也是有规则的。
- /xxx 表示接受请求路径为/xxx的请求,对他进行处理
- /xxx/xxx 表示为2层路径,同理:接受请求路径为/xxx/xxx的请求,对他进行处理
- *.do 表示以接受以 do 结尾的,任何路径开头的请求。如login.do或者regester.do等等。星号★ 表示匹配所有的路径。