Spring MVC源码解析:你需要了解的Servlet

网友投稿 590 2022-09-06

Spring MVC源码解析:你需要了解的Servlet

Spring MVC源码解析:你需要了解的Servlet

Servlet的那些特性

因为Spring MVC是基于Servlet进行扩展的,为了更好的理解源码,我们需要对Servlet有一些了解,我们先来用Servlet开发一个Web应用。

@WebServlet(urlPatterns="/index", initParams = { @WebInitParam(name = "library.name", value = "javashitang")})public class IndexServlet extends HttpServlet { private String libraryName; @Override public void init(ServletConfig config) throws ServletException { this.libraryName = config.getInitParameter("library.name"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter(); out.println("welcome to " + libraryName + " library"); }}

// 访问curl

在这个例子中我用@WebInitParam设置了Servlet的初始化参数,可以从ServletConfig中获取,当然你可以把这个初始化参数配置到web.xml中,就不演示了

当我们使用Servlet开发的时候,基本上一个是继承HttpServlet,重新对应的doGet,doPost方法即可

HttpServlet在Servlet的基础上,封装了许多Http协议相关的内容(将请求封装为HttpServletRequest,将响应封装为HttpServletResponse)。

Servlet接口定义如下,其中最要的就是Servlet的三个生命周期函数

public interface Servlet { void init(ServletConfig var1) throws ServletException; ServletConfig getServletConfig(); void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException; String getServletInfo(); void destroy();}

和servlet配置和容器相关的配置类

ServletConfig(获取Servlet的初始化属性)

每个servlet有一个ServletConfig对象用于向servlet传递部署时信息(例如,数据库相关的配置信息),而你不想把这个信息硬编码到servlet中(servlet初始化参数)用于访问ServletContext参数在部署描述文件中配置

ServletContext(获取容器的初始化属性)

每个Web应用有一个ServletContext用于访问Web应用参数(也在部署描述文件中配置)相当于应用中的一个公告栏,可以在这里放消息(称为属性),应用的其他部分也可以访问这些消息用于得到服务器信息,包括容器的名字和版本,以及所支持API的版本等

用Servlet开发Web应用时,执行流程如下

扩展机制

当有了Servlet规范之后,你基本不用关系Socket网络通信,Http协议相关的内容,只需要实现业务逻辑即可。大家的业务逻辑千奇百怪,所以要提供扩展点,让大家可以个个性化的配置。

Servlet规范提供了两种扩展机制,Filter和Listener

Filter(过滤器):允许你对接口的请求和响应做统一的定制化处理。如对请求和响应进行统一的编码,判断用户是否登陆,统计网站访问频率等.

Listener(-):是基于事件的一种扩展机制,在Servlet容器提供服务的过程中会发生各种个样的事件,如容器的启动关闭等。我们可以监听这些事件来做一些定制化的事情,如监听容器启动事件,初始化数据库连接等,监听容器关闭事件,关闭数据库连接等!

基于maven插件运行Servlet项目

以前我们调试web项目的时候,需要在本地-一个tomcat,为了项目的复用性,方便他人快速调试,这里演示一个用maven插件启动web项目的方法

maven7

在pom文件中加入如下配置

org.apache.tomcat.maven tomcat7-maven-plugin 2.2 8080 / UTF-8 tomcat7

执行如下命令即可启动

mvn tomcat7:run

maven8

alfresco-public alfresco-public-snapshots true daily beardedgeeks-releases servlet-learning org.apache.tomcat.maven tomcat8-maven-plugin 3.0-r1655215 8080 / UTF-8 tomcat8

在命令行中输入如下命令

mvn tomcat8:run

参考博客

maven插件 [1]https://zhuanlan.zhihu.com/p/31739991

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Windows AD域报表
下一篇:Qt实现多国语言切换
相关文章

 发表评论

暂时没有评论,来抢沙发吧~