从2019年学期初学习过一段时间的webServlet & jsp 习惯将使用 servlet 做的web项目教程servlet 项目,因为不像其他的web项目,会使用一些框架来表示项目,哈哈文章偏向知识总结,希望读者不是第一次接触。
servlet是Java 中的一个接口,查看接口的实现类只有两个抽象类为
GenericServlet 和 HttpServlet ,同时HttpServlet 继承了 GenericServlet
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
其中 ServletConfig getServletConfig(); 方法与其他方法不同,返回值类型ServletConfig,向下点ServletConfig,发现也是一个接口
public interface ServletConfig {
String getServletName();
ServletContext getServletContext();
String getInitParameter(String var1);
Enumeration<String> getInitParameterNames();
}
有意思的时查看接口的实现类同样为两个抽象类GenericServlet 和 HttpServlet ,查看GenericServlet抽象类的方法,都为对ServletConfig 的操作
private transient ServletConfig config;
(transient 的关键字为不对该对象进行序列化操作)
ServletConfig讲解
1.1、配置Servlet初始化参数
在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。
例如:
1 <servlet>
2 <servlet-name>ServletConfigDemo1</servlet-name>
3 <servlet-class>gacl.servlet.study.ServletConfigDemo1</servlet-class>
4 <!--配置ServletConfigDemo1的初始化参数 -->
5 <init-param>
6 <param-name>name</param-name>
7 <param-value>gacl</param-value>
8 </init-param>
9 <init-param>
10 <param-name>password</param-name>
11 <param-value>123</param-value>
12 </init-param>
13 <init-param>
14 <param-name>charset</param-name>
15 <param-value>UTF-8</param-value>
16 </init-param>
17 </servlet>
1.2、通过ServletConfig获取Servlet的初始化参数
当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,我们通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
原文连接 https://blog.csdn.net/durenniu/article/details/81066817
因此画图得出他们直接的关系。
并且从查看 GenericServlet 和 HttpServlet 源码来说,HttpServlet代码多,研究的重点,并且使用的重点在 HttpServlet。
#Servlet 生命周期
前提:在web.xml 配置了继承HttpServlet的类 或者加了在Servlet类上加了 @WebServlet注解
当前端发送 “/userlogin” 的请求,Servlet容器从web.xml中检查当前容器中有没有 响应该url的servlet ,如果没有则根据配置 url-pattern 找到servlet 然后根据配置的servlet-class去 类加载加载对应的类,去实例化该servlet类对象,同时根据<init-param>配置节信息创ServletConfig对象,然后执行Servlet对象,将ServletConfig作为参数调用init() 方法,完成初始化,service 中的doPost() 或doGet() 常用 doPut() 或doDelete() 方法去响应,当服务器结束后或者长期 service方法没有请求到调用 destroy()销毁servlet对象。
***注意,因此,servlet 默认是当去请求自己的url时,才会被创建,但可以通过设置web.xml中自己servlet的 load-on-startup 来修改成当 servlet容器创建时,也就是程序启动时,就创建servlet。
当这个servlet对象创建时,因为是继承HttpServlet ,HttpServlet 继承GenericServlet ,但两个负责的范围不同,GenericServlet根据方法可知,负责init() 和destroy(),HttpServlet 负责
service()部分。
servlet从业务的角度来说,属于controller 层中,作用对前端请求的处理响应,并去调用后端Java程序进行处理。servlet 的存在也相当于以后使用框架中使用 @Controller 或@ RestController 注解标识的cotroller类。
web.xml 和Webservlet(servlet的配置)
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>controller.Servlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>xxxx</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/userlogin</url-pattern>
</servlet-mapping>
扩展:在后面使用Springmvc的时,配置的springmvc.xml ,同时也是为一个servlet, 将所有的请求转交给 springmvc这个servlet 来处理。
使用springmvc框架时,配置的web.xml:
内容下次再写,时刻再补充,写的不对的,非常欢迎评论区评论,相互探讨。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。