Servlet

目录

Servlet 是什么

Servlet 主要做的工作:

第一个Servlet项目

1.创建一个maven项目

2.添加Java

3.添加servlet框架

4.编写代码

5. 打包程序

6. 部署程序

 7. 验证程序

 更方便的部署方式

访问出错怎么办?

出现 404

出现 405

出现 500

出现 "空白页面"

出现 "无法访问此网站"

小结


Servlet 是什么

Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一 个 web app.

关键点:

1.基于HTTP协议

2.运行在tomcat里面的

Servlet 主要做的工作:

1.建立连接:客户端和程序的连接(当用户输入了请求URL之后,程序能感知到用户的请求)。

2.获取用户请求参数,处理request对象

3.将处理器处理结果返回给客户端,返回response对象

第一个Servlet项目

1.创建一个maven项目

Servlet_第1张图片

Servlet_第2张图片Servlet_第3张图片

Servlet_第4张图片

2.添加Java

选择目录

Servlet_第5张图片

双击main\java

Servlet_第6张图片

3.添加servlet框架

Maven 项目创建完毕后, 会自动生成一个 pom.xml 文件. 我们需要在 pom.xml 中引入 Servlet API 依赖的 jar 包

1.) 在中央仓库 https://mvnrepository.com/  中搜索 "servlet", 一般第一个结果就是.

2) 选择版本. 一般我们使用 3.1.0 版本

Servlet 的版本要和 Tomcat 匹配.

如果我们使用 Tomcat 8.5, 那么就需要使用 Servlet 3.1.0

可以在 http://tomcat.apache.org/whichversion.html 查询版本对应关系.

3) 把中央仓库中提供的 xml 复制到项目的 pom.xml 中

Servlet_第7张图片



    javax.servlet
    javax.servlet-api
    3.1.0
    provided

 添加依赖

Servlet_第8张图片

  • groupId: 表示组织名称
  • artifactId: 表示项目名称
  • version: 表示版本号
  • 中央仓库就是按照这三个字段来确定唯一一个包的

4.编写代码

1.在 java 目录中创建一个类 HelloServlet

2.继承HttpServlet

import javax.servlet.http.HttpServlet;

public class HelloServlet extends HttpServlet {

}

3.注册请求路由(URL)

Servlet_第9张图片

4.重写doGet方法

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取前端参数
        String name = req.getParameter("name");
        //将结果返回前端
        resp.getWriter().println("name=" + name);
    }
}

执行流程:

  • 创建一个类 HelloServlet , 继承自 HttpServlet
  • 在这个类上方加上 @WebServlet("/hello") 注解, 表示 Tomcat 收到的请求中, 路径为 /hello 的请求才会调用 HelloServlet 这个类的代码. (这个路径未包含 Context Path)
  • 重写 doGet 方法. doGet 的参数有两个, 分别表示收到的 HTTP 请求 和要构造的 HTTP 响应. 这个 方法会在 Tomcat 收到 GET 请求时触发
  • HttpServletRequest 表示 HTTP 请求. Tomcat 按照 HTTP 请求的格式把 字符串 格式的请求转 成了一个 HttpServletRequest 对象. 后续想获取请求中的信息(方法, url, header, body 等) 都是 通过这个对象来获取.
  • HttpServletResponse 表示 HTTP 响应. 代码中把响应对象构造好(构造响应的状态码, header, body 等)
  • resp.getWriter() 会获取到一个流对象, 通过这个流对象就可以写入一些数据, 写入的数据会被 构造成一个 HTTP 响应的 body 部分, Tomcat 会把整个响应转成字符串, 通过 socket 写回给浏览 器.

5. 打包程序

使用 maven 进行打包.

打开 maven 窗口 (一般在 IDEA 右侧就可以看到 Maven 窗口, 如果看不到的话, 可以通过 菜单 -> View -> Tool Window -> Maven 打开) 然后展开 Lifecycle , 双击 package 即可进行打包

6. 部署程序

把 war 包拷贝到 Tomcat 的 webapps 目录下.

Servlet_第10张图片

 7. 验证程序

Servlet_第11张图片

 更方便的部署方式

配置 Smart Tomcat 插件

1) 点击右上角的 "Add Configuration"

2) 选择左侧的 "Smart Tomcat"

3) 在 Name 这一栏填写一个名字(可以随便写) 在 Tomcat Server 这一栏选择 Tomcat 所在的目录. 其他的选项不必做出修改.

Servlet_第12张图片

在Deployment中点击加号

Servlet_第13张图片 4) 点击 OK 之后, 右上角变成了

 

点击绿色的三角号, IDEA 就会自动进行编译, 部署, 启动 Tomcat 的过程.

Servlet_第14张图片

Servlet_第15张图片

使用 Smart Tomcat 部署的时候, 我们发现 Tomcat 的 webapps 内部并没有被拷贝一个 war 包, 也没有看到解压缩的内容. Smart Tomcat 相当于是在 Tomcat 启动的时候直接引用了项目中的 webapp 和 target 目录. 

 Servlet_第16张图片

访问出错怎么办?

出现 404

404 表示用户访问的资源不存在. 大概率是 URL 的路径写的不正确. 

出现 405

405 表示对应的 HTTP 请求方法没有实现

出现 500

往往是 Servlet 代码中抛出异常导致的.

出现 "空白页面"

出现 "无法访问此网站"

一般是 Tomcat 启动就失败了

小结

初学 Servlet, 遇到的这类问题会非常多. 我们不光要学习 Servlet 代码的基本写法, 也要学习排查错误的 思路.

 熟悉 HTTP 协议能够让我们调试问题事半功倍.

4xx 的状态码表示路径不存在, 往往需要检查 URL 是否正确, 和代码中设定的 Context Path 以及 Servlet Path 是否一致.

5xx 的状态码表示服务器出现错误, 往往需要观察页面提示的内容和 Tomcat 自身的日志, 观察是否 存在报错.

出现连接失败往往意味着 Tomcat 没有正确启动, 也需要观察 Tomcat 的自身日志是否有错误提示.

空白页面这种情况则需要我们使用抓包工具来分析 HTTP 请求响应的具体交互过程.

观察日志是调试程序的重要途径. Tomcat 的日志往往很多, 需要同学们耐心阅读, 经常阅读, 熟练 了就能更快速的找到问题了.

你可能感兴趣的:(Java_ee,servlet,java,tomcat)