2.Servlet入门
一.Servlet简介
- Servlet为sun公司开发动态web的一门技术
- Sun公司在这些API中提供了一个接口叫做:Servlet,如果想开发Servlet程序,需要完成两个小步骤:
- 编写一个类,实现Servlet接口。
- 把开发好的java类部署到Web服务器中。
我们把实现了Servlet接口的Java程序叫做,Servlet。
二.构建一个Servlet项目
步骤:
使用Maven搭建父项目,删除src文件用于之后搭建子项目
在父项目的pom.xml中导入依赖
在父项目中搭建带有webapp骨架的子项目
由于子项目中的web.xml版本过低,修改web.xml
在子项目中添加java和resources目录
编写第一个Servlet代码:
建立HelloServlet.java 继承HttpServlet重写doGet和doPost方法
在web.xml中注册Servlet以及绑定映射的请求路径
配置Tomcat 启动项目
学习mapping映射规则,编写ErrorServlet
1.构建一个普通的Maven项目,删掉里面的src目录,目的是以后在其中建立Module产生子模块;这个空的工程就是Maven的主工程;





删除src文件夹

在pom.xml中添加依赖

<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
</dependencies>
2.添加子模块




此时可以看到父项目中pom.xml多了modules属性
<modules>
<module>servlet191127</module>
</modules>
子项目中pom.xml有
<parent>
<artifactId>LearnServlet</artifactId>
<groupId>edu.ustc</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
3.Maven环境优化
- 修改web.xml中的web-app属性为4.0
<?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"
metadata-complete="true"> <display-name>Archetype Created Web Application</display-name>
</web-app>
- 将maven项目构建完成添加java和resources目录并设置为代码和资源属性的目录

4.编写一个Servlet程序
Servlet接口Sun公司有两个默认的实现类:HttpServlet,GenericServlet
- 编写一个普通类HelloServlet,我们可以重写doGet和doPost方法。
- 实现Servlet接口,这里我们直接继承HttpServlet。

public class HelloServlet extends HttpServlet {
//由于get/post方式只是请求实现方式不同,可以相互调用,业务逻辑都一样。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter(); //响应流
writer.println("First Servlet Project");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
5.编写Servlet的映射
- 我们写的Java程序需要在web服务中注册我们写的Servlet,当用户通过浏览器访问web服务器后,服务器直接映射到我们的Servlet并且我们还要给浏览器一个可以访问的路径。

<!--注册Servlet-->
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>ustc.wzh.servlet.HelloServlet</servlet-class>
</servlet> <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
6.配置tomcat(看我的其他文章就可学会)
注:配置项目发布的路径就可以了
7.启动测试


第一个Servlet项目完成!
三.Servlet原理

四.Mapping问题
1.一个Servlet可以指定一个映射路径
<!--注册Servlet-->
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>ustc.wzh.servlet.HelloServlet</servlet-class>
</servlet> <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
2.一个Servlet可以指定多个映射路径,都能访问到
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
3.一个Servlet可以指定通用映射路径:所有/hello下的请求都能访问到
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
4.默认请求路径:任何请求都到这里
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
5.指定一些前缀或后缀的路径:都能匹配到并处理
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>*.wzh</url-pattern>
</servlet-mapping>
注:可以使用通配符的两种格式
*.扩展名: *.do 或 *.xxx
- /* : hello/*
- 但不可以混合使用 hello/*.do 是非法的
6.优先级问题:
指定了固有的映射路径优先级最高,找不到就会走默认的处理请求
例子:添加ErrorServlet

public class ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
writer.println("<h1>404</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
web.xml中添加Servlet的映射

<!--注册Servlet-->
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>ustc.wzh.servlet.ErrorServlet</servlet-class>
</servlet> <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
请求就不会进入index.jsp,所有错误请求都会进入ErrorServlet中处理,如果输入/hello则会进入HelloServlet中处理。
2.Servlet入门的更多相关文章
- HTTP协议 Servlet入门 Servlet工作原理和生命周期 Servlet细节 ServletConfig对象
1 HTTP协议特点 1)客户端->服务端(请求request)有三部份 a)请求行--请求行用于描述客户端的请求方式.请求的资源名称,以及使用的HTTP协议版本号 请求行中的GET ...
- 浅谈JavaWEB入门必备知识之Servlet入门案例详解
工欲善其事.必先利其器,想要成为JavaWEB高手那么你不知道servlet是一个什么玩意的话,那就肯定没法玩下去,那么servlet究竟是个什么玩意?下面,仅此个人观点并通过一个小小的案例来为大家详 ...
- java之servlet入门操作教程一续
本节主要是在java之servlet入门操作教程一 的基础上使用myeclipse实现自动部署的功能 准备: java之servlet入门操作教程一 中完成myFirstServlet项目的创建: ...
- servlet入门与进阶
servlet入门与进阶 1.servlet基础认知 Servlet(Server Applet):全称Java Servlet,是用Java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据, ...
- JavaWeb之Servlet入门(二)
1. 准备 在JavaWeb之Servlet入门(一)中,我们完成了第一个Servlet程序,完成了从URL到后台控制器的中转过程,接下来我们延续JavaWeb之Servlet入门(一)学习下如何传参 ...
- Servlet视频学习笔记 57-58 (servlet入门和调用过程)
网易云课堂<30天轻松掌握JavaWeb视频>servlet部分 课时57 servlet开发入门 servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术.S ...
- Servlet入门和ServletConfig、ServletContext
Servlet是一门用于开发动态web资源的技术. 若想开发一个动态web资源,需要完成以下2个步骤: 1)编写一个Java类,实现servlet接口: 2)把开发好的Java类部署到web服务器中. ...
- servlet入门学习之工作原理解析
从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力 ...
- Servlet入门实践
本文主要介绍servlet,包括入门到升入,基本上可以对servlet有一个很好的认识: 1servlet介绍: Servlet(Server Applet),全称Java Servlet,未有中 ...
- Servlet入门和HTTP。
Servlet: 1.概念:Servlet:server applet ,运行在服务器端的小程序. 浏览器在访问服务器的动态资源时,访问的是具有逻辑性的Java代码(Java类),而这里的Jav ...
随机推荐
- 记:使用IScroll.js 开发picker日历组件遇到的问题及经验总结
IScroll中文文档 第一个问题: 边界留白 就是这种,上边界(最小),下边界(最大)有两个列表的位置是不能选择的.解决的办法是: 在HTML中,添加空白节点就行了. 第二个问题:初始化之后的滚动停 ...
- 【题解】保安站岗[P2458]皇宫看守[LOJ10157][SDOI2006]
[题解]保安站岗[P2458]皇宫看守[LOJ10157][SDOI2006] 传送门:皇宫看守\([LOJ10157]\) 保安站岗 \([P2458]\) \([SDOI2006]\) [题目描述 ...
- 移动开发首页业界资讯移动应用平台技术专题 输入您要搜索的内容 基于Java Socket的自定义协议,实现Android与服务器的长连接(二)
在阅读本文前需要对socket以及自定义协议有一个基本的了解,可以先查看上一篇文章<基于Java Socket的自定义协议,实现Android与服务器的长连接(一)>学习相关的基础知识点. ...
- Vue,Javascript--时间戳的操作
new Date(parseInt(data.substring(6, data.length - 2))).toLocaleDateString(); 我这里的data记得替换成你的数据,在过滤器中 ...
- Debian 9 / Debian 10 / Ubuntu 18.04 / Ubuntu 18.10快速开启BBR加速 或 关闭BBR加速
如果使用的是Debian 9.Debian 10.Ubuntu 18.04.Ubuntu 18.10等内核高于4.9版本的系统,均可以使用此方法开启BBR加速,若你使用了Ubuntu 19.04的系统 ...
- C# 索引器(C#学习笔记05)
索引器 索引器能够使对象像数组一样被索引,使用数组的访问方式 object[x] 索引器的声明在某种程度上类似于属性的声明,例如,使用 get 和 set 方法来定义一个索引器. 不同的是,属性值的定 ...
- 第四周(1):数据分布-Python实战
数据准备 数据集地址:http://jse.amstat.org/datasets/normtemp.dat.txt 数据集描述:总共只有三列:体温.性别.心率 数据集详细描述:Journal of ...
- Java自学-异常处理 Throwable
Java Throwable类 步骤 1 : Throwable Throwable是类,Exception和Error都继承了该类 所以在捕捉的时候,也可以使用Throwable进行捕捉 如图: 异 ...
- Java自学-数字与字符串 数学方法
Java Math类常用方法 java.lang.Math提供了一些常用的数学运算方法,并且都是以静态方法的形式存在 步骤 1 : 四舍五入, 随机数,开方,次方,π,自然常数 package dig ...
- 40、js技巧(持续更新。。。)
1.深拷贝对象: const a={name:'aaa',age:11} const b=JSON.parse(JSON.stringify(a)) 2.获取数组极值: let list = [1, ...