Servlet学习,原理

213 阅读2分钟

概念:运行在服务器端的小程序
怎么理解呢?在JavaEE平台上,处理TCP连接,解析HTTP协议这些底层工作统统扔给现成的Web服务器去做,我们只需要把自己的应用程序跑在Web服务器上。为了实现这一目的,JavaEE提供了Servlet API,我们使用Servlet API编写自己的Servlet来处理HTTP请求,Web服务器实现Servlet API接口,实现底层功能。
Servlet API是一个jar包,我们需要通过Maven来引入它。pom.xml与前面我们讲到的普通Java程序有个区别,打包类型不是jar,而是war,表示Java Web Application Archive

一个Servlet总是继承自HttpServlet,然后覆写doGet()doPost()方法。doGet()方法传入了HttpServletRequestHttpServletResponse两个对象,分别代表HTTP请求和响应。我们使用Servlet API时,并不直接与底层TCP交互,也不需要解析HTTP协议,因为HttpServletRequestHttpServletResponse就已经封装好了请求和响应。以发送响应为例,我们只需要设置正确的响应类型,然后获取PrintWriter,写入响应即可。

运行Maven命令mvn clean package,在target目录下得到一个.war文件,这个文件就是我们编译打包后的Web应用程序。我们应该如何运行这个war文件?
普通的Java程序是通过启动JVM,然后执行main()方法开始运行。但是Web应用程序有所不同,我们无法直接运行war文件,必须先启动Web服务器,再由Web服务器加载,这样就可以让.war处理浏览器发送的请求。

无论使用哪个服务器,只要它支持我们引入的Servlet API 版本,我们的war包都可以在上面运行。以使用最广泛的开源免费的Tomcat服务器为例。

要运行hello.war,把hello.war复制到Tomcat的webapps目录下,然后切换到bin目录,执行startup.shstartup.bat启动Tomcat服务器。在浏览器输入http://localhost:8080/hello/即可看到HelloServlet的输出。
localhost:8080:localhost 是本地计算机的默认WEB发布路径,8080是端口号。如果你访问这个URL,就可以看到你本机上WEB服务器发布的内容。
为啥路径是/hello/而不是/?因为一个Web服务器允许同时运行多个Web App,而这个Web App叫hello,因此,第一级目录/hello表示Web App的名字,后面的/才是我们在HelloServlet中映射的路径。如果叫ROOT,将作为默认应用,启动后直接访问http://localhost:8080/即可。