一遍博客带你上手Servlet
概念
Servlet其实就是Java提供的一门动态web资源开发技术。本质就是一个接口。
快速入门
- 创建web项目,导入servlet依赖坐标(注意依赖范围scope,是provided,只在编译和测试时使用)
pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>tomcat-demo2</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!-- <configuration>-->
<!-- <port>80</port><!– 访问端口号 –>-->
<!-- <path>/</path><!– 项目访问路径 –>-->
<!-- </configuration>-->
</plugin></plugins>
</build>
<packaging>war</packaging>
</project>
创建:定义一个类,实现servlet接口,重写接口中的方法
在Java目录下创建类,类名后加入implements Servlet实现接口,再CTRL+o重写父类方法。配置:在类上使用@WebServlet注解,配置该servlet的访问路径
再在类名写写明路径的注解。2、3步代码如下:
package com.itheijma.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("servlet hello world");
}
public String getServletInfo() {
return null;
}
public void destroy() {
}
public void init(ServletConfig servletConfig) throws ServletException {
}
public ServletConfig getServletConfig() {
return null;
}
}
- 访问,启动tomcat,在浏览器中访问
随后在网页中访问demo1,控制台出现要输出的信息,说明servlet编写成功。

Servlet执行流程
浏览器根据路径向服务器发出请求,服务器再根据我们自定义的Servlet接口创建Servlet对象,再调用service方法,执行我们的代码。
Servlet生命周期
对象的生命周期指一个对象从被创建到销毁的整个过程。
servlet运行在servlet容器中,其生命周期由容器来管理,分为四个阶段:
- 加载和实例化:默认情况下,当servlet第一次被访问时,由容器创建servlet对象。
- 初始化:在servlet实例化之后,容器调用servlet的init()方法初始化这个对象。完成一些如加载配置文件、创建连接等初始化的工作。注:该方法只被调用一次,因为一个servlet对象只被创建一次。
- 请求处理:每次请求servlet时,servlet容器都会调用servlet的service()方法对请求进行处理。
- 服务终止:当需要释放内存或容器关闭时,容器就会调用servlet实例的destory()方法完成资源的释放。
package com.itheijma.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet(urlPatterns = "/demo2",loadOnStartup = 1)
public class ServletDemo2 implements Servlet {
/**
* 初始化方法
* 1. 调用时机:默认情况下,servlet被第一次访问时调用
* * loadOnStartup
* 2. 调用次数:1次
* @param servletConfig
* @throws ServletException
*/
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init....");
}
/**
* 提供服务方法
* 1. 调用时机:每一次servlet被访问时调用
* 2. 调用次数:多次
*
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("servlet hello world");
}
/**
* 销毁方法
* 1. 调用时机:内存释放或服务器关闭的时候,servlet对象会被销毁,调用
* 2. 调用次数:一次
*/
public void destroy() {
System.out.println("destory.....");
}
public String getServletInfo() {
return null;
}
public ServletConfig getServletConfig() {
return null;
}
}
Servlet体系结构
Servlet——Servlet体系根接口
GenericServlet——Servlet抽象实现类
HttpServlet——对HTTP协议封装的Servlet实现类
因为我们开发的是B/S架构的web项目,都是针对HTTP协议的,所以我们自定义的Servlet,会继承HttpServlet
package com.itheijma.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/demo3")
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get...");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post...");
}
}
urlPattern配置
Servlet想要被访问,必须配置其访问路径(urlPattern)
package com.itheijma.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* urlPattern: 一个Servlet可以配置多个访问路径
*/
@WebServlet(urlPatterns = {"/demo4","/demo5"})
public class ServletDemo4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo4 get.....");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
package com.itheijma.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* urlPattern
* *目录匹配 /user/*
*/
@WebServlet(urlPatterns = "/user/*")
public class ServletDemo6 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo6 get.....");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
package com.itheijma.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* urlPattern
* *扩展名匹配: *.do
*/
@WebServlet(urlPatterns = "*.do")
public class ServletDemo7 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo7 get.....");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
package com.itheijma.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* urlPattern
* *任意匹配 /* /
*/
@WebServlet(urlPatterns = "/")
public class ServletDemo8 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo8 get.....");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
一遍博客带你上手Servlet的更多相关文章
- django3开发完整博客带评价
纯django开发最完美博客 2020年5月打造最时尚博客系统教程 为了学习速度,集中精力学习django和博客开发, 没有使用其它框架,也没有使用css预处理等 这样学起来最方便, 博客前后端都完成 ...
- 玩遍博客网站,我整理了 Hexo 及其流行的风格主题
搭建博客网站是个人进入互联网世界的最常见方式之一.伴随着网站技术的发展,如何搭建博客网站已经变得非常容易了.当然,你可以选择诸如 新浪博客.CSDN.博客园 之类的大型网站,快速创建依赖于大平台的个人 ...
- 玩遍博客网站,我整理了 Hugo 及其流行的风格主题
搭建博客网站是个人进入互联网世界的最常见方式之一.伴随着网站技术的发展,如何搭建博客网站已经变得非常容易了.当然,你可以选择诸如 新浪博客.CSDN.博客园 之类的大型网站,快速创建依赖于大平台的个人 ...
- 一篇博客带你轻松应对Springboot面试
1. SpringBoot简介 SpringBoot是简化Spring应用开发的一个框架.他整合了Spring的技术栈,提供各种标准化的默认配置.使得我们可以快速开发Spring项目,免掉xml配置的 ...
- 一篇博客带你入门Flask
一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...
- 一篇博客带你轻松应对java面试中的多线程与高并发
1. Java线程的创建方式 (1)继承thread类 thread类本质是实现了runnable接口的一个实例,代表线程的一个实例.启动线程的方式start方法.start是一个本地方法,执行后,执 ...
- InputStream和OutputStream的一遍博客 分析非常到位
http://www.cnblogs.com/springcsc/archive/2009/12/03/1616187.html
- 忍不住还是手写了一遍博客的css
F12边调边改,的一点一点撸出来这个效果.感觉已经可以了.日历感觉没什么用直接隐藏了.
- 从零开始,搭建博客系统MVC5+EF6搭建框架(5),博客详情页、留言、轮播图管理、右侧统计博文
一.博客系统进度回顾 上一遍博客介绍到,系统已经实现到了发布以及前台布局展示,接下来就是实现一些,详情页,留言.轮播图管理.右侧博文统计信息实现. 二.博客系统详情页实现 2.1先来看看详情页展示的效 ...
- 第一篇博客-MVC路由简述
一直念叨着写博客,可是迟迟不见下笔,工作到现在,技术长进了一点,但是记的东西都很杂,也没个思路,也不知道怎么去写一遍博客,现在在做MVC,写一点跟MVC有关的吧. 我们都知道MVC程序的所有请求都是先 ...
随机推荐
- vue-固定头部-内容可滚动
<div class="show-box"> <div class="show-top"> ...
- js过滤filter 按条件过滤
const dataList = this.formData.tableData.filter(item => item.name !== '');
- 十大经典排序之快速排序(C++实现)
快速排序 通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小.之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的. 思路: (1)选择基准:从数列中挑出一个 ...
- adb shell input keyevent 控制按键输入的数值
数值xx如下 KEYCODE_CALL 进入拨号盘 5KEYCODE_ENDCALL 挂机键 6KEYCODE_HOME 按键Home 3KEYCODE_MENU 菜单键 82KEYCODE_BACK ...
- Error java 错误 不支持发行版本5 ( 完美解决版)
问题 在Intellij idea中新建了一个Maven项目,运行时报错如下:Error : java 不支持发行版本5 解决方案 1. 原因 是因为ideal中默认配置中有几个地方的jdk版本与实际 ...
- mysql主从复制常见问题(useing version:8)
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ...
- Assert的使用和简单解释
Assert 的简单使用 Document d = Jsoup.connect("http://www.baidu.com").get(); Assert.notNull(d, & ...
- 2020/03/25 CSS相关知识点
2020-03-25 16:35:03 又是一个风和日丽的下午!今天的内容比较多 真是令人头大 ,手速又慢所以缺的可能比较多,而且这东西还是多靠实践为好. 文件下载地址: https://share. ...
- windows系统错误代码
0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系统找不到指定的路径. 4 系统无法打开文件. 5 拒绝访问. 6 句柄无效. 7 存储控制块被损坏. ...
- cesium 3d tileset 问题总结
Cesium 3d Tileset 中 i3dm 中存储的模型坐标为笛卡尔坐标,占四个字节,因为地球半径比较大,所以只有整数位和小数点后1位有效,因此会损失精度.对于要求精度比较高的模型,会发现位置偏 ...