1. 什么是Servlet?
Servlet是运行在Web服务器上的代码片段(组件),用于处理用户的http请求,是Sun公司定义的JavaEE的组件规范
2. 为什么要用Servlet?
可以简化Web服务器端的开发,将复杂的网络通信细节封装在WebServer中,开发者仅需要提供Servlet,就可以完成服务器端开发
3. 什么时候用Servlet?
Web服务器端处理http协议,使用Servlet可以更简单、高效
4. 如何开发一个Servlet?
-
前提:需要先安装一个WebServer
Tomcat:是apache基金会维护的一个高效的、开源、免费的WebServer
安装步骤:
step1. 下载
官网:tomcat.apache.org
版本:
tomcat 7(使用)
tomcat 8.5
step2. 解压缩
安装目录:D:/web/apa…tomcat7…
/home/apa…tomcat7…
step3. 使用Eclipse管理Tomcat
-
开发一个Servlet,部署到WebServer中运行
step1. 开发一个Servlet类,实现Servlet接口
在service()方法中添加具体的逻辑 ServletRequest:代表了用户的一次请求 ServletResponse: 代表了服务器给用户的一次响应
step2. 在web.xml中配置Servlet,让WebServer可以找到当前Servlet
web.xml:应用部署描述符
step3. 将Servlet部署到WebServer
1. 打包
-- appName(自定义的)
-- WEB-INF(不能改的)
-- classes
web.xml
2. 发布
2. 使用Eclipse开发Servlet的步骤
1) 新建一个Maven项目
1. 项目打包方式:war
2. 让Eclipse生成 web.xml文件
3. 导入WebServer对应的jar文件
2)开发Servlet
1. 创建一个Servlet类,实现javax.servlet.Servlet接口
2. Servlet接口中定义了5个抽象方法,开发者关注service()
3. service(ServletRequest, ServletResponse)
PrintWriter pw=response.getWriter()
pw.write("Hello World")
3) 在web.xml中配置Servlet
1. 目的:让WebServer可以找到当前Servlet
<!-- 配置Servlet的基本信息 -->
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>web.HelloServlet</servlet-class>
</servlet>
注: servlet-name的值可以随便写,但是上下要一致
servlet-class的值必须是包名.类名
<!-- 配置Servlet映射的路径 -->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
注:
1. url-pattern的值,必须以 / 开头,如果不以/开头,服务器无法正常启动
2. web.xml中所有url-pattern的值不能重复,重复会导致启动出现异常,虽然服务器可以启动,但是Servlet访问不到->404
4) 将项目部署到Tomcat上
1. 打包(Eclipse自动完成)
-- appName(自定义的)
--WEB-INF(不能改的)
-- classes:保存项目中用到的.class文件
web.xml
2. 发布
5) 启动Tomcat
6) 通过浏览器访问Servlet
localhost:8080/servlet01/hello
注:
1. localhost:8080 -> 指向本机的Tomcat
2. /servlet01 -> 指向的是具体的一个项目
3. /hello -> 指向项目中的一个具体的Servlet
3. 开发Servlet的简化方法
- 创建一个类,继承HttpServlet
- HttpServlet 是 Sun公司提供的Servlet接口的一个实现类,实现了Servlet接口中所有的抽象方法
- 开发者仅需要继承HttpServlet,重写需要的方法即可(service())
- HttpServletRequest继承了ServletRequest,添加了处理http请求相关的方法
- HttpServletResponse继承了ServletResponse,添加了处理http请求相关的方法
4. Servlet的执行流程
从用户发送请求开始,到用户收到Servlet的响应为止,所经历的过程
- 浏览器和服务器建立连接,生成请求数据包,将请求数据包发送给服务器
- 服务器解析请求数据包,创建request和response对象,将请求数据存入request对象中
- 服务器调用Servlet的service()方法,会将request和response作为参数传进来
- Servlet的service方法,可以通过request读取用户发来的请求数据,可以向response写入本次的响应内容
- 服务器读取response中的响应内容,生成响应数据包,发送给浏览器
- 浏览器解析响应数据包,在页面上生成响应内容
5. Web服务器和Web容器的关系
Web服务器:指可以接收用户请求,为用户返回响应内容的程序
Web容器:可以为Servlet的运行提供必要的环境和支持的程序
Tomcat即是Web服务器,也是Web容器
6. 常见的异常及解决方案
应答状态码
1. 什么是应答状态码?
是http协议规定的,对一次响应状态进行描述的数字代码
常见:
200:本次响应正常
304/307:使用本地缓存的资源
404:用户请求的内容找不到
500:请求的内容找到了,执行代码时出现异常
2. 为什么用应答状态码?
更通用,也更高效
3. 404
-
服务器收到请求,寻找用户请求的内容,找不到,就会返回404
-
排查思路
- 检查浏览器的地址栏,看其中的值是否正确
- 将地址栏的内容和web.xml中的url-pattern进行比对
- 检查Eclipse的console中是否有报错信息
- web.xml中配置错误可能导致Tomcat正常启动,但是当前项目没有部署成功,所以访问具体的Servlet会包404
- 针对报错信息解决具体的异常
- 检查项目有没有部署
4. 500
服务器在生成响应内容时出现异常
排查思路:
- 查看Eclipse的console,在异常信息中查找自己写的代码
- 根据具体的异常类型和原因,结合自己写的代码,去排除异常
- 如果出现的异常类型是ClassNotFoundException,看具体是哪个类找不到,到web.xml中查找对应的Servlet的servlet-class标签的值是否正确
5. 405
代表当前用户使用的请求方式,对应的Servlet并不支持
但是现在出现这个问题,可能的原因只有一个:
- 采用继承HttpServlet的方式时,没有正确重写service()方法
- 在HttpServlet的service()方法中,添加了一段报错信息,只要开发者没有重写service()方法,就会固定抛出405