servlet创建

Tomcat给程序员提供了一组API,让程序员更方便的去创建HTTP — servlet

servlet 创建过程

  1. 创建maven项目 。(针对pom.xml进行修改)
  2. 引入依赖 。在maven中servlet(servlet API对应的jar包)在pom.xml中新增<dependencies>,引入maven的dependency,也把这一段配置称为该依赖在maven仓库的坐标
    在这里插入图片描述
  3. 创建目录
    在这里插入图片描述
    web.xml 文件的作用时让tomcat能够识别当前的代码为webapp,并进行加载。
    在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>
  1. 编写代码
    自己创建个类,继承自servlet提供的HttpServlet 类。
    (这里继承的主要目的是为了对HttpServlet 进行功能扩展–使用方法重写)
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doGet(req, resp);
//必须注释,这里的父类方法只是返回一个错误页面
    }
}

这里的doGet方法,表示处理一个GET请求,并不需要手动的调用,而是当服务器收到GET请求之后,由tomcat自动调用。
doGet的作用:通过请求计算响应。这里的req是tomcat针对请求,解析构造好的。resp是一个空的对象(不是null,只是new了一个对象,里面的各种属性没设置)
需要我们在doGet内部,根据自己定义的业务逻辑,根据请求计算响应。
resp相当于一个输出型参数。

注解是Java中特殊的类,Java专门定义了一种 语法糖 实现注解。

一个 servlet 程序中,可以有多个 servlet 类,每个 servlet 都可以关联到不同的路径(对应不同的资源),这样多个 servlet 就实现了不同的功能。路径和 servlet 类之间是一一对应的关系

@WebServlet("/hello")  //添加注解
//作用:把当前类和HTTP请求的路径关联起来。
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doGet(req, resp);

        //在服务器的控制台里打印
        System.out.println("hello world");

        //返回到客户端
        resp.getWriter().write("hello world");
        //此处的writer对象是从属于resp对象的,此时进行的write操作其实是往resp的body部分进行写入

        //字符流:Reader Writer
        //字节流:InputStream OutputStream
    }
}
  1. 打包程序
    把程序编译好,【得到一些.class文件】,再把这些.class打成一个压缩包。
    jar就是一种.class构成的压缩包,但此处要打的是war包,
    jar只是一个普通的Java程序,war则是tomcat专属用来描述描述webapp的程序。
    一个war让就是一个webapp。

打包过程:
双击或右键package
在这里插入图片描述
默认生成的是jar包,我们在pom.xml中修改配置
在这里插入图片描述
添加包类型
在这里插入图片描述
添加包名称
在这里插入图片描述
打包成功
在这里插入图片描述

  1. 部署
    把刚才打包好的war拷贝到tomcat的webapps目录中即可。【无论tomcat在同一个电脑还是不同电脑,都是这样copy】
    实际工作,tomcat基本都在Linux上运行。

  2. 验证
    打开浏览器,输入URL,验证。
    一定要启动tomcat!!!
    第一级路径【context path / application path】这个目录就代表一个webapp,网站。hello_servlet 打包时给的名字。
    第二级路径 代表注解中的路径。@WebServlet("/hello")
    在这里插入图片描述

刚才在浏览器地址栏中输入url之后,浏览器就i构造了对应的HTTP GET请求,发给了tomcat。
tomcat就根据第一级路径,确定了具体的webapp,根据第二级路径,确定了调用哪个类。
然后再通过GET/POST方法确定调用HelloServlet中的哪个方法。(doGet,doPost)

使用IDEA的tomcat插件,把tomcat集成到idea,省去了手动打包,手动部署的过程【5,6两步】,只需要按下运行,就可以自动打包部署。
基于tomcat插件的自动打包部署,适用于开发阶段,频繁修改代码,频繁验证
手动打包手动部署,适用于上线阶段,发布程序。

tomcat的工作原理:
tomcat不是说自动的把war包拷贝了,而是通过另一种方式来启动tomcat。
tomcat支持启动的时候显示指定一个特定的webapp目录,相当于是让tomcat加载单个webapp运行。
idea直接调用tomcat,让tomcat加载当前项目中的目录,这个过程你中没有打war包,没有拷贝,没有解压缩的过程。
此时程序可以正常运行,但是像之前webapps下的一些已有的内容(比如欢迎页面),就没有了。

手动部署和使用插件部署,是两种tomcat的运行方式,这两种方式对于 context path 的理解不同。
如果直接拷贝war包的方式部署, context path 就是war包名(目录名)
如果是使用smart tomcat方式部署, context path 可以在smart tomcat中配置,默认是项目名。

出错情况

出现404

  1. 路径错误
    • url是否和代码中的配置一致
    • context path 是否正确
    • servlet path 是否正确
  2. webapp没有正确被部署
    • web.xml内容出错
    • 文件名出错
    • 文件路径出错
    • 文件位置出错

出现405

  1. 浏览器发送了GET请求,但是代码中没有写doGet方法,就会出现405。
  2. doGet方法中的super.doGet() 没有被注释掉。super.doGet() 里的代码就是返回405

出现500

本质上是代码抛出了异常。
出现500错误时,日志会明确指出异常调用栈,指出哪一行代码出现了异常。

出现空白页面

代码中没有写resp.getWriter.write()

出现无法访问此网站

tomcat没有启动。
看看有没有start up success in xxx ms.
如果启动失败,翻日志查看异常,很有可能是端口冲突。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值