web前端开发遇到问题以及网站制作功能难题总结
闪灵科技(开发者团队)介绍:web前端开发遇到问题以及网站制作功能难题总结,需要将这些 Servlet 组件编译打包到一个 war 包,然后将该 war 包部署到 Servlet 容器 Tomcat 中。后续的客户端请求都是发送给 Tomcat ,然后由 Tomcat 根据请求的 URL 来判断需要是哪个应用的请求和请求哪个 URI 路径, 最后转发给对应的 Servlet 组件处理。
知识拓展:
Tomcat 是基于 Servlet 规范实现的 Servlet 容器,顾名思义,可以存放多个 Servlet 组件,故 Tomcat 中可以部署多个 Java Web 应用,每个应用由多个 Servlet 组件组成。
3 基于Servlet开发的痛点分析
基于 Servlet 开发 Java Web 应用是比较原始的开发方式,目前 Java 企业级应用一般很少直接使用这种方式,而是使用更高级的 Java Web 开发框架,如 Struts,SpringMVC 等,这些框架在内部封装了 Servlet 的相关细节,使得应用开发者只需要专注于业务开发即可。通过以上关于 Servlet 的介绍,我们可以总结出基于 Servlet 这种底层组件来开发 Java Web 应用存在以下痛点:
1.1 存在耦合
由以上 HelloWorldServlet 的定义可知,通过继承 HttpServlet 类,然后重写 HttpServlet 类根据 HTTP 请求类型定义的 doGet,doPost 等方法来实现业务逻辑的处理。这样就会导致应用业务逻辑与 Java 语言自身功能组件,即 Servlet 组件,存在耦合,不利于应用的拓展。
由于 Servlet 是以 HTTP 协议的请求类型维度来定义方法的,如果是业务逻辑复杂、存在大量 URL 的 Java Web 应用,则需要开发大量的 Servlet 类,不能做到在一个Servlet 类中定义多个不同 URL 的处理方法。
1.2 手动配置太多、可维护性差
需要在应用配置文件 web.xml 中配置每个 Servlet 和该 Servlet 的 URI 映射,所以如果应用存在大量的Servlet,则需要在 web.xml 中配置大量的 Servlet 和该 Servlet 的 URI 映射,使得 web.xml 文件内容太多,应用开发者维护难度大且容易配置出错,影响应用的可维护性;
1.3 部署困难
在部署层面,需要将 Java Web 应用打包为 war 包,然后部署到 Servlet 容器 Tomcat,故应用是运行在 Tomcat 进程的。同时由于可以在 Tomcat 部署多个 Java Web 应用,所以不能为每个应用都自定义相关的运行时参数,如配置 JVM 参数等来针对某个应用进行调优。
虽然可以通过在每个 Tomcat 进程只部署一个 Java Web 应用来实现,但是这种方式需要在服务器部署多个 Tomcat 进程或者每个服务器都需要部署一个 Tomcat 进程,额外增加了运维的工作量和服务器资源开销,特别是在微服务架构非常流行的今天,一个大型系统可能由成百上千个服务组成,如果基于这种方式部署,则对运维来说简直就是噩梦。
1.4 基于SpringMVC开发Java web应用
以上介绍了基于 Servlet 开发 Java Web 应用的相关用法和痛点,其中一个就是由于 Servlet 组件提供的相关方法太过底层,导致存在应用业务逻辑与 Java 语言自身功能组件的耦合,另外就是需要在 web.xml 中配置每个 Servlet和该 Servlet 对应的 URI 的映射,所以不利于应用的拓展和维护。所以为了解决这个问题,Spring 开发团队提供了 SpringMVC 框架。
SpringMVC 框架的核心设计主要包括三部分:
使用一个统一的 DispatchServlet 来接收应用的所有请求 ,只需要在应用配置文件 web.xml 中配置该DispatchServlet 和其 URI 映射即可,其中 DispatchServlet 是使用模糊匹配 “/*” 来拦截针对该应用的所有请求。
在 SpringMVC 框架内部定义了 MVC 模型的实现,即请求处理控制器 Controller,视图 View,数据模型 Model。其中业务请求处理方法和对应的 URI 的映射是在请求处理控制器 Controller 定义的,方法是从业务的角度,而不是 HTTP 请求类型的角度来定义的,故可以在一个 Controller 定义多个请求处理方法来处理不同的业务请求,在每个方法中使用 @RequestMapping 注解来定义对应的 URI 映射,且每个方法可以根据业务含义来命名,从而增加了应用代码的可读性和可维护性。
相对于基于 Servlet 开发 Java Web 需要定义大量 Servlet 类,SpringMVC 框架减少了应用中需要维护的类的数量,降低了开发难度,以及降低了业务与 Java 语言自身功能组件的耦合。