作者
:学Java的冬瓜
博客主页
:☀冬瓜的主页🌙
专栏
:【JavaEE】
分享
: 在满园弥漫的沉静的光芒之前,一个人更容易看到时间,并看到自己的身影。——史铁生《我与地坛》
主要内容
:创建一个基于maven的web项目,1> 创建目录 2> 引入依赖 3> 创建目录结构 4> 编写代码 5> 打包程序 6> 部署程序 7> 验证。引入maven依赖的详细步骤、使用Smart Tomcat插件在idea内部内置Tomcat,省去打包和部署的操作!
文章目录
- 1、创建目录 maven(pom.xml)
- 2、引入依赖(servlet api jar包)
- 3、创建目录结构
- 4、编写代码
- 5、打包程序
- 6、部署程序
- 7、验证
- 8、总结:
1、创建目录 maven(pom.xml)
此处创建一个maven项目,用于管理工程
注意:首次创建maven项目时,需要从中央仓库加载一些 maven依赖(在页面下方读条),这个过程需要联网,由于maven仓库在国外,网络不稳定,所以可能会耗很长时间。但后续创建就好了,不会再像首次创建一样耗费很长时间。
maven是一个工程管理工具,可以:
1.规范目录结构 2.管理依赖(使用第三方库) 3.打包 4.测试…
这里这个简单例子需要用到2,3功能
2、引入依赖(servlet api jar包)
法一:1.直接使用本地tomcat的lib下的servlet api(在groupId标签中输入javax.servlet,然后点击提示,其它内容会自动补充)
法二:2.关于maven的文件下载地址:maven相关api下载。进入网页后搜索servlet,然后选择tomcat对应的servlet版本,然后直接复制maven的代码;然后在pom.xml中创建<dependencies>标签
,在标签内粘贴 复制好的内容。
<dependencies>
<!--
1.直接使用本地tomcat的lib下的servlet api
2.servlet的jar包下载地址:https://mvnrepository.com/,可以直接粘贴出现的页面框中的内容到下面中
-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
3、创建目录结构
在main中创建webapp目录,在webapp中创建WEB-INF目录,在WEB-INF目录中创建web.xml文件。
IDEA中基于maven-webapp骨架创建的web工程,默认的web.xml看下面代码,web.xml的作用是让Tomcat识别当前的 项目是webapp,并进行加载。
<!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>
4、编写代码
写一个类继承HttpServlet,重写doGet方法,使用注解定位到该类。
理解:
- doGet方法是由Tomcat服务器自动调用的,Tomcat收到一个get请求,就会触发doGet方法。
- req是将TCP Socket读出来得到一个字符串,再由这个字符串按照HTTP协议解析得到的 java对象 。这个req对象的属性 和http请求报文的 格式和内容是相对应的。
- resp是一个空的对象,程序员需要在doGet中,根据req,结合业务逻辑,往resp对象中填充内容构造出 resp对象。resp是一个输出型参数,resp构造完成后,由调用者Tomcat服务器把resp转换成字符串,再根据HTTP协议写入TCP Socket中,进行响应。
servlet类的doGet方法中:
1> 把内容写到服务器的控制台中:
System.out.println("hello World!");
2> 把内容写浏览器页面上:
下面代码中
第一行:在响应报文的header中标注使用text/html解析,字符集使用utf-8防止乱码。
第二行:getWriter获取一个Writer对象,这个Writer属于resp,此时执行write()方法操作是对reap的body部分进行写入,等resp整个构造完成了,Tomcat再把resp转成http报文格式,然后写入Socket中。
resp.setContentType("text/html; charset=utf-8");
resp.getWriter().write("hello World!!!");
5、打包程序
第一步:为了打包成war包,在pom.xml文件中添加下面代码;因为默认是打包成jar包
<!--描述了打包是jar包还是war包-->
<packaging>war</packaging>
<build>
<!--描述了打包的war包的名字-->
<finalName>hello_servlet</finalName>
</build>
第二步:点击右侧的maven,展开项目,展开LifeCycle,双击package
6、部署程序
找到war包的路径:
复制上述的war包,粘贴到Tomcat的webapps目录下,然后重新启动Tomcat服务器(在Tomcat的bin目录下的
startup.bat
是Windows版本,startup.sh
是Linux版本)
7、验证
在浏览器地址栏输入:
127.0.0.1:8080/项目根路径/servlet路径
(注解的内容)
项目根路径也称为第一级路径,也叫context path/applaction path
,servlet路径为第二级路径,也叫做servlet path
路径。
8、总结:
-
省略步骤3:使用项目模板后,后续不再需要手动创建目录结构了,但是容易出错。
-
省略步骤5,6:打包程序和部署程序 IDEA的 Tomcat插件(Smart Tomcat),把Tomcat集成到 IDEA中,省去手动打包和部署的过程,只需运行就可自动打包和部署。
怎么集成?File->Settings -> 查询plugins -> Smart Tomcat下载,然后重新启动服务器即可。
怎么加到项目中?Add Configuration -> + -> Smart Tomcat,然后进行下图操作:只是首次使用需要手动配置Tomcat所在路径,以后都不需要再配路径了,只需添加即可。
Smart Tomcat工作原理? 手动指定一个特定的webapp目录,idea直接调用Tomcat,让Tomcat加载单个webapp运行,所以没有打war包,也没有部署项目到webapps下。因为是指定单个webapp项目,所以在这里启动后,只能访问当前的webapp,而不能访问Tomcat目录下wabapps下的其它webapp。
-
Address already in use: JVM_Bind
错误处理:这个错误是指ip和端口被占用,因为ip都是回环ip 127.0.0.0,端口相同时,即是ip和端口相同。处理 只需将占用这个端口的进程关闭即可,具体操作如下:
1> 打开cmd -> 输入netstat -ano | findstr 8080
查找占用Tomcat默认端口8080的进程,如图进程id 10164的进程占用了 8080端口。
2> 打开任务管理器,根据进程id 10164找到占用8080端口的进程,结束该进程。再次启动服务器,错误就消失了。
-
注意点:
404容易出现的点:1> 路径错误URL、context path、servlet path。2>部署错误 web.xml、文件名错、文件路径错误…
405出错点:1> 没有写请求对应的方法,比如客户端发送get请求,但是服务器这边没有doGet方法。2> 默认生成的super.doGet(),没有去掉。
500错误:抛出异常,注意看日志(相对应的启动Tomcat时,可以查看Tomcat的日志)。