03. Servlet核心

Servlet核心

1.1 什么是Servlet?

Servlet(全称为 Server Applet),是在服务器上运行的Java程序。
Servlet是由SUN公司提供的动态web资源开发技术。本质上是一段java程序。
需要注意的是这段java程序无法独立运行, 必须放在Servlet容器(比如: tomcat服务器)中, 由容器调用才可以执行!

Servlet 的作用是处理请求,服务器会将接受到的请求交给Servlet处理。这个过程为:
在这里插入图片描述
1)客户端发送请求至服务器端;
2)服务器将请求信息交给 Servlet 处理;
3)最终处理的结果交给服务器;
4)服务器将结果响应给客户端。

总结:
(1)Servlet本质上一段java程序
(2)Servlet程序无法独立运行,必须放在服务器中,由服务器调用才可以执行!
(3)Servlet的作用是:接受请求、处理请求、将结果响应给浏览器。

1.2 开发Servlet程序的步骤

1、写一个类,实现一个Servlet接口,并添加未实现的方法

  • 实现Servlet接口, 可以写一个类直接 implements Servlet实现
  • 也可以写一个类,继承Servlet接口的子类,比如GenericServlet或HttpServlet

2、将编译后类放在WEB应用中,并在WEB应用web.xml文件中配置Servlet对外访问的虚拟路径,将WEB应用部署到虚拟主机中即可。

  • 如果使用Eclipse创建Servlet, 在创建时会自动在web.xml中配置Servlet相关的配置信息
  • 将Eclipse和Tomcat整合之后, 也可以非常方便的将Web项目部署到服务器中.

2 开发Servlet程序

2.1 使用Eclipse创建Web项目

1、创建一个Web工程: 在左侧窗口中, 点击鼠标右键 —> New —> Dynamic Web Project。
在这里插入图片描述
2、接着会弹出如下窗口:
在这里插入图片描述

其中:
a) Project name: Web项目名称,web项目的默认访问路径是: /Web项目名称
b) Target runtime: Web项目的运行环境, 选择tomcat(如果没有则需要提前配置tomcat)
c) Dynamic Web module Version: Web项目使用的版本。默认是3.0。改为2.5

注意:
(1) 3.0版本不会创建web.xml文件, 并且创建Servlet时也不会在web.xml文件中生成Servlet相关的配置信息, 记得改为2.5。
(2) Target runtime选项中如果没有可选的服务器,可点击右侧的"New Runtime…"进行配置。
详细操作步骤在《4.2配置Target runtime(Web项目运行环境)》

2.2 使用Eclipse创建Servlet

1、选中项目中的src目录,鼠标右键 —> New —> Servlet
在这里插入图片描述
2、在弹出的窗口中,根据提示填写内容:
在这里插入图片描述
3、点击finish即可完成Servlet创建过程, 创建好的Servlet如下:
在这里插入图片描述
创建好后右击该类运行Run on Server
或者右击下面的server----Add and Remove然后出现如下图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过Eclipse创建Servlet,默认继承HttpServlet。由于HttpServlet也是Servlet接口的子类,让HelloServlet继承HttpServlet,相当于间接实现了Servlet接口。
继承HttpServlet类,默认会覆盖doGet方法和doPost方法,两个方法的作用为:

  • doGet方法:当浏览器发送请求的方式为GET提交时, 将会调用doGet方法来处理请求
  • doPost方法:当浏览器发送请求的方式为POST提交时, 将会调用doPost方法来处理请求

2.3 Servlet在web.xml中的配置

在通过Eclipse创建Servlet时,会自动在web.xml文件中进行Servlet相关信息的配置
(注意:如果是复制类文件,配置信息不会配置,需要自己手动配置!)

<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.tedu.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/HelloServlet</url-pattern>
  </servlet-mapping>

关于上面的配置信息:
a) Eclipse每创建一个Servlet, 就会在web.xml文件中添加两个标签:和标签(可以将这两个标签看成一个组的标签)
b) 和标签内都会有一个标签,标签的内容可以更改,但要求更改后的这两个标签的内容也必须一致。
c) 标签用于配置Servlet类的全路径名(即包名+类名)
需要注意:如果在创建Servlet后修改了Servlet类的名称,这个地方也要一起更改,否则将会出现"ClassNotFoundException" 即类找不到异常
d) 标签用于配置浏览器以什么路径访问当前Servlet(即Servlet对外访问的路径),默认的路径是:/类名
例如:上面为HelloServlet配置的为 /HelloServlet,因此我们在浏览器中的访问路径则为:
http://主机名/web项目访问路径/HelloServlet

2.4 运行Servlet程序、访问测试

1、在运行的Servlet上点击右键 —> “Run As” —> “1 Run on Server”
在这里插入图片描述
2、在弹出的窗口中,直接点击完成即可!!!
在这里插入图片描述
3、运行结果如下:
在这里插入图片描述
或者打开浏览器,复制上图中的路径:
http://localhost:8080/Hello/HelloServlet,粘贴到浏览器的地址栏中,回车访问:
在这里插入图片描述
4、在运行的同时,Web应用也会被发布(部署)到tomcat服务器中,如下:在这里插入图片描述
发布的过程如下:
在这里插入图片描述

3 Servlet继承关系(了解)

3.1 Servlet继承关系

	|
	|--- GenericServlet类, 实现了Servlet接口, 并实现了其中的大部分的方法, 但是service方法没有实现, 如果继承了GenericServlet,service方法需要开发人员自己来实现
				|
				|--- HttpServlet类,继承了GenericServlet, 并实现了service方法, 在service方法中, 会判断请求方式,根据不同的请求方式, 调用不同doXxx

因此在开发中, 我们只需要写一个类(XxxServlet), 继承HttpServlet, 并覆盖其中的doGet和doPost方法, 分别来处理GET请求和POST请求即可!!

在这里插入图片描述

4 Servlet调用过程

4.1 Servlet调用过程

问题:通过浏览器访问服务器中的HelloServlet,可以在页面上看到Servlet返回的结果,那么,这个Servlet是如何被调用的?Servlet又是如何执行的?
参考<<Servlet调用过程图解>>

4.2 Servlet生命周期

Servlet在第一次被访问时创建Servlet实例,创建之后服务器会立即调用init方法进行初始化的操作,之后Servlet实例会一直驻留在服务器的内存中,为后续的请求服务。
只要有请求来访问这个Servlet,服务器就会调用service方法来处理请求;直到服务器关闭,或者WEB应用被移出容器,随着WEB应用的销毁,Servlet实例也会跟着销毁,在销毁之前服务器会调用destroy方法进行善后的处理。

5 扩展内容

5.1 切换工作空间,修改默认编码
1、切换新的工作空间,设置工作空间编码为utf-8
(1)切换到新的工作空间目的: 若旧的工作空间内容过多,可能会导致eclipse不编译,甚至进入休眠状态。
(2)设置工作空间编码为utf-8,此后在当前工作空间下创建的项目编码也默认是utf-8。
在这里插入图片描述
2、设置JSP文件的编码为utf-8
在这里插入图片描述

5.2 配置Target runtime(Web项目运行环境)

1、如果在创建Web项目时,Target runtime选项中没有配置可选的服务器,可以点击右面的选项进行配置
在这里插入图片描述
点击后进入下一步操作。
2、接着会出现如下窗口,根据tomcat服务器的版本选择配置:
在这里插入图片描述
选择后点击next,进入下一步。
3、配置tomcat服务器的安装根路径:
在这里插入图片描述
例如:找到tomcat的安装根目录,并拷贝路径,将路径粘贴到上面的输入框中。
在这里插入图片描述
配置完后点击完成即可
4、上一步完成后,回到Web项目创建的视图窗口,再查看"Target runtime"选项,如下:
在这里插入图片描述

5.3 修改Servlet模版

通过Eclipse可以直接创建一个Servlet类,这相比通过记事本等文本编辑工具创建Servlet,可以节省配置Servlet的时间,提高了我们的开发效率。
但是通过Eclipse生成的Servlet类中包含了许多我们不需要的注释和默认实现代码,这些每次都删除也非常占用时间。
接下来可以通过添加模版代码的形式,来生成Servlet的内容,以便于提高我们的开发效率。
1、先创建一个Servlet,将其中的内容修改为自己期望的模版格式,并复制其中的内容,例如:

package com.tedu;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 
 */
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//>>处理POST请求参数乱码
		request.setCharacterEncoding("utf-8");
		//>>处理响应正文乱码
		response.setContentType("text/html;charset=utf-8");
		//TODO...
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

2、点击菜单栏中的window --> Preferences:
在这里插入图片描述
3、在出现的窗口左侧依次点击:Java --> Editor --> templates -->(在右边的窗口中) 点击New… :
在这里插入图片描述
4、在出现的新窗口中填写如下内容:
在这里插入图片描述
5、替换包路径和类名(作用是在新建Servlet生成的Servlet模版中使用当前类的包路径和类型)
在这里插入图片描述
效果如下:
在这里插入图片描述
在这里插入图片描述
效果如下:
在这里插入图片描述
6、点击OK保存,创建新的Servlet文件,测试:
将Servlet中的所有内容全选删除,并输入"servlet",接着按 “Alt+ /” 提示即可生成自己想要的Servlet模版内容!
在这里插入图片描述
效果如下:
在这里插入图片描述

5.4 tomcat右键选项介绍

在这里插入图片描述

a) Start:用于启动tomcat服务器,如果已启动,则显示 ReStart,作用是重启服务器
b) Stop:用于停止服务器
c) Add and Remove:将Web应用部署到tomcat服务器中,或者移除服务器中部署的Web应用
d) Clean:作用是将发布到Eclipse自己的webapps目录中的项目删除再重新部署
e) Clean Tomcat Work Directory:作用是将 在tomcat运行过程中存入work目录的文件删除

6 FAQ常见问题

6.1 tomcat服务器启动失败-1

如果在启动服务器时,服务器启动失败,并弹出窗口显示如下异常信息:
在这里插入图片描述
根据上面的描述信息,可以看出是8005、8080、8009端口被同时占用了,此时只有一种可能,就是之前已经启动了tomcat或者之前开启的tomcat没有完全关闭导致的。
解决方式:到tomcat安装目录找到bin目录中的shutdown.bat文件,双击运行将服务器关闭,再到Eclipse中启动服务器即可!

6.2 tomcat服务器启动失败-2

如果在启动服务器时,服务器启动失败,并弹出窗口显示如下异常信息:
在这里插入图片描述
可以先将服务器中所有的Web应用移除(服务器右键Add and Remove–>Remove All–>Finish)
再分别执行服务器右键选项中的clean和Clean Tomcat Work Directory
再启动服务器!,如果还是启动失败,可以将tomcat服务器重新配置一次到Eclipse中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XYDrestart

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

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

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

打赏作者

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

抵扣说明:

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

余额充值