使用tomcat里的API - Servlet

Servlet 是一组api,操作http协议的,tomcat提供的。

写网站,接收前端传来的http请求,根据请求计算出一个http响应,并把http响应返回到浏览器这边

一、创建一个新的Maven空项目 

首次创建maven项目的时候,会自动从maven网站上下载一些依赖组件(这个过程需要保证网络稳定,否则后续打包一些操作会出现一些问题)

ps:校园网可能会屏蔽一些网站,可能会导致maven的依赖下载失败(可以切换到手机热点试试)

可以看到这里的目录

二、引入依赖

servlet是tomcat提供的api,不是jdk提供的,属于第三方库

(不是jdk自带的,需要手动安装引入)

通常一个项目依赖的内容非常多,手动管理就很麻烦,而maven就可以很方便的解决这个问题

1)打开maven中央仓库,找到需要servlet的jar包

https://mvnrepository.com/

选择3.1.0这个版本(因为我的tomcat是8这个版本,刚好和这个servlet匹配) 

复制代码粘贴到

这个dependecies标签,可以包含很多个依赖,其中我们粘贴进去的dependency标签就是其中一个依赖 复制完之后刷新(右上方会有一个蓝色的m按钮,点一下就可以安装了)

安装成功是这样(安装好之后,后面使用就不用再安装了)

安装失败,会标红(亲测,校园网不太行,第一次失败了,后来用热点才弄好的)

可以看一些这个下载的包在哪

再根据这个信息

找到了这个jar包

 三、创建目录(创建一个tomcat结构的目录)

maven项目是普适的,使用于各种场景,不仅仅是tomcat

而我写的代码最总要放到tomcat上,就必须遵循tomcat的要求

创建一个tomcat结构的目录

其中这个web.xml不能空着,里面必须有东西,不然tomcat无法识别,

这里用一个模板复制粘贴进去即可。

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>
</web-app>

IDEA只对Java语言精准报错,对其他语言的报错只能作为参考(不一定准,可以不用管)

实在看不惯这个标红,可以alt+enter键 选择 ignore这个报错也可以


 以上几个步骤都是固定式操作,需要多操作几次才能熟悉

预备工作做完之后,接下来才是真正编写代码

四、编写代码

在Java目录中创建一个类,继承HttpServlet这个父类(该类就是前面安装的jar包里的类,不是jdk自带的)

main文件夹下的java里创建类

不是在test下

后面写的时候发现问题了(在这里创建没用的,tomcat网页上查看不到hello world)

重写父类的doget方法

doGet是处理HTTP GET请求的方法

重写,是为了给原有的代码实现自定义的功能

当tomcat收到一个GET请求的时候,有可能会执行到子类这个方法中,这个方法的两个参数分别是

HTTP请求 ,HTTP响应

根据服务器的主要逻辑,大概是三个步骤

1.读取请求并解析

        HTTP 请求本身是个字符串,此处就是解析HTTP请求字符串,构造成HttpServletRequest对象(tomcat自动完成)

2.根据请求计算响应(doGet要做的事情,我们要编写的地方)

3.返回响应给客户端

(tomcat会自动,把响应对象组织成HTTP格式的字符串)

 doGet方法创建了这个HttpServletResponse resp对象,但目前只是个空壳,需要我们进行计算

这个对象里的各种属性还需要进行设置

五、打包代码

1)在 pom.xml 里写入代码

packaging标签里设置打包的类型,默认打包 jar包。

build标签以及里面的finalname标签,设置包的名字。

(java中通用的打包方式,任何程序都可以打包成 jar 包,jar包里最重要的文件就是 .class文件)

tomcat要求的是 war包

(tomcat专属的压缩包 是 war 包,里面不仅有 .class文件,还有一些tomcat要求的配置文件web.xml等,还有一些代码html,css,js)

2)打包

如果看到build success 就说明打包成功了

可以再左边的目录里,看到target文件,里面出现了java109的war包

失败会显示一些报错原因:

1)可能是网络不顺畅。导致首次打包过程中,下载的一些第三方的jar包,maven下载出现问题。

(首次打包,容易出现问题。这些依赖下载好之后,后续就不用再下载了)

2)配置文件编写错误。例如 pom.xml。

六、部署程序

右键java109这个jar包,在open in 这里,点击explorer

复制目录中的 java109.jar文件,到tomcat的webapps中

启动 tomcat

在tomcat的文件里面, bin下找到startup.bat(windows点bat,linux点sh)启动

启动成功

七、验证程序

通过浏览器,访问tomcat,获取到我们写的代码中的hello world

由于安装了smart tomcat插件,所以路径稍微有点变化

原本访问的是 http://127.0.0.1:8080/109java/hello

后面装了插件,路径是 http://127.0.0.1:8080/hello_servlet/hello

109java对应的路径是,之前导入的这个109java.jar包

hello对应的是

最后成功访问

在tomcat的日志中也能看到,获取到的get请求

 八、如果修改了代码

1.普通的修改代码 - 需要重新打包,重新部署

加入代码中有些地方需要修改,修改后,刷新是看不到变化的

需要重新打包,重新部署

 

重新启动tomcat之后,内容就刷新了

2.安装了Smart Servlet这个插件之后,直接重新启动就可以了 

在网页刷新之后,就能看到修改后的内容了(简洁方便) 

九、关于编码方式

当我们把内容修改成中文的时候,发现浏览器上显示的中文字符乱码了

分析原因

乱码的情况,有可能是字符编码方式和解码方式不同导致的

常见的字符编码有utf-8和 gbk  ,如果编码utf-8而解码使用的gbk那就可能导致乱码,同样编码用gbk,解码用utf-8也会乱码

查看IDEA的编码方式 是 utf-8

而浏览器的默认编码方式是 windows-1252

编码方式与解码方式不同,所以乱码了 

解决问题

在HTTP响应报文中,显式的告诉浏览器,返回的body字符集是啥样的

在编码的时候,就指定ContentType,让浏览器根据这个内容类型来解码,这样就能保证编码和解码方式一致,同时我们指定这个类型是utf-8,因为这个编码方式是主流

重新启动smart servlet之后,刷新页面,内容正确显示出来了 

十、初学过程中 常见错误

1)404错误 - 找不到页面

1.url网址错误(路径错误)

 确保一级路径和二级路径的正确性

路径写错了(可能是一级路径、可能是二级路径)

2.webapp没有正确加载

例如文件目录错误,没有按照正确的tomcat目录要求

正确应该是

例如web.xml代码没写或者写错了

正确应该是

2)405错误 - 方法没有被实现

例如发送的是http的get请求,但是servlet没有重写doGet这个方法,或者写错方法了写成了doPost方法 

如果写错

 

例如,在重写doGet方法中,没有删掉原有的super(调用父类的方法) 

3)500 - 服务器内部错误

一般是代码中报出异常了

这里是空指针异常

可以在这个网页里,看到异常是什么

4)页面空白

可能是代码里没有写正文的响应的内容 

5)无法访问此网站

tomcat没开或者挂掉了

关掉smart servlet之后

无法访问了

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-11 16:38:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-11 16:38:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-11 16:38:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-11 16:38:03       20 阅读

热门阅读

  1. 【ADB】常见命令汇总(持续更新)

    2024-04-11 16:38:03       13 阅读
  2. Spring 统一功能处理

    2024-04-11 16:38:03       17 阅读
  3. Redis面试题

    2024-04-11 16:38:03       12 阅读
  4. 2024认证杯数学建模B题思路模型代码

    2024-04-11 16:38:03       14 阅读
  5. web蓝桥杯真题:新鲜的蔬菜

    2024-04-11 16:38:03       13 阅读
  6. Linux系统中安装 RPM 包

    2024-04-11 16:38:03       15 阅读
  7. 服务器的云备份和快照有哪些区别?

    2024-04-11 16:38:03       12 阅读
  8. Web | CSS选择器

    2024-04-11 16:38:03       14 阅读
  9. 头歌-机器学习 第3次实验 DBScan密度聚类方法

    2024-04-11 16:38:03       14 阅读
  10. 数据结构DAY3--栈与队列

    2024-04-11 16:38:03       15 阅读
  11. Objective-C学习笔记(@property,id,instancetype)4.9

    2024-04-11 16:38:03       14 阅读
  12. Unity 安卓将数据保存为json并读取

    2024-04-11 16:38:03       17 阅读