初识Servlet
Posted 你这家伙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识Servlet相关的知识,希望对你有一定的参考价值。
1.Servlet简介
Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
2.Servlet,WebApp,Tomcat之间的关系
抽象描述:
- Tomcat:他就是一个淘宝的平台
- WebAPP:就是一个一个的店铺(网站,手机APP的应用)
- Servlet:为WebAPP服务,平台给店家的一些工具
在这之前需要了解maven的相关知识和tomcat的相关知识,maven是一个构建工具,相当一个应用商店,对jar包做相应的打包,发布管理和依赖管理
有关maven的相关知识
maven项目目录说明
maven生命周期
有关Tomcat的相关知识
什么是tomcat
Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。
tomcat如何安装
首先进入Tomcat官网下载tomcat
注意:在解压的时候路径不能有中文,否则会出现错误
tomcat目录说明
如果tomcat运行失败?
1.查看本机的Java环境是否安装成功
2.Tomcat目录有多余,把多余的文件放到其他位置
3.端口如果被占用,Tomcat默认的端口有两个(8080/8005)。
Tomcat在操作系统和网络协议栈中的位置
Tomcat 实现的主要是 HTTP 协议,也就是应用层,同时在操作系统的视角里,是属于用户态程序。我们自己的实现是在 Tomcat 基础上运行的。
创建一个servlet
servlet其实就是一组Java类和一组API,其实也就是添加一个servletjar包
首先在找到在中央仓库里面扎到servlet
至于选择哪个版本,这个取决于Tomcat,此时打开Tomcat官网
此时会找到Tomcat8.5对应的servlet版本为3.1
此时下载servlet的版本3.1,然后将jar包添加到pom.xml里面
配置web.xml
这里无需记忆servlet具体的xml是什么内容,只需要对固定的xml记录起来,然后使用的时候稍作修改即可
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">
<!-- <servlet>-->
<!-- <servlet-name>helloServlet</servlet-name>-->
<!-- <servlet-class>helloServlet</servlet-class>-->
<!-- </servlet>-->
<!-- <servlet-mapping>-->
<!-- <servlet-name>helloServlet</servlet-name>-->
<!-- <url-pattern>/hello</url-pattern>-->
<!-- </servlet-mapping>-->
</web-app>
创建一个servlet测试类
写具体的servlet项目
- 编写后端类 必须继承HTTPServlet
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//首先,创建的servlet都必须实现HttpServlet
public class helloServlet extends HttpServlet {
//然后重写doGet和doPost请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置相应response header编码格式
resp.setCharacterEncoding("utf-8");
//设置响应类型,这里表示将会响应一个html页面
resp.setContentType("text/html");
//进行body的输出
//首先需要一个输出流
PrintWriter writer = resp.getWriter();
writer.println("<h1>你好,servlet</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
- 配置文件(一个后端类对应一个配置文件)配置url和后端类的关联关系
进行打包发布
如何进行发布
1.打开右边的maven,然后点击package
2.找到生成的war包,然后部署到Tomcat的webApp下
3.然后访问Tomcat下的hello页面(前提必须是启动了Tomcat)
当我们打开tomcat的时候就会发现我们的java31.war就已经部署在Tomcat下了
访问hello页面(访问的时候一定要加上这个jar包的名称)
servlet执行流程
创建一个静态页面
servlet包含两类文件
- 动态文件:编写的时候必须写两部分内容:1.后台类;2.web.xml中的映射关系。
- 静态文件:只需要在webapp里面创建xx.html即可,无需进行其他操作
静态页面
注意:前面我们在目录里面提到过,静态页面是在webapp下的,所以我们就在webapp下创建一个web.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>我是一个servlet的欢迎页面</h1>
</body>
</html>
然后对其进行打包然后部署到Tomcat的webApp下,然后在浏览器输入/java31/web.html,就显示如下页面(前提要启动Tomcat)
servlet的生命周期
这是servlet的生命周期也是理解servlet的关键
init方法被设计只调用一次
- 他在第一次创建servlet的时候被调用,在后续每次用户请求的时候不在调用,因此,他是用于一次性初始化。
- servlet创建于用户第一次调用对应于该servlet的url时,但是也可以指定servlet在服务器第一次启动时被加载
- 当用户调用一个servlet时,就会创建一个servlet实例,每一个用户请求都会产生一个新的线程,只等的时候交给doGet或doPost方法,init()方法简单地创建或加载一些数据,这些数据将被用于servlet的整个生命周期
service()方法是执行实际任务的主要方法
- servlet容器(即Web容器)调用service()方法来处理来自客户端(浏览器)的请求,并把格式化的响应写会给客户端
- 每次服务器接收到一个servlet请求时,服务器会产生一个新的线程并调用服务,service()方法检查HTTP请求类型(GET,POST,PUT,DELETE等),并在适当的时候调用doGet,doPost等方法,所以,不需要对service()方法做任何动作,只需要根据来自客户端的请求类型来重写doGet或者doPost方法即可
destroy()方法只会被调用一次,在servlet生命周期结束时被调用 - destroy方法可以让你的servlet关闭数据库连接,停止后台线程,把cookie列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
总结:
每个 Servlet 对象,在其生命过程中, init() 在启动时被调用一次,destroy() 在退出时被调用一次,service() 在每次请求的处理过程中都会调用一次,最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
servlet的主要位置
以上是关于初识Servlet的主要内容,如果未能解决你的问题,请参考以下文章
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段