什么是servlet:Javaweb中处理客户端请求的服务器端小程序
初学JavaWeb那会,最头疼的就是概念混淆,一直摸不准什么是servlet,只知道跟着网课模板复制代码,改一改参数就往Tomcat服务器里扔,项目能跑就万事大吉,压根没深究过它到底在程序里扮演什么角色。
最开始的认知特别肤浅,单纯以为servlet是一个高大上的开发框架,是做Web项目必须依赖的一套复杂工具。那段时间写代码全是机械操作,新建类继承HttpServlet,重写几个空方法,配置好web.xml映射路径,全程照猫画虎,代码写得毫无逻辑,出了问题也完全找不到根源。
折腾好久才搞明白,这是新手最容易踩的误区。servlet根本不是框架,它只是一套Java官方定义的接口,说白了就是一个能跑在服务器端的小型Java程序,专门用来对接前端请求、处理后台逻辑。
上次做用户登录实训项目,卡在核心环节整整一下午。前端写好了登录表单,账号密码输入完成点击提交,页面永远报错404,在本地服务器反复测试,改了十几次访问路径,检查了无数遍配置文件,始终无法正常接收数据。
完全摸不着头脑的时候,逐行翻看源码才发现问题。只重写了get请求的处理方法,表单提交默认post请求,对应的doPost方法是空的,没有任何处理逻辑。服务器接收到前端发来的请求后,找不到对应的执行代码,自然直接报错。
这就是servlet最核心的工作场景。Tomcat是服务器容器,只负责接收浏览器的网络请求,不会主动处理业务逻辑,所有的请求分发、数据接收、业务处理、结果响应,全部都是交给对应的servlet程序完成的。
它没有花哨功能。
所有JavaWeb项目的基础交互逻辑,全部依托servlet实现。我们后续学的SpringMVC、Struts这些主流框架,其实底层都是对servlet的封装和优化,只是简化了原生servlet繁琐的配置流程,不用再手动写大量映射配置、重复方法。
原生的servlet开发特别繁琐,每一个请求对应一个处理类,每一个类都要手动配置路径、重写对应方法,代码冗余度极高。但它是JavaWeb的根基,不懂servlet,后续学框架永远都是只会用、不懂原理的状态,稍微遇到底层报错就彻底束手无策。
那天调试到傍晚,终于让登录功能正常响应,页面成功跳转的那一刻,直接保存了所有代码,关掉编译器,趴在桌面歇了好久。