【Servlet】 一

本文主要介绍了如何在tomcat部署一个webapp 以及 如何借助maven用servlet编写一个hello world .

一.Tomcat

Tomcat是一个Java里广泛使用的http服务器

HTTP服务器有很多实现,其中最知名的是Nginx;而在Java里,最知名的是Tomcat

一个Tomcat服务器上可以部署多个网站 ; 后续学习的servlet,就是依赖tomcat

1.在Tomcat官网下载Tomcat

Apache

apache最早是一个开源的http服务器,后来吸引了很多开源开发者,,这些人构成了一个名为apache的社区,这个社区做了很多知名的程序,Tomcat就是其中一个

tomcat自身也是使用Java写的(跨平台),所以要想运行Tomcat的前提是电脑上必须有jdk!!

2.tomcat各层目录结构

>Tomcat目录

>bin(binary二进制  )

一般是可执行程序(有一些jar包,也有一些脚本文件)

注意框出的这两个文件:

bat后缀:windows上的批处理脚本,在windows上运行这个文件,就可以启动tomcat

sh后缀:linux上的shell脚本,在linux上运行这个文件,就可以启动tomcat

脚本:也就是编程语言,描述了先做什么再做什么.

有的工作需要多个命令配合执行,就需要使用脚本把多个要执行的命令串起来

>Conf(configuration配置)

放了tomcat的配置文件

Server.xml是最主要的配置文件,使用xml格式

很多程序都有配置文件,通过配置来开关/选择/设置某个功能

>lib

都是jar包,也就是tomcat程序运行过程中会使用的内容

>Logs

tomcat的日志文件

>webapps

放网站,把网站放在这个目录下,就可以加载运行这个网站

3.启动tomcat

>双击bin目录下的startup.bat

乱码怎么办?

乱码原因 : tomcat使用的是utf8,而windows cmd默认是gbk

但是改编码方式还是不好操作的,所以当前就凑合用,后续使用idea中的终端来展示tomcat日志就可以避免乱码了

闪退怎么办?

多半是因为没有找到jdk路径

找原因:把startup拖到cmd中,出错就不会闪退,而是会告诉报错信息,根据错误信息配置环境变量即可

环境变量:操作系统维护的一种变量,往往是用于多个进程相互配合的时候,

有一些数据需要交互,就可以使用环境变量(本质上也可以认为是一种进程间通信的手段)

当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。

服务器:

* 可能是服务器主机:就是一个电脑,在上面运行着服务器程序,保持开机

* 可能是服务器程序:就是一个程序,绑定了一个端口号,客户端就可以通过ip+端口给服务器发请求

启动服务器,目的就是为了让客户端来对服务器发起请求 ; http服务器的客户端就是浏览器

tomcat默认端口是两个8000,8005(一个服务器可以绑定多个端口)

* 8000是业务端口,http请求就应该发到这个端口上

* 8005是管理端口,则是进行一些管理上的操作

服务器启动之后,我们在浏览器上输入:127.0.0.1:8080就可以访问到tomcat的欢迎页面!

4.部署一个webapp

我们可以给tomcat部署一个简单的webapp

在webapps目录下新建一个文件夹,文件夹中有一个简单的html页面

1.直接双击这个html文件,相当于通过浏览器直接访问磁盘文件打开的网页

2.通过网络的方式访问

通过网络的方式访问:是可以跨主机的。

tomcat对于Java有一定的支持,方便程序员编写后端的程序,比如他提供了一系列的api接口,这些api背后已经把一些基础的工作做好了,java程序员只要调用上述api通过少量的代码,就可以完成基本的http服务器的核心功能

tomcat把这组api称为Servlet

二.Servlet

20年前是网站开发的一种主力技术;现在已经逐渐被spring代替了

虽说如此,Servle仍然有学习的价值,因为

1.spring作为一个框架,底层仍然是需要调用servlet里的一些api

熟悉servlet有助于理解spring工作原理 ; 包括spirng有些接口也会暴露servlet一些影子

2.学习servlet,不仅仅是学习servlet api本身,更主要是学习web开发!


动态页面 静态页面

 * 静态页面:页面内容始终不变(这种已经比较少了)

 * 动态页面:页面结构相似,但是页面内容是不同的 , 往往是在请求发起的时候,由服务器通过一系列运算,动态生成的页面

servlet主要解决的问题就是为了实现动态页面

难点:编写一个最简单的servlet的hello world!


三.编写hello world 

1.创建项目

我们创建一个maven项目 ( maven是一个构建工具 )

程序编写过程中,往往涉及到一些第三方库的依赖,另外需要针对程序打包部署 , 这两个工作我们可以交给maven来完成 ! 

maven的意义:方便的进行依赖管理和打包

2.引入依赖

当前的代码要使用servlet开发,而servlet并不是java标准库自带的,所以就需要让maven能把servlet的依赖获取过来

>先找到maven的中央仓库 , 复制对应版本的servlet依赖

https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api

servlet的版本和tomcat的版本是对应的 , 根据自己的tomcat版本下载对应的servlet版本( 具体对应表百度一下~) 

Tomcat8使用servlet3.1

>手动创建一个依赖标签,把坐标复制进去,此时idea会自动通过maven从中央仓库下载这里的依赖 (第一次进去可能是红的,因为没下载完,此时也可以手动刷新)

3.手动创建一些必要的目录/文件

tomcat对于Servlet项目,是有一些额外的要求

maven可以管理的不仅仅是servlet项目,还有其他的 , 因此对于servlet项目,可以创建出一些特定的目录/文件

web.xml内容固定,只需要从别的项目复制就行 , 下面是一个范例:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

   
</web-app>

4.编写代码

这个方法不需要手动调用

doget本质是一个回调函数

把这个方法写好之后就会交给Tomcat,tomcat在收到一个合适的GET请求就会自动调用doget

调用doget的时候,tomcat就会解析这次HTTP请求,生成一个httpServletRequest对象

这个对象的属性啥的都是和http协议格式匹配的(相当于tomcat帮我们把http请求解析好了)

同时,tomcat会构造出一个空的HttpServletResponse 对象, 这个对象也会传递到doget里面 ;

 doget所做的事情 : 根据这次请求,计算出响应;

doGet : 根据req里不同的参数的细节,生成一个具体的resp对象(往空对象里设置属性)tomcat根据这个响应对象,转换成符合http协议的响应报文,返回给浏览器了

Tomcat在合适的时机自动调用doGet

1.请求的方法,是否是GET

一般来说不同的请求方法,在Servlet也会有对应的方法

2.请求的路径 url后面带有层次结构的路径

一个Servlet程序里,可能有多个Servlet类 ; 这些Servlet类,就需要在不同的情况下被执行

添加这个注解:

当请求的路径中带有hello时,才能执行到HelloServlet的代码,不同的Servlet类就可以关联到不同的路径 ! ! ! 

总结:

doget要做的事情,就是根据请求计算响应


疑问:

为什么不需要main 方法?

Servlet程序,不需要main方法

实际上,main方法其实是在tomcat里面,我们写的doGet方法都是让tomcat调用的


5.打包程序

程序需要放到tomcat上运行,就需要对程序进行打包(达成一个能被tomcat识别的格式)

打包,也是借助maven完成的.

Maven -> LifeServlet -> 双击package

>打包成功

>查看

maven中默认打包方式生成的是jar包(里面就是一些.class文件)

但是tomcat需要的是war包(本质和jar差不多,里面会包含一些前端代码/tomcat配置) , 所以需要在pom.xml里面修改一些东西

>修改之后再重新打包

>war包生成成功,查看

6.部署

把这个war包放到webappa里面

可这个war包复制到tomcat的webapps目录下,tomcat就会识别并且自动对这个war包进行解压

7.验证程序能能否正常工作

通过浏览器发起http get请求,触发刚才的servlet代码

在浏览器输入以下这个路径:

 * java108test:称为context path/application path ,用来区分一个webapp

  * hello: servler path , 和@WebServlet注解是对应的

通过上述七个步骤,hello world就编写完了 !

注意:

如果浏览器一直转圈圈,很有可能是cmd的问题

总结上述步骤:


看起来还是比较麻烦的 , 好在上述的过程spring做出了简化的效果 ! 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值