Servlet在Java中的作用
https://blog.youkuaiyun.com/qq_41142325/article/details/80059798
一、Servlet的生命周期
参考网址:https://www.cnblogs.com/fifiyong/p/6390805.html
(一)概念
1.Servlet的生命周期就是从Servlet出现到销毁的过程
2.主要分为5个阶段:加载类–>实例化(为对象分配空间)–>初始化(为对象的属性赋值)–>请求处理(服务阶段)–>销毁
3.其中加载和实例化阶段无法观察,但是初始化、服务、销毁阶段是可以观察的
4.因为都会调用方法,初始化阶段调用init方法,服务阶段调用service方法,销毁阶段调用destory方法
(二)特点
1.默认情况下Servlet是在第一次被访问的时候初始化的,初始化之后就进入服务阶段,关闭服务器的时候就可以销毁
2.也就是说当用户要使用的时候才创建Servlet,如下所示,服务器已经启动,但是没有运行访问的时候就没有进行初始化
3.也可以在服务器一启动服务的时候就创建好Servlet(这种方式一般不用),要实现这样的操作,只需要在web.xml文件中进行配置
<!-- 只需要在已有的servlet标签中添加load-on-startup这行代码即可 -->
<servlet>
<load-on-startup>1</load-on-startup>
</servlet>
二、Servlet的运行机制
关于Servlet和Tomcat的关系?以及为什么有Servlet?
https://blog.youkuaiyun.com/baidu_36583119/article/details/79642407
(一)简便概述
1.当发送一个请求到服务器端的时候,容器(Tomcat)会判断该路径属于哪一个Servlet进行处理(???)
2.Servlet有一个抽象父类"HttpServlet",这个类是一个模板设计模式的类,其中service方法是一个模板方法,当接受到请求之后容器会自动调用该方法判断用户的请求是什么类型
3.然后根据类型来确定需要调用的doXXX方法(钩子方法,有默认实现,子类如果有新的需求可以选择性的重写指定的方法,如果不重写则按默认实现)
4.service方法是一个模板方法,没有必要去重写父类的模板方法,而是根据需求在子类中重写在service方法中被调用的钩子方法
(二)具体实现
1.在WebContent目录下,创建一个index.html,制作一个简单表单
<body>
<!-- action填的路径名很重要,填错了无法获取到数据 -->
<form action="/ServletProject/emp" method="post">
<input type="text" name="username" value="张三">
<input type="password" name="pwd" value="1234">
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
2.EmpServlet类中重写doGet()和doPost()方法。本例中主要是实现通过重写doPost方法,获取到index.html中提交的表单数据
public class EmpServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("这是处理Get请求的方法");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// System.out.println("这是处理Post请求的方法");
//中文字符出现乱码的问题,可进行设置
req.setCharacterEncoding("utf-8");
//可以通过doPost方法获取到客户端提交的数据
String username = req.getParameter("username");
String pwd = req.getParameter("pwd");
System.out.println("用户名:"+username+",密码:"+pwd);
}
}
3.控制台成功打印出浏览器客户提交的数据