上手Servlet程序

目录

1、手动打包

1.1、创建项目

1.2、引入依赖

1.3、创建目录

1.4、编写代码

1.5、打包程序

1.6、部署

1.7、验证

2、非手动打包

3、解决部分问题

3.1、端口问题

3.2、运行问题

3.3、smart tomcat工作原理

3.4、出现404

3.5、出现405

3.6、出现空白页

3.7、出现无法访问页面


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

<1>静太页面:页面内容始终是固定不变的(静态页面就只是单纯HTML)

<2>动态页面:页面内容随着输入参数的不同而改变(动态则是HTML+数据)

如何使用Servlet连用Tomcat,写一个hello world

基本思想:写一个Servlet 程序,部署到tomcat上

操作以下7个步骤 ,告诉你如何是用Servlet

1、手动打包

1.1、创建项目

上手Servlet程序_第1张图片

创建首次使用Maven,项目创建好了后,下面会有一个读条,从中央仓库架加载一些Maven的依赖

<1>需要网络 (有网才能下载)

<2>Maven仓库不在国内,网络不一定稳定,,这里的进度条可能会比较慢(时间短的话很快,如果慢的话就可能有一个小时)

注:创建好以后它会自动下载;只有第一次使用才会下载东西,后面就不会了,也会很快;如果报错失败了,过两天再尝试一下

对Maven重新理解:Maven是个单独的程序,但是IDEA中已经自带了(不需要任何插件)

 1.2、引入依赖

创建好以后,首先我们先了解以上创建好的目录里都有什么

上手Servlet程序_第2张图片

接下来看怎么添加,如何添加,在哪添加

Servlet对应有jar包,放在pom.xml文件中

跟着以下操作来就行(以下是给出的中央仓库:用来找Servlet的jar包)

Maven 存储库:搜索/浏览/探索 (mvnrepository.com)

 1.3、创建目录

虽然Maven已经自动帮我们创建好一些目录了,但是还不够,这就是为啥还是廷难的“hello world”

<1>在main目录下 (和java ,resources并列),创建一个webapp目录(tomcat的规范格式)

<2>在webapp下创建 WEB-INF目录

<3>再在WEB-INF目录下创建一个web.xml文件

上手Servlet程序_第3张图片

 <4>写web.xml文件内容



    Archetype Created Web Application

复制该内容就行

上手Servlet程序_第4张图片

注:这个代码是固定的,当前阶段不需要调整,自己保存下来即可,针对为啥会标红,不一定是错误,Idea对其他代码解析出现了问题,但是不是真错了

那说说为什么写web.xml文件??

其实也不是很明了为啥要写这个文件,我们不是引入了servlet依赖嘛,那他又在程序里起到了什么作用,有什么特殊的,如果没有涉过相关服务器的代码,所以程序都是要依赖main方法才能运行的(main方法就是这些程序的老大,我跑了,大家才能跑也就是其他在main方法内的小弟们),这里引入servlet依赖就是小弟,Tomcat就是老大,我们把写好的servlet程序扔到webapp目录下就相当于是tomcat门下的小弟了,那怎么辨认你是我门的小弟呢,那就是依靠目录WEB-INF/web.xml,这样就让tomcat知道了,tomcat运行(老大干活)就会把servlet(作为小弟的我们带上)代码加载并运行启动

1.4、编写代码

上手Servlet程序_第5张图片

解释代码是干什么的:

我们这里写了一个doGet方法,不需要咱们手动调用,会交给Tomcat来调用,Tomcat收到get请求,就会触发doGet方法,Tomcat会构造好两个参数(此处代码里的参数)req 和 resp 

req : TCP socket中读出来的字符串,按照HTTP协议解析得到的对象,对象的属性就是HTTP请求报文格式相对应的;Tomcat针对请求,已经解析构造好的

resp :空的对象(不是纯空的,都new有对象,相当于占了空间,但是里面的各种属性还没有设置)

注:doGet此处就是为根据请求 req 结合咱们自己的业务逻辑构造出一个resp对象

@WebServlet("/hello")
public class Hello_Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super访问父类是要直接pass掉的,因为什么也没有,请求啥
        // super.doGet(req, resp);
        // 这个是在服务器的     控制台   里打印.
        System.out.println("hello world");
        // 要想把 hello world 返回到客户端, 需要使用下面的代码.
        // getWriter 会得到一个 Writer 对象. 针对字符流写的操作
        resp.getWriter().write("hello world");
    }
}

代码解释:

此处的writer对象是从属于resp对象的,此时进行的write操作其实是往resp的body部分进行写入(也可能是直接写入网卡中),等resp对象整个构造好了,tomcat会统一的转成HTTP响应的格式,再写socket

在文件中提到了流对象,一般流对象我们看做针对硬盘写入,但是不是一定就得写到硬盘中,也可以写到内存缓冲区里

一个Servlet程序中,可以有很的Servlet类,每个Servlet类会关联不同的路径,会对应到不同的请求和响应,可以通过Servlet实现不同的功能(路径和Servlet类之间是一对一的关系

1.5、打包程序

打包过程怎么解释???

把程序编译好(得到一些.class文件),在把这些.class打成压缩包,jar就是一种.class构成的压缩包,jar包比较常见,但是此处要打的是war包,jar只是一个普通的java程序,war包则是tomcat专属的用来描述webapp的程序,一个war就是一个webapp。

这里打包借助Maven内,直接点击既可

上手Servlet程序_第6张图片

 pom.xml文件内要添加的代码


    war
    

        hello_servlet2
    

上手Servlet程序_第7张图片

 为啥要这么麻烦的打包,其实是可以不打包,但是为什么要这样,其实临时检测一个服务器是否能用就需要手动打包

idea很强大,但是不能依赖

注:开发环境(自己写的代码的电脑)和运行环境(另一个服务器)很可能不在一个环境,直接使用三角号,运行是本地运行,而不是另一个服务器上运行

1.6、部署

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

注:tomcat是在同一个电脑上还是不同电脑上,拷贝都有用

然后启动tomcat即可

上手Servlet程序_第8张图片

1.7、验证

打开浏览器,输入url,访问写好的这个代码

上手Servlet程序_第9张图片

 总结:刚才在浏览器地址栏中输入url之后,浏览器就构造了一个对应的HTTP,GET请求,发给了Tomcat就根据第一级路径,确定了具体的webapp,根据第二级路径,确定了是调用哪个类

2、非手动打包

下载安装tomcat

相比手动打包更加简单

idea中提供了一些API,开发插件,IDEA现有功能进行扩展,很多程序都有插件功能

上手Servlet程序_第10张图片

 运行刚刚idea操作的插件

 3、解决部分问题

3.1、端口问题

Tomcat运行以后 可以查看谁占据了8080端口(在cmd打开的命令行中输入)

 netstat -ano | findstr 8080

上手Servlet程序_第11张图片

这个25472就是表示PId可以去任务管理器中结束该端口

注:在没有启动服务器的情况下,是不会出现当前情况,自然这个命令也不会有什么用

3.2、运行问题

上手Servlet程序_第12张图片

 运行后下面有一行蓝色显示行

重要提醒:不要点,不要点,不要点!!!不包含servlet path直接点击肯定404

3.3、smart tomcat工作原理

非手动打包,不是说自动把war包拷贝了(webapps里是不变的)是通过了另一种方式启动tomcat的,tomcat支持启动的时候显示指定一个特定的webapp目录,相当于是让tomcat加载单个webapp运行,idea直接调用tomcat,让tomcat加载当前项目中的目录

注:该过程,没有war包,也没有拷贝,也没有解压缩过程

3.4、出现404

<1>路径写错了

第一个就是 :url写错了

第二个就是:第一级路径写错了(一定要跟下面这个context path路径相同)

上手Servlet程序_第13张图片

 第三个就是:servlet path路径(也就是第二路径写错了)注解

 <2>webapp没有正确被部署

web.xml内容错误、文件名错误、文件路径错误、文件位置错误

3.5、出现405

<1>比如浏览器发送GET请求,但是代码没有重写doGet就会出现网页页面405

<2>super.doGet没有删除 (为啥会这样呢)

上手Servlet程序_第14张图片

3.6、出现空白页

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

3.7、出现无法访问页面

tomcat没有启动

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