【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)

文章目录

  • Servlet
    • 第一个 Servlet 程序
      • 创建项目
      • 引入依赖
      • 创建目录
      • 编写代码
      • 打包程序
      • 部署程序
      • 验证程序
    • 安装 Smart Tomcat 插件
    • 访问出错
      • 404
      • 405
      • 500
      • 出现空白页面
      • 出现"无法访问此网站"


Servlet

Servlet是Tomcat给java提供的原生的进行web开发的api.Servlet 是一种实现动态页面的技术.

静态页面就只是单纯的html,动态页面则是html + 数据.

第一个 Servlet 程序

先写个hello world,预期写个servlet程序,部署到Tomcat上,通过浏览器访问,得到hello world字符串.(史上最难hello world)

创建项目

此处要创建一个maven项目.maven是个"工程管理"工具.

  1. 规范目录结构
  2. 管理依赖(使用了啥第三方库,都给处理好)
  3. 构建
  4. 打包
  5. 测试

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第1张图片
如果首次使用maven,项目创建好后,会在下面出现读条,需要联网从中央仓库加载一些maven依赖.因为maven仓库在国外,网络不一定稳定,这里的读条可能会比较久.(长的可能会1个小时).如果报错失败,过两天再试试.

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第2张图片
如下就是创建成功了.

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第3张图片

注意此处的目录结构:

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第4张图片
main放业务代码.
java放Java代码.
resources放程序依赖文件(配置文件,数据文件,图片,图标,声音…)
test放测试代码.
pom.xml是一个maven项目总的配置文件.

引入依赖

引入ser

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第5张图片

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第6张图片
3.1.0和Tomcat8是匹配的,点击3.1.0,将下代码赋值粘贴到pom.xml
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第7张图片
下面代码有可能标红,是因为依赖还没引入成功,也有可能是网络的问题,刷新试试就可以了.

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第8张图片

创建目录

虽然maven已经帮我们自动创建了一些目录,但是还不够,此处需要maven开发一个web程序,还需要别的目录.

  1. 在main目录下(和Java,resources 并列),创建一个webapp目录.
    【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第9张图片

  2. 在webapp下创建WEB-INF目录
    【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第10张图片

  3. 再在WEB-INF 目录下创建一个web.xml文件
    在这里插入图片描述
    【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第11张图片

  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 Applicationdisplay-name>
web-app>

但是我们发现下面有一段代码标红,其实这里不一定是错的,idea只是针对java代码能够进行比较准确的分析和判定.idea里的其他代码:包括不限于html,css,js,xml,json,sql… 如果标红,是否是错的,是不好说的.判定代码是否正确的唯一标准就是看运行结果.
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第12张图片

编写代码

在main目录下的java中创建新的类HelloServlet

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第13张图片

HelloServlet继承HttpServlet,HttpServlet是servlet api里提供的现成的类,写servlet代码一般都是继承HttpServlet这个类.
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第14张图片
重写doGet方法:HttpServlet里已经有doGet方法了,此处是希望用子类的版本代替父类的.

在这里插入图片描述

HttpServletRequest这个参数表示一个HTTP请求.HttpServletResponse这个参数表示一个HTTP响应.
我们写的doGet方法不需要我们自己手动调用,而是交给Tomcat来调用,Tomcat收到get请求,就会触发doGet方法.Tomcat会构造好两个参数,req(TCP socket中读出来的字符串,按照HTTP协议解析)和resp(空的对象),我们就需要在doGet根据请求req,结合自己的业务逻辑构造出一个resp对象.

//下面的注解把当前类和一个HTTP请求的路径关联起来
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //这个只是在服务器的控制台打印
        System.out.println("hello world");
        //要想把hello world返回到客户端,需要使用下面的代码
        //getWriter 会得到一个Writer对象
        resp.getWriter().write("hello world");
    }
}

打包程序

把程序编译好(得到一些.clss文件),再把这些.class打成压缩包.此处打的是war包,它是Tomcat专属的用来描述webapp的程序.

借助maven点击即可:

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第15张图片
双击package运行,如下就成功了:
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第16张图片
打包完毕,包会生成在target目录下.
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第17张图片
默认情况下maven打的是jar包,此处我们需要微调一下.在pom.xml里进行修改:

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第18张图片
然后继续打开maven打包就会出现war包.然后右键open in继续 explore
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第19张图片
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第20张图片
接下来,就可以进行部署操作.

部署程序

把刚才打包好的war拷贝到tomcat的webapps目录中即可.

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第21张图片

然后启动Tomcat,启动成功,说明部署成功了.
在这里插入图片描述

验证程序

打开浏览器输入URL(127.0.0.1:8080/hello_servlet/hello),访问写好的这个代码.

hello_servlet/hello分别在如下路径找:

第一级路径对应我们打的war包的目录名,第一级路径也叫做context path / application path (这个目录就代表一个webapp网站)
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第22张图片

第二级路径如下,它也叫做servlet path
在这里插入图片描述

访问成功的页面如下:

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第23张图片
同时在服务器代码里也可以看到一个日志:
在这里插入图片描述

小结:
我们在浏览器地址栏中输入URL之后,浏览器就构造了一个对应的HTTP GET请求,发给了Tomcat,Tomcat就根据第一级路径,确定了具体的webapp,再根据第二级路径确定了具体调用哪个类,再通过GET/POST方法确定调用HelloServlet的哪个方法(doGet,doPost),此时Tomcat就执行对应的代码完成对应工作.

上述步骤是使用Servlet最朴素的步骤,当然也可以通过一些操作来简化上述过程.

打包和部署程序我们可以使用IDEA的Tomcat插件,把Tomcat集成到IDEA中,就省去手动打包,手动部署的过程,只需要按一下运行就可以自动打包部署.

安装 Smart Tomcat 插件

插件的位置:点击File 然后Settings点击Plugins
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第24张图片
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第25张图片
搜索 Smart Tomcat 插件安装即可:
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第26张图片
安装完成后首次使用Smart Tomcat需要配置:
新增一个运行配置,点击新增配置,双击选择Smart Tomcat这个选项.

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第27张图片
然后设置Tomcat所在的路径,其他的默认,最后运行就行了.
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第28张图片
如果我们发现运行报错了,原因可能是13868号进程(Tomcat)占用了这个端口.

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第29张图片
在这里插入图片描述
将Tomcat关了,13868号进程自然就没了.
在这里插入图片描述
如果没有出现报错就直接在网址栏输入:127.0.0.1:8080/hello_servlet/hello访问即可.这样我们的打包和部署操作就简化了.

Smart Tomcat工作原理不是自动把war包拷贝了,它是让Tomcat加载单个webapp运行.(让IDEA直接调用Tomcat,让Tomcat加载当前项目中的目录,这个过程其实没有打war包,也没有拷贝和解压缩的过程)

上述一套写代码方式很麻烦,后面学习了Spring,Spring Boot,Spring MVC再来实现类似的功能就方便了.

访问出错

404

  1. 少写了 Context Path
  2. 少写了 Servlet Path
  3. Servlet Path写的和URL不匹配
  4. web.xml 写错了

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第30张图片

405

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

  1. 没有实现 doGet 方法
    【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第31张图片

  2. super.doGet没有删掉

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第32张图片

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第33张图片

500

本质上就是代码抛出异常了,出现500的时候日志中会明确告诉异常调用栈,告诉是哪一行代码出现的异常.

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第34张图片

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第35张图片

出现空白页面

【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第36张图片

代码没写:

resp.getWriter().write();

出现"无法访问此网站"

Tomcat没启动.
【Servlet】(Servlet程序 创建项目 引入依赖 创建目录 编写代码 打包程序 部署程序 验证程序 Smart Tomcat插件 访问出错 404 405 500 空白页面 无法访问此网站)_第37张图片

你可能感兴趣的:(后端,servlet,tomcat,java,网络,服务器,tcp/ip,网络协议)