企业级的Java开发目前都趋于成熟,如果一开始就着手基于框架的Java web开发,虽然开发日常需求CURD没有什么困难,但是在研究项目搭建时就会相对迷茫,为什么这样配置就可以达到效果呢?
框架帮我们做了很多时间,让我们只需要关注业务开发,而不需要了解具体项目搭建过程;
为了能让自己具备从项目创建到稳定业务需求开发的能力,就有必要了解下最原始的Java web 项目是怎么运作的;
Java Web 演变过程
Servlet –> Spring MVC –> Spring Boot –> Sping Cloud
Servlet:最开始的Java工程师应该都是全栈工程师,因为其不仅需要负责后台业务需求,还要负责前端界面开发,如JSP等,后台开发是一定要的;我将这个时候的Java web 理解为模式最简单的Java web ;
这个时候的Java web 一般都包括:前端JSP, 后端Listener,filter, servlet,以及Service,DAO等;
Spring MVC :Spring MVC 是一个专为Java web 开发打造的框架;提供了依赖注入,AOP 等重要技术简化开发;
随着互联网的发展,分工越来越细,伴随着移动互联网的发展,Java Web 不仅仅为浏览器的客户端提供服务,也为APP客户端提供接口服务;
后台开发就从之前的全栈解放出来,单纯的做后台开发;
Spring Boot : Spring MVC 的升级,虽然使用Spring MVC 已经简化了Java web的开发,但是还是有很多不方便的地方,比如web.xml的配置等,Spring boot 在Spring mvc 的基础上解决了xml配置等问题,也更加切合新的互联网后台开发模式。
工程结构
在解释后台开发开始之前,有必要了解下,项目的大概结构:
区别于普通的java项目 ,Java Web 项目目录下面有一个webapp的文件夹;
1 | -|webapp |
web.xml 可以用于配置icon?, display-name?, description?, distributable?,
context-param*, filter*, filter-mapping*, listener*, servlet*,
servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?,
error-page*, taglib*, resource-env-ref*, resource-ref*, security-constraint*,
login-config?, security-role*, env-entry*, ejb-ref*, ejb-local-ref*;
其中配置的顺序最好也是上面这个顺序,不然会有一个红色的报错,虽然不影响运行;
我们这里重点关注listener , filter ,servelet。
Listener
Listener 监听器:根据类型的不同可以分为三类:监听服务器的ServletContextListener,监听session的SessionListener,以及监听Request的RequestListener;
ServletContextListener
1 | public interface ServletContextListener extends EventListener { |
contextInitialized :监听服务,服务启动的时候会调用该方法;可以在该方法中做一些初始化操作,比如数据库驱动等;
contextDestroyed: 服务关闭调用该方法,用来释放资源;
可以有多个ServletContextListener的实现,执行的顺序,是web.xml配置的顺序。
SessionListener
1 | public interface HttpSessionListener extends EventListener { |
sessionCreated:监听会话Session创建
sessionDestroyed:监听会话Session销毁
SessionListener 主要作用用于记录页面访问量,当前访问人数。
RequestListener
1 | public interface ServletRequestListener extends EventListener { |
requestInitialized: 监听Request的创建
requestDestroyed: 监听Request的销毁
Filter
Filter :我这里将其过滤器,但是我在晚上查询到的资源有将其描述为“拦截器”;
1 | public interface Filter { |
Filter 不具备直接中断请求并返回响应给客户端的能力;通常最后将请求响应参数做一系列操作之后,执行FilterChain的doFilter(),放行请求,但是可以转发forward请教;
如果想起到拦截的作用,必须是在doFilter 不执行FilterChain的doFilter()方法;
Servlet
HttpServlet 请求最终被处理的地方,更加请求协议类型,复写相应的方法(doGet,doPost,doDelete等),并做相应的逻辑操作。
HttpServlet生命周期
init() :HttpServlet的实例,在第一次访问,被加载的时候会执行一次,后面再有请求访问,也不会在执行该方法;
doXxx():每次请求都将执行,用于编写业务需求;
destroy():服务器关闭时执行,不管服务器是正常关闭,还是强制关闭;
1 | <servlet> |
GitHub登录不了?信任该网站之后再登录。