Servlet技术详解
1、实现第一个Servlet技术
(1)新建Java文件
新建Project--》web--》Dynamic Web Project,项目名ServletTest
在src(Java Resources/src)中新建包com/liuyanzhao
然后在包内新建类名 FirstServlet
FirstServlet.java文件代码如下
- package com.liuyanzhao;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.GenericServlet;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- /*
- * @author LiuYanzhao
- */
- public class FirstServlet extends GenericServlet {
- public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException{
- //得到输出流PrinterWriter对象,Servlet使用输出流来产生响应
- PrintWriter out = response.getWriter();
- //使用输出流对象向客户端发送字符数据
- out.println("This is my First Servlet!");
- }
- }
这时候,如果我们运行tomcat,在浏览器中输入url:http://localhost:8080/ServletTest/FirstServlet
出现404,原因是没有映射对外访问的虚拟路径
具体配置方法请看第2步
(2)配置web.xml
在WebContent/WEB-INF中新建web.xml,具体代码可以参考tomcat安装目录中如下路径中的web.xml。
D:\java\apache-tomcat-7.0.72\webapps\examples\WEB-INF
这里我们的web.xml代码如下
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <web-app xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
- version="3.0"
- metadata-complete="true">
- <servlet>
- <servlet-name>FirstServlet</servlet-name>
- <servlet-class>com.liuyanzhao.FirstServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>FirstServlet</servlet-name>
- <url-pattern>/FirstServlet</url-pattern>
- </servlet-mapping>
- </web-app>
(3)重新部署项目,刷新浏览器
结果如下
补充:正常情况下,这时候修改FirstServlet.java里的输出内容,需要重新部署web项目(run as java文件),然后刷新浏览器,才能看到有变化。
2、Servlet的多重映射
Servlet多重映射指的是,同一个Servlet可以映射成几个虚拟路径(url)。也就是说,可以通过多个路径访问同一个Servlet。Servlet多重映射的实现方法有两种,具体如下
(1)配置多个<servlet-mapping>元素。如下
web.xml核心代码如下
- <servlet>
- <servlet-name>FirstServlet</servlet-name>
- <servlet-class>com.liuyanzhao.FirstServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <!-- 映射为 FirstServlet -->
- <servlet-name>FirstServlet</servlet-name>
- <url-pattern>/FirstServlet</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <!-- 映射为 Test01 -->
- <servlet-name>FirstServlet</servlet-name>
- <url-pattern>/Test01</url-pattern>
- </servlet-mapping>
(2)重启tomcat服务器,打开浏览器
①在浏览器输入 http://localhost:8080/ServletTest/Test01
②在浏览器输入 http://localhost:8080/ServletTest/ServletFirst
(2)在一个<servlet-mapping>元素下配置多个<url-pattern>子元素,具体代码如下
web.xml核心代码如下
- <servlet>
- <servlet-name>FirstServlet</servlet-name>
- <servlet-class>com.liuyanzhao.FirstServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <!-- 映射为 FirstServlet 和 Test01 -->
- <servlet-name>FirstServlet</servlet-name>
- <url-pattern>/FirstServlet</url-pattern>
- <url-pattern>/Test01</url-pattern>
- </servlet-mapping>
结果和(1)相同
3、设置默认Servlet
如果某个映射路径是 政协刚(/),那么这个Servlet就是当前Web应用的默认Servlet。也就是说,如果Servlet服务器在接受到访问请求时,如果在web.xml文件中找不到匹配的<Servlet-mapping>元素的URL,就会将访问请求交给默认Servlet处理,具体如下
(1)我们在src下新建一个Default.java文件
代码如下
- package com.liuyanzhao;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.GenericServlet;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- /*
- * @author LiuYanzhao
- */
- public class Default extends GenericServlet {
- public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException{
- //得到输出流PrinterWriter对象,Servlet使用输出流来产生响应
- PrintWriter out = response.getWriter();
- //使用输出流对象向客户端发送字符数据
- out.println("This is a Default Page");
- }
- }
(2)然后在web.xml里加映射
- <servlet>
- <servlet-name>Default</servlet-name>
- <servlet-class>com.liuyanzhao.Default</servlet-class>
- </servlet>
- <servlet-mapping>
- <!-- 映射为 /,即所有的虚拟路径(在web.xml里找不到的) -->
- <servlet-name>Default</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
(3)重新部署tomcat,然后打开浏览器
①在地址栏输入url:http://localhost:8080/ServletTest
显然,本来如果不设置默认Servlet,访问这个url,一定是404的
②在地址栏输入url:http://localhost:8080/ServletTest/abc
道理和①一样
③在地址栏输入url:http://localhost:8080/ServletTest/FirstServlet
因为只有web.xml里不存在那个路径,我们才会使用默认Servlet,因为FirstServlet这个路径是存在的,自然会使用他自己的映射。
4、ServletConfig接口
ServletConfig:代表当前Servlet在web.xml中的配置信息,例如,文件使用的编码,公司的名字等,这些信息只需要放在web.xml里一个和多个<init-param>中
- String getServletName() -- 获取当前Servlet在web.xml中配置的名字
- String getInitParameter(String name) -- 获取当前Servlet指定名称的初始化参数的值
- Enumeration getInitParameterNames() -- 获取当前Servlet所有初始化参数的名字组成的枚举
- ServletContext getServletContext() -- 获取代表当前web应用的ServletContext对象
(1)在web.xml文件中为Servlet配置一些参数信息
- <servlet>
- <servlet-name>SecondServlet</servlet-name>
- <servlet-class>com.liuyanzhao.SecondServlet</servlet-class>
- <init-param>
- <param-name>name1</param-name>
- <param-value>value1</param-value>
- </init-param>
- <init-param>
- <param-name>encode</param-name>
- <param-value>utf-8</param-value>
- </init-param>
- <init-param>
- <param-name>author</param-name>
- <param-value>LiuYanzhao</param-value>
- </init-param>
- </servlet>
上面的参数信息很明显,<init-param>表示要设置的参数,该节点的<param-name>表示参数名称,<param-value>表示参数的值。
(2)编写 SecondServlet类,实现读取web.xml文件中的参数信息
- package com.liuyanzhao;
- import java.io.*;
- import java.util.Enumeration;
- import javax.servlet.*;
- import javax.servlet.http.*;
- /*
- * @author LiuYanzhao
- */
- public class SecondServlet extends HttpServlet {
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //防止中文参数乱码
- response.setContentType("text/html;charset=utf-8");
- request.setCharacterEncoding("utf-8");
- PrintWriter out = response.getWriter();
- //拿到init方法中的ServletConfig对象
- ServletConfig config = this.getServletConfig();
- // --获取当前Servlet 在web.xml中配置的名称(用的不多)
- String sName = config.getServletName();
- out.println("当前Servlet 在web.xml中配置的名称:"+sName+"<br/>");
- // --获取当前Servlet中配置的初始化参数(只能获取一个)经常用到
- String value = config.getInitParameter("name2");
- out.println(value+"<br/>");
- // --获取当前Servlet中配置的初始化参数(全部获取)经常用到
- Enumeration enumration = config.getInitParameterNames();
- while(enumration.hasMoreElements()){
- String name = (String) enumration.nextElement();
- String value1 = config.getInitParameter(name);
- out.println(name+":"+value1+"<br/>");
- }
- }
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- this.doGet(req, resp);
- }
- }
(3)部署项目,打开浏览器
输入url:http://localhost:8080/ServletTest/SecondServlet
5、ServletContext 接口
暂时不写了
参考这里:https://liuyanzhao.com/4867.html
本文地址:https://liuyanzhao.com/4847.html
Servlet技术详解相关推荐
- 深度好文之Servlet技术详解(九)
目录 一.自启动Servlet 1.自启动Servlet特点 2.通过自启动Servlet实现配置信息的读取 二.Servlet线程安全问题 三.Servlet的url-pattern配置 1.URL ...
- 【H.264/AVC视频编解码技术详解】十九:熵编码算法(5)——H.264的CABAC(上):语法元素的二值化方法...
<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...
- Linux磁盘阵列技术详解(二)--raid 1创建
我在Linux磁盘阵列技术详解(一)里已经详细介绍了几种RAID磁盘阵列方式,原理以及创建raid 0 的详细步骤.那么这篇文档就着重讲解如何创建raid 1的技术: 步骤如下: ① 分区 同样我们还 ...
- 《Hadoop技术详解》一导读
前 言 Hadoop技术详解 本书采用的约定 本书采用以下排版约定. 斜体 用于表明新的术语.URL.电子邮件地址.文件名和文件扩展名. 等宽字体 用于程序清单,正文段落中有关的程序元素,如变量及函数 ...
- 科普:5G网络关键技术详解
不久前,中国华为公司主推的Polar Code(极化码)方案,成为5G控制信道eMBB场景编码方案.消息一出,在网络上就炸开了锅,甚至有媒体用"华为碾压高通,拿下5G时代"来形容这 ...
- zookeeper 分布式过程协同技术详解.pdf_阿里大牛耗时18个月整理这份ZooKeeper分布式详解文档...
前言 摩尔定律揭示了集成电路每18个月计算性能就会增加一倍.随着信息的飞速膨胀,很多应用都无法依赖单个服务器的性能升级来处理如此庞大的数据量,分布式系统和应用越来越受到人们的青睐.分布式系统和应用不仅 ...
- Qtum量子链研究院:Plasma技术详解(下篇)
Plasma的设计模型有两个主要的分支:Plasma MVP(Minimal Viable Plasma,最小可行的Plasma)和Plasma Cash.Plasma MVP的目标是为最基本的可用的 ...
- Python数据科学-技术详解与商业实践视频教程
Python数据科学-技术详解与商业实践(八大案例) 网盘地址:https://pan.baidu.com/s/13QrR_5Er6LgWCWzSb7qOrQ 提取码:s7vw 备用地址(腾讯微云): ...
- Java Servlet关键点详解
Java Servlet关键点详解 1.理解Servlet的生命周期 Servlet引擎控制着Servlet的生命周期 Servlet的生命周期由以下三个方法进行描述(五个生命周期阶段) 1)初始化 ...
- 视频直播技术详解(8)直播云 SDK 性能测试模型
<视频直播技术详解>系列之八:直播云 SDK 性能测试模型 牛小七2016年10月12日发布在 视频直播技术详解 七牛云于 6 月底发布了一个针对视频直播的实时流网络 LiveNet 和完 ...
最新文章
- SAP WM初阶之2-Step Picking创建的Group查询报表
- 【Java学习笔记之二十五】初步认知Java内部类
- 电脑下载python教程-python教程pdf下载
- C陷阱与缺陷学习笔记
- CentOS 6.5系统安装配置图解教程(详细图文)
- TransparentBitmap函数设置透明位图的原理分析
- 创业思路(1) - 收藏夹分享平台
- 什么是JAX-RS注释? (第3部分)
- 备份数据库的expdp语句_【ORACLE语句备份】数据库表同步 ——定时任务管理器(EXPDP导出,IMPDP导入)...
- cdc工具 postgresql_SQLServer CDC数据通过Kafka connect实时同步至分析型数据库 AnalyticDB For PostgreSQL及OSS-阿里云开发者社区...
- android多申请内存,Android内存等信息
- 补码加减法判断进位判断是否溢出的总结
- 将某一列转换为字符类型_还在为数据清洗抓狂?这里有一个简单实用的清洗代码集...
- 3d胆码计算机方法,3D百十个位定胆技巧准确率95
- html中多一条黑线,Word页面中上下各有一条黑线怎样去掉?
- 1、spss中做相关分析
- 后门攻击阅读笔记,Input-aware dynamic backdoor attack
- OpenCV 图像无法显示 (python)
- unity设置iOS手机震动
- SONY索尼A7S3意外断电后内存卡找不到视频文件的数据恢复