Servlet 基础

 学习本节内容之前,需要掌握之前博主博文中的HTTP,Tomcat等等。

目录

1.关于Maven

     1.1什么是Maven

     1.2Maven的下载安装

     1.3基于IDEA的使用方式

          1.3.1创建项目

          1.3.2管理依赖

2.七步骤完成一个servlet程序

     2.1创建一个Maven项目

     2.2引入依赖

     2.3创建目录结构

     2.4编写servlet代码

     2.5打包

     2.6部署

     2.7验证程序

3.利用smart Tomcat 一键完成打包部署并重启Tomcat

     3.1安装smart Tomcat

     3.2如何进行一键操作

4.常见错误汇总

     4.1“404”

     4.2“405”

     4.3“500”

     4.4“空白网页”

     4.5“无法访问此网站”

5.servlet的运行原理


1.关于Maven

     1.1什么是Maven

maven是Java中非常知名的“工程管理工具”/“构建工具”。它的核心功能主要有以下三个方面:

①管理依赖:

这里的依赖是指的是在进行A操作之前,需要先进行B操作。依赖有的时候是非常复杂,需要嵌套的。在我们平时写代码的时候,也是有很多依赖的。比如经常会依赖标准库,也会依赖一些第三方库,引入一些其他的jar包,前面写jdbc代码的,当时就下载了一个mysql驱动包。写代码的时候也会有关系很复杂的依赖,如果全要靠我们手动去解决的话,那是相当麻烦的,我们还需要研究清楚究竟是怎么进行关联的。而为了解决上述的依赖问题,很多编程语言都引入了自己的包管理工具(即:自动解决了依赖)

基本上各种语言都有,java:Maven gradle;python:pip;js:npm等等。

举个例子:我们在睡觉前是需要先洗漱的,而在这个洗漱里又嵌套了很多其它的操作,比如洗澡,刷牙,洗脸等。

②构建/编译:

是指上也是在调用jdk

③打包:

是指把java代码构造成jar包,或者war包。jar包就是一个特殊的压缩包,类似于rar,里面就是把各种.class文件给放到一起了。

     1.2Maven的下载安装

我们直接基于IDEA内部现成的Maven来操作哈

     1.3基于IDEA的使用方式

          1.3.1创建项目

①选择Maven创建项目:

很多大佬实现了很多的第三方库,这些第三方库就是统一把他们放到中央仓库里面的,方便用户去查找。

②创建好项目后的目录结构:

 ③如何使用Maven项目:

最常用的就是如上图的打包操作,但是不仅仅是如此,图中罗列的所有都可以实现的。 

          1.3.2管理依赖

①什么是Maven中的管理依赖:

这里的管理依赖是指使用Maven帮我们下载安装第三方库。

②以mysql为例实现管理依赖:

(1)去中央仓库上找到mysql的驱动包。(下面这个是中央仓库的地址)
https://mvnrepository.com/ https://mvnrepository.com/

 (2)将上述红框内容复制粘贴到pom.xml中

图中的红色部分表示暂时还未下载安装,会自己自动进行下载,首次下载可能时间较长,大家需要耐心等待。 

2.七步骤完成一个servlet程序

     2.1创建一个Maven项目

如上面所示,已经创建了一个Maven项目

     2.2引入依赖

需要在代码中引入servlet api,这个api不是内置的,而是第三方Tomcat提供的。当然我们仍然可以借助Maven直接引入。

①我们仍然需要在中央仓库里找到servlet的API。

 ②将其内容复制到pom.xml中

此时没有红色表示均是已经下载完成了的。

注意!!!

JDK,Tomcat,servlet的版本最好是要配套的。若是没有配套的话,也不是说完全用不了,可能会存在少数的bug。所以建议是一定得配套。而在这里,我用的版本是jdk8,Tomcat8.5,servlet3.1。 

     2.3创建目录结构

虽然Maven帮我们创建了一些目录,但是还是不够,不足以支撑我们写一个servlet项目,所以还需要我们手动再创建一些目录和文件出来。

①在src/main的路径下创建一个webapp目录,注意此处是单数。

②再在webapp目录下创建一个子目录WEB-INF 

③在②的基础上在 WEB-INF 目录下创建一个文件web.xml

 并在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>

     2.4编写servlet代码

编写代码是在java中创建类实现的。

①各方面注意事项:

在网络程序中,就涉及到一对相当重要的概念:
请求:request
响应:response

 doGet方法要做的工作,就是根据请求,计算生成响应。

②一个服务器的工作流程,可以分为三个典型的步骤:
(1)接收请求并解析
(2)根据请求计算响应
(3)构造响应数据,并返回给客户端
这里面,(1)(3)这两步,Tomcat已经帮我们做好了。因此我们只需要实现(2),也就是doGet要实现的内容。

举个通俗的例子:

我去一个饭店点餐,我点了一份蛋炒饭,那在商家接到我的单之后,就会给后厨,其中一个人会去装一碗饭,同时,另一个打鸡蛋,另一个人开始准备炒,这三个行为可以看做三个线程的并发操作,最后炒好了,商家又端给我。这三个人的工作就相当于在请求计算响应的过程。

③对下面的解释

@WebServlet("/hello")

 为什么要/hello?这是因为这一步就相当于把HelloServlet这个类,和HTTP请求中的URL中带有/hello这样的请求,给关联起来了。对于Tomcat而言,会有很多的请求,而我们当前需要调用的只是这一个,/hello =》http://123.123.123:8080/hello。这个样子才会让Tomcat来调用HelloServlet这个类,来进行处理。/hello是和HelloServlet这个类关联起来了,但是要想执行到doGet,还得保证方法也是GET方法。如果是POST/hello,仍然无法执行到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 Helloservelt extends HttpServlet {//能够成功继承这个类,说明之前引入的servlet是没有问题的
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //不能调用父类的doGet方法
        //super.doGet(req, resp);
        System.out.println("Hello world");//服务器控制台打印
        //在页面上打印,把这个字符串放到http响应的body里面,浏览器就会把body的内容显示在页面上了
        //这里为了表示Tomcat的页面所呈现的是动态的,不是静态的html,所以用了System.currentTimeMillis()来展示
        resp.getWriter().write("这是一个Hello world" + System.currentTimeMillis());
    }
}

     2.5打包

我们仔细观察,可以发现上面我们写的代码,是没有main方法的,也就是不能够运行,因此我们需要把当前的代码打包,然后部署到Tomcat中,再通过Tomcat来进行调用。

①找到打包所在位置:

②进行相关准备操作:修改pom.xml

jar和war都是java发布程序的压缩包格式。war算是给Tomcat专门搞的,这里不光会包含一些.class,还可以包含配置文件,以及依赖的第三方jar,还有html,css,js......

③判断打包完成:

 并且我们可以在目录这边看到

     2.6部署

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

然后打开Tomcat 

     2.7验证程序

①直接输入对应的网址,来看是否正确

②路径的解释:

③注意!!!每当我们刷新页面时,就会得到不同的数值,这是因为通过java代码生成的内容是可变的,而HTML中的内容是静态的,是不可变的。

3.利用smart Tomcat 一键完成打包部署并重启Tomcat

对于上述的七大步骤,我们会发现,每次修改代码的时候,都需要重新打包,部署。这个样子是相当麻烦的,所以我们尝试通过IDEA上的插件,直接把Tomcat给集成进来了,从而做到“一键式”完成打包部署。但是我们需要哦注意的是!!!Tomcat和IDEA是两个独立的程序,Tomcat并不是IDEA的一部分,不要搞混。 

 而这个连接器就是smart Tomcat

     3.1安装smart Tomcat

①安装:

②配置:(只有第一次需要进行配置,后续不需要) 

然后我们就会在首页右上角看到这个

直接按这个按钮就可以进行一键自动打包部署。 

     3.2如何进行一键操作

按按钮后xianshi

此时就相当于重新启动了Tomcat,就不需要去手动了。这里是红色,但是并不是错误的意思,大家这里需要稍微注意一下。 

4.常见错误汇总

     4.1“404”

表示你要访问的资源在服务器上不在

主要存在以下两个问题

①请求资源路径写得不对

②路径虽对,但是服务器没有正确把资源加载起来

③web.xml写错了,只有当目录中存在了web.xml,并且里面的内容也是正确的,Tomcat才能正确加载这个webapp;

演示:(这里以情况①进行演示)

这里的话就是第一路径错误了,我们前面在这里设置正确的第一路径是/untitled20,而这里是untitled2,所以第一路径出现了错误。 

     4.2“405”

405Method Not Allowed(这里的方法指的是HTTP的方法)

①重写方法出现问题,不对应导致的405

什么时候浏览器发送的是GET请求?
(1)直接在地址栏里,输入URL
(2)通过a标签进行跳转
(3)通过img/link/script...
(4)通过form表单,method指定为GET
(5)通过ajax,type指定为GET
什么时候浏览器发送的是POST请求?
(1)通过form表单,method指定为POST
(2)通过ajax,type指定为POST

示例:

②没有注释掉父类方法

结果:

     4.3“500”

500也是一个非常高频的错误。

5开头一般是指服务器出现异常,常见的就是服务器代码出现了问题,异常抛到了Tomcat这里。不过很好解决的是,代码出现异常就会被catch捕捉到,异常就会沿着栈向上传递,最后我们可以在页面上看到到底是什么异常。

示例:

 这样我们就能够很快找到问题所在。因此出现这种问题,相对而言是很容易解决的。

     4.4“空白网页”

空白页面就是什么也没有,就是重写的方法里面并没有做任何处理,响应里面没有任何东西,就会出现空白页面,这个时候我们最好检查一下重写的方法

     4.5“无法访问此网站”

这种问题一般就是两种情况,第一种就是网路问题(即TCP上的层次不通)

第二种就是Tomcat没有被正确启动,最常见的就是Tomcat的端口被占用了。出现这两种情况,就会出现以下页面

5.servlet的运行原理

Servlet属于上层建筑(应用层),而下面的传输层,网络层,数据链路层,物理层…都是属于经济基础,他们之间都有着密不可分的关系。

 Tomcat其实是一个应用程序,它是运行在用户态的普通进程,实质上也是一个java进程。用户通过写代码来计算响应请求,而后通过Servlet和Tomcat来进行交互。Tomcat进一步和浏览器之间的网络传输,仍然是走的之间在网络原理中所学习的,也就是封装和分用

整体的过程图显示如下:

 当然,浏览器在与服务器的交互过程中,也会出现涉及到TCP的三次握手这些,等等。 

本期就介绍到这里,下期将主要为大家介绍servlet的一些核心API,感谢观看。 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张洋洋~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值