Servlet是实现动态页面的技术,是tomcat给Java提供的原生的进行web开发的api
第一个Servlet程序
写一个servlet程序,部署到tomcat上,通过浏览器访问,得到hello world字符串
1.创建项目
此处要创建的是maven项目
maven:工程管理工具
作用:规范目录结构、管理依赖、构建、打包、测试
观察项目目录:
2.引入依赖
servlet对应的jar包
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<dependencies>标签是自己写上去的,这个标签是project顶级标签的子标签,如果有多个依赖,都往这个标签里依次粘贴即可。
进行到这里,另外一种创建的方式
同样的引入依赖的方法也会变化,这次可以直接在重新新创建的项目中找到<dependencies>
在里面添加我们的关于servlet-api的<dependency>
3.创建目录结构
(1)在main目录下(和Java并列)创建一个webapp目录
(2)在webapp下创建一个WEB-INF目录
(3)在WEB-INF目录下创建web.xml文件
(4)给web.xml里添加内容
<!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>
粘贴进去固定的这串代码后发现URI未识别
把报红部分添加进去即可
这段内容是固定的,直接复制粘贴即可。
4.编写代码
一个servlet类对应一个路径
这里的HelloServlet类继承HttpServlet类。在下面的代码中,只需要打出doGet方法,idea会自动生成该方法,自带的第一行super不需要,将其删掉。
这里的注解是Java中特殊的类,Java专门定义了一种“语法糖”,对一个类/方法,进行额外的解释说明。赋予这个类/方法额外的功能/含义。此处的@WebServlet作用是把当前的类和一个HTTP请求的路径关联起来。
5.打包程序
把程序编译好(得到一些.class文件)
在把这些.class文件打印成一个压缩包(比如jar包)
此处打包成war包,war包,war是tomcat专属的用来描述webapp的程序
一个war包就是一个webapp
打包完成后,包会生成在target目录
默认情况是jar包,需要调整成war包。
6.部署程序
把打包好的war拷贝到tomcat的webapps目录中即可
7.验证
打开浏览器,输入url,访问写好的代码。
总结:
在浏览器地址栏输入url后,浏览器就构造了一个HTTP GET请求,发送给了tomcat,tomcat根据一级路径确定具体的webapp,根据二级路径,确定了调用哪个类。GET/POST方法确定调用HelloServlet的哪个方法。
用Smart tomcat部署程序
上述过程可以简化(打包和部署程序的过程),使用idea的tomcat插件自动打包部署。
插件:对现有功能进行扩展
下载插件
配置插件
运行
再次点击运行,运行成功:
浏览器访问,结果和上面手动打包得到的结果一样。
工作原理:smart tomcat没有自动打包war包、拷贝war包、解压缩war包,而是指定了另一个特定的webapp目录,tomcat去加载这个webapp运行。(注意:smart tomcat部署直接访问到当前要访问的项目路径,所以看不见欢迎页面;手动war包的方式部署,路径是war包名)
可能出现的问题
404:找不到页面/未被允许访问页面
原因:路径写错;webapp部署错误(文件名、路径、位置错误,web.xml内容错误)
405:方法没有实现
原因:方法写错、没写;super代码没有删干净
500:代码抛出异常,日志中会显示哪行代码出错
出现空白页:代码里面没有写resp.getWriter.write()
无法访问此网站:tomcat未启动