使用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之后

无法访问了

  • 16
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
================================================================================ Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================================================ Apache Tomcat Version 8.0.15 Release Notes ========= CONTENTS: ========= * Dependency Changes * API Stability * Bundled APIs * Web application reloading and static fields in shared libraries * Security manager URLs * Symlinking static resources * Viewing the Tomcat Change Log * Cryptographic software notice * When all else fails =================== Dependency Changes: =================== Tomcat 8.0 is designed to run on Java SE 7 and later. ============== API Stability: ============== The public interfaces for the following classes are fixed and will not be changed at all during the remaining lifetime of the 8.x series: - All classes in the javax namespace The public interfaces for the following classes may be added to in order to resolve bugs and/or add new features. No existing interface method will be removed or changed although it may be deprecated. - org.apache.catalina.* (excluding sub-packages) Note: As Tomcat 8 matures, the above list will be added to. The list is not c

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值