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 一:站立式会议 今日安排: 由周静平继续完成昨日第三方机构剩余的核实企业风险数据和企业风险数据详情模块 由张梨贤和黄腾飞共同完成第三方机构的分级统计展示模块 由林静开始登录/ ...
随机推荐
- 【JDBC】学习路径5-提取JDBCUtils工具类
回顾我们上面几节的内容,我们发现重复代码非常多,比如注册驱动.连接.关闭close()等代码,非常繁杂. 于是我们将这些重复的大段代码进行包装.提取成JDBCUtils工具类. 第一章:提取注册连接模 ...
- 【java】基础1-字符串、堆、栈、静态与引用类型
/*结论:1,一般变量(int,float,boolean..)使用==比较,引用类型(String,int[],对象)使用equals比较.2,一般的变量存放在栈中,new出来的对象都存放在堆中,字 ...
- 自定义View3-水波纹扩散(仿支付宝咻一咻)实现代码、思想
PS:自定义view篇-水波纹实现 效果:水波纹扩散 场景:雷达.按钮点击效果.搜索等 实现:先上效果图,之前记得支付宝有一个咻一咻,当时就是水波纹效果,实现起来一共两步,第一画内圆,第二画多个外圆, ...
- PLSQL 与 PLPGSQL
KingbaseES 为了更好地适应用户的oracle 应用,实现了对 plsql 的支持,用户可以根据需要使用 plsql 或 plpgsql. 以下简要介绍下二者的差异 一.格式差异 1.plpg ...
- 单机部署minio,设置Nginx代理,配置https(TLS)访问
安装 下载地址:https://dl.min.io/ # 创建目录 mkdir -p /usr/local/minio/{data,bin,etc} # 下载minio wget https://dl ...
- 官方使用logstash同步Mysql数据表到ES的摘抄
官方文档地址:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html#plugins-inputs-jdbc ...
- PVC-U排水管及管件
- secureCRT登录ubuntu 报错:`No compatible key-exchange method. The server supports these methods: diffie-hellman`
在VMware虚拟机中安装好ubuntu 20.04,已安装并启动sshd,但是使用secureCRT远程登录时则报错: Key exchange failed. No compatible key- ...
- 基于MySQL的-u选项实现如何最大程度防止人为误操作MySQL数据库
在mysql命令加上选项-U后,当发出没有WHERE或LIMIT关键字的UPDATE或DELETE时,MySQL程序就会拒绝执行.那么,我们基于MySQL提供的这项设置,就可以轻松实现如何最大程度防止 ...
- C语言指针笔记01
int num = 90; 定义一个整型变量num int* ptr = # 定义一个整型指针变量ptr,指针变量ptr的类型取决于他所需要指向的变量,如这里,ptr要指向int类型变 ...