一、创建一个新的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之后
无法访问了