day11-Servlet01
Servlet01
官方api文档:https://tomcat.apache.org/tomcat-8.0-doc/servletapi/index.html

Servlet和Tomcat的关系:一句话,Tomcat支持Servlet
Servlet是跟Tomcat关联在一起的,换而言之,Tomcat是哪个版本,就对应哪个版本的Servlet
1.为什么需要Servlet?
需求:请用你现有的html,css,javascript,开发网站,比如可以让用户留言/购物/支付,你能搞定吗?
这就需要引入我们的动态网页(能和用户交互)技术===>Servlet
我们对之前的JavaWeb技术体系图进一步地细化:

Tomcat的web服务拿到一个请求后:
如果web服务发现是该请求是和java相关的,或者说是一个Servlet(动态请求,比如说可能会去操作数据库),那么Tomcat会去寻找Servlet,Servlet又去调用java程序,进行数据库操作
如果Tomcat的web服务发现请求的是一个静态资源,比如html,图片等,就直接拿到该资源,然后返回,不会和java程序或者数据库发生关系
因此我们说Tomcat其实是有两个功能的:一是充当Servlet的容器;二是充当普通的web服务
只支撑静态资源返回的还有apache,如果是一个静态资源的网站,不需要和数据库进行交互,其实完全可以使用Apache来作为web服务,或者只使用一个Nginx就可以了
2.什么是Servlet?
什么是Servlet
Servlet在开发动态WEB工程中得到了广泛地应用,掌握好Servlet非常重要,Servlet是SpringMVC的基础
Servlet(java服务器小程序),它的特点有:
它是由服务器调用和执行的
即由tomcat解析和执行的
它是用java语言编写的,本质就是Java类
它是按照Servlet规范开发的(接口),Servlet本质就是一套接口规范
除了Tomcat可以去解析Servlet,weblogic也可以支持 Servlet,即只要按照规范去开发接口,就可以支持Servlet,类似于jdbc的接口规范
功能强大,几乎完成所有的网站功能
3.Servlet基本使用
3.1Servlet开发方式说明
- Servlet3.0前使用web.xml,Servlet3.0版本以后(包括3.0)支持注解,同时支持web.xml配置
- 如何查看Servlet版本
- Servlet的讲解只是为了知道Servlet的使用原理(原生的Servlet在项目中使用很少)
- 不管使用哪种方式,本质都一样
3.2快速入门-手动开发Servlet
例子
需求说明:
- 开发一个HelloServlet
- 当浏览器访问
http://localhost:8080/web应用名/helloServlet时,后台输出“hi HelloServlet”
思路:
编写类HelloServlet去实现Servlet接口
实现service方法,处理请求,并响应数据
在web.xml中去配置Servlet程序的访问地址
首先创建web工程,配置好Tomcat

添加servlet-api.jar(在你安装的tomcat/lib下)到工程,因为servlet.jar不是jdk自带的,要引入才可以使用

在idea项目的web/WEB-INF下创建一个lib目录,将servlet-api.jar拷贝进去,然后右击jar包,点击add as library,在弹出的窗口中点击ok即可

在src包下面创建HelloServlet.java,并实现Servlet接口

package com.li.servlet; import javax.servlet.*;
import java.io.IOException; /**
* 1.开发一个servlet,需要实现Servlet接口
* 2.实现Servlet接口的方法:一共有5个
*/
public class HelloServlet implements Servlet { /**
* 1.初始化 Servlet
* 2.当创建HelloServlet实例时,会调用init方法
* 3.该方法只会被调用一次
*
* @param servletConfig
* @throws ServletException
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init() 被调用");
} /**
* 返回ServletConfig对象 也就是返回Servlet的配置
*
* @return
*/
@Override
public ServletConfig getServletConfig() {
return null;
} /**
* 1.service方法处理浏览器的请求(包括get/post)
* 2.当浏览器每次请求Servlet时,就会调用一次server方法
* 3.当Tomcat调用该方法时,会把http请求的数据封装成 实现了ServletRequest接口 的request对象
* 4.通过servletRequest对象,就可以得到用户提交的数据
* 5.servletResponse对象可以用于返回数据给Tomcat-->浏览器
*
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hi HelloServlet~");
} /**
* 返回servlet的信息,使用较少
*
* @return
*/
@Override
public String getServletInfo() {
return null;
} /**
* 1.该方法是在servlet被销毁时,被tomcat调用
* 2.只会调用一次
*/
@Override
public void destroy() { }
}
实现了接口之后,在web.xml配置HelloServlet,即给HelloServlet提供对外的访问地址
目的是为了告诉Tomcat服务器,HelloServlet在哪里

<?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_4_0.xsd"
version="4.0">
<!--web.xml文件主要用来配置该web应用使用到的Servlet-->
<!--配置HelloServlet-->
<!--解读:
1.servlet-name:给Servlet取名(任意),该名字唯一
2.servlet-class:Servlet的类的全路径,Tomcat在反射生成该Servlet类实例时需要使用
3.servlet-mapping里的servlet-name要和上面的servlet-name保持一致
4.url-pattern:这个就是该Servlet访问的url的配置(路径)
5.这时我们应该这样访问Servlet:http://localhost:8080/web应用名/helloServlet
5.url-pattern的取名也是随意的(注意加上斜杠)
-->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.li.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
</web-app>
设置 快捷键ctrl+/ 可以在当前位置注释,而不是在行

访问HelloServlet(记得要reploy或者restart)
可以自己配置快捷键启动

浏览器访问:

后台输出:可以看到init方法只调用了一次,而每次访问都会调用server方法

4.浏览器调用Servlet流程分析
day11-Servlet01的更多相关文章
- 团队项目——站立会议 DAY11
团队项目--站立会议 DAY11 团队成员介绍(5人):张靖颜.何玥.钟灵毓秀.赵莹.王梓萱 今日(2016/5/20),站立会议已进行了两周时间,将这一周所遇到的问题和心 ...
- python_way ,day11 进程
if __name__ == '__main__': for i in range(10): p = Process(target=foo, args=(i,)) # p.daemon = True ...
- python_way day11 自定义线程池
python_way day11 线程池 为什么需要线程池 线程多一些固然好,但是过多的线程反倒影响系统的负荷,所以我们就需要创建合适多的线程,哪我们把线程放到哪里?这时就放到线程池中. 线程池中存放 ...
- Spark Streaming揭秘 Day11 Receiver Tracker的具体实现
Spark Streaming揭秘 Day11 Receiver Tracker的具体实现 ReceiverTracker是运行在Driver上Receiver管理程序,今天让我们深入学习一下. 核心 ...
- python 之路,Day11 (下)- sqlalchemy ORM
python 之路,Day11 - sqlalchemy ORM 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM ...
- python 之路,Day11(上) - python mysql and ORM
python 之路,Day11 - python mysql and ORM 本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 ...
- Day11 - Mysql and ORM
python 之路,Day11 - python mysql and ORM 本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 ...
- ##DAY11 UITableView编辑
##DAY11 UITableView编辑 每一个视图控制器都有一个编辑按钮,因为项目中编辑的应用场景非常多,所以系统预留了一个编辑按钮供我们使用 self.navigationItem.leftBa ...
- 【JAVA零基础入门系列】Day11 Java中的类和对象
今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...
- Alpha冲刺Day11
Alpha冲刺Day11 一:站立式会议 今日安排: 由周静平继续完成昨日第三方机构剩余的核实企业风险数据和企业风险数据详情模块 由张梨贤和黄腾飞共同完成第三方机构的分级统计展示模块 由林静开始登录/ ...
随机推荐
- (已解决)Adobe Creative Cloud 安装 Acrobat PDF 报错 DW071 DW003
今天安装 Adobe Acrobat pdf 阅读器报错了,错误为 Exit Code: 7 Please see specific errors below for troubleshooting. ...
- JZM 的印象笔记 (卷积,分块)
题面 题目背景 大名鼎鼎的 OI 天花板选手 JZM 对自己的好伙伴--印象笔记有些生疏了 题目描述 作为一名 OI 选手,他的笔记中的字母只包含数字0和1. JZM 在印象笔记中找到了一行 N N ...
- 【java】学习路径39-Buffered缓冲输出流
import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; pu ...
- 解决CDH 访问权限问题
CDH 6.2 安装好以后,直接使用root 或者 其他账号执行spark-shell 会报权限错误 22/01/04 17:46:28 ERROR spark.SparkContext: Error ...
- 【android 逆向】arm if
#include <stdio.h> void if1(int n){ //if else语句 if(n < 10){ printf("the number less th ...
- 微信小程序-云函数、云存储
云函数是运行在服务器端的 创建一个目录cloud project.config.json配置云函数目录 cloud目录有个云朵.代表云函数 初始化成功了 新建一个云函数 cloud目录右击 新建一个N ...
- Html飞机大战(十七): 优化移动端
好家伙,继续优化, 好家伙,我把我的飞机大战发给我的小伙伴们玩 期待着略微的赞赏之词,然后他们用手机打开我的给他们的网址 然后点一下飞机就炸了. 游戏体验零分 (鼠标点击在移动端依旧可以生效) 好 ...
- Java容器化参数配置最佳实践
Java是以VM为基础的,而云原生讲究的就是Native,天然的矛盾,虽然Quarkus是为GraalVM和HotSpot量身定制的K8s Native Java框架,生态原因切换成本太高,这种矛盾体 ...
- 讲讲 tcp_tw_recycle,tcp_tw_reuse
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485332&idx=1&sn=59823ce1 ...
- Centos安装nodejs,npm (压缩包)
下载node阿里云镜像(推荐) 地址:https://npm.taobao.org/mirrors/node/latest-v14.x/ 选择自己要下载的版本,这里我选择的v14.6.0 cd /us ...