本文源码:GitHub·点这里 || GitEE·点这里

一、核心API简介

1、Servlet执行流程

Servlet是JavaWeb的三大组件之一(Servlet、Filter、Listener),它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:接收请求数据;处理请求;完成响应。

2、核心API简介

API 作用描述
ServletConfig 获取servlet初始化参数和servletContext对象。
ServletContext 在整个Web应用的动态资源之间共享数据。
ServletRequest 封装Http请求信息,在请求时创建。
ServletResponse 封装Http响应信息,在请求时创建。

二、ServletConfig接口

1、接口简介

容器在初始化servlet时,为该servlet创建一个servletConfig对象,并将这个对象通过init()方法来传递并保存在此Servlet对象中。核心作用:1.获取初始化信息;2.获取ServletContext对象。

2、代码案例

  • 配置文件
<servlet>
<init-param>
<param-name>my-name</param-name>
<param-value>cicada</param-value>
</init-param>
<servlet-name>servletOneImpl</servlet-name>
<servlet-class>com.node02.servlet.impl.ServletOneImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletOneImpl</servlet-name>
<url-pattern>/servletOneImpl</url-pattern>
</servlet-mapping>
  • API用法
public class ServletOneImpl implements Servlet {

    @Override
public void init(ServletConfig servletConfig) throws ServletException {
String servletName = servletConfig.getServletName() ;
System.out.println("servletName="+servletName);
String myName = servletConfig.getInitParameter("my-name") ;
System.out.println("myName="+myName);
Enumeration paramNames = servletConfig.getInitParameterNames() ;
while (paramNames.hasMoreElements()){
String paramKey = String.valueOf(paramNames.nextElement()) ;
String paramValue = servletConfig.getInitParameter(paramKey) ;
System.out.println("paramKey="+paramKey+";paramValue="+paramValue);
}
ServletContext servletContext = servletConfig.getServletContext() ;
servletContext.setAttribute("cicada","smile");
}
}

三、ServletContext接口

1、接口简介

一个项目只有一个ServletContext对象,可以在多个Servlet中来获取这个对象,使用它可以给多个Servlet传递数据,该对象在Tomcat启动时就创建,在Tomcat关闭时才会销毁!作用是在整个Web应用的动态资源之间共享数据。

  • 获取方式
1、ServletConfig#getServletContext();
2、GenericServlet#getServletContext();
3、HttpSession#getServletContext()
4、ServletContextEvent#getServletContext()

2、四大域对象

ServletContext是JavaWeb四大域对象之一:

1、PageContext;
2、ServletRequest;
3、HttpSession;
4、ServletContext;

所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据。

3、代码案例

  • 配置文件
<context-param>
<param-name>my-blog</param-name>
<param-value>2019-11-19</param-value>
</context-param>
<servlet>
<servlet-name>servletTwoImpl</servlet-name>
<servlet-class>com.node02.servlet.impl.ServletTwoImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletTwoImpl</servlet-name>
<url-pattern>/servletTwoImpl</url-pattern>
</servlet-mapping>
  • API用法
public class ServletTwoImpl extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
// 1、参数传递
ServletContext servletContext = this.getServletContext() ;
String value = String.valueOf(servletContext.getAttribute("cicada")) ;
System.out.println("value="+value);
// 2、获取初始化参数
String myBlog = servletContext.getInitParameter("my-blog") ;
System.out.println("myBlog="+myBlog);
// 3、获取应用信息
String servletContextName = servletContext.getServletContextName() ;
System.out.println("servletContextName="+servletContextName);
// 4、获取路径
String pathOne = servletContext.getRealPath("/") ;
String pathTwo = servletContext.getRealPath("/WEB-INF/") ;
System.out.println("pathOne="+pathOne+";pathTwo="+pathTwo);
response.getWriter().print("执行:doGet; value:"+value);
}
}

四、ServletRequest接口

1、接口简介

HttpServletRequest接口继承ServletRequest接口,用于封装请求信息,该对象在用户每次请求servlet时创建并传入servlet的service()方法,在该方法中,传入的servletRequest将会被强制转化为HttpservletRequest对象来进行HTTP请求信息的处理。核心作用:1.获取请求报文信息;2.获取网络连接信息;3.获取请求域属性信息。

2、代码案例

  • 配置文件
<servlet>
<servlet-name>servletThreeImpl</servlet-name>
<servlet-class>com.node02.servlet.impl.ServletThreeImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletThreeImpl</servlet-name>
<url-pattern>/servletThreeImpl</url-pattern>
</servlet-mapping>
  • API用法
public class ServletThreeImpl extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// http://localhost:6003/servletThreeImpl?myName=cicada
String method = request.getMethod();
System.out.println("method="+method); // GET
String requestURL = request.getRequestURL().toString();
// http://localhost:6003/servletThreeImpl
System.out.println("requestURL="+requestURL);
String requestURI = request.getRequestURI();
System.out.println("requestURI="+requestURI); // /servletThreeImpl
String queryString = request.getQueryString() ;
System.out.println("queryString="+queryString); // myName=cicada
String myName = request.getParameter("myName");
System.out.println("myName="+myName); // cicada
}
}

五、ServletResponse接口

1、接口简介

HttpServletResponse继承自ServletResponse,封装了Http响应信息。客户端每个请求,服务器都会创建一个response对象,并传入给Servlet.service()方法。核心作用:1.设置响应头信息;2.发送状态码;3.设置响应正文;4.重定向;

2、代码案例

  • 配置文件
<servlet>
<servlet-name>servletFourImpl</servlet-name>
<servlet-class>com.node02.servlet.impl.ServletFourImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletFourImpl</servlet-name>
<url-pattern>/servletFourImpl</url-pattern>
</servlet-mapping>
  • API用法
public class ServletFourImpl extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8") ;
response.setCharacterEncoding("UTF-8");
response.setStatus(200) ;
response.getWriter().print("Hello,知了");
}
}

3、转发和重定向

  • 转发

服务器端进行的页面跳转的控制 ;

request.getRequestDispatcher("/转发地址").forward(request, response);
  • 重定向

服务端响应跳转信息,浏览器端进行的页面跳转 ;

response.sendRedirect("重定向地址");
  • 转发和重定向对比
区别 转发 重定向
地址栏 不变 变化
跳转 服务端跳转 浏览器端跳转
请求次数 一次 两次
域中数据 不会丢失 丢失

六、源代码地址

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent

JavaEE基础(02):Servlet核心API用法详解的更多相关文章

  1. Hadoop生态圈-zookeeper的API用法详解

    Hadoop生态圈-zookeeper的API用法详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.测试前准备 1>.开启集群 [yinzhengjie@s101 ~] ...

  2. Java基础篇(04):日期与时间API用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.时间和日期 在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作用,例如同一个时间节点下的数据生成,基于时间范围的各种数据统计和分 ...

  3. FFmpeg原始帧处理-滤镜API用法详解

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10429145.html 在FFmpeg中,滤镜(filter)处理的是未压缩的原始音视频 ...

  4. Java并发编程(06):Lock机制下API用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Lock体系结构 1.基础接口简介 Lock加锁相关结构中涉及两个使用广泛的基础API:ReentrantLock类和Condition接 ...

  5. C#基础系列——多线程的常见用法详解

    前言:前面几节分别介绍了下C#基础技术中的反射.特性.泛型.序列化.扩展方法.Linq to Xml等,这篇跟着来介绍下C#的另一基础技术的使用.最近项目有点紧张,所以准备也不是特别充分.此篇就主要从 ...

  6. 《Java基础——break与continue用法详解》

    Java基础--break与continue用法详解       1. break语句: 规则: 1. 仅用于循环语句和switch语句当中,用于跳出循环. 2. 当只有一层循环时,则直接跳出循环,不 ...

  7. jQuery 事件用法详解

    jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jque ...

  8. lsof 命令用法详解

    lsof 命令用法详解 作用 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所 ...

  9. Java基础13:反射与注解详解

    Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...

随机推荐

  1. Elasticsearch6.x集群部署

    一.准备阶段 三台ubuntu系统机器 ip 计算机名 192.168.2.132 master 192.168.2.133 slave1 192.168.2.134 slave2 下载: jdk-8 ...

  2. COO 与 CSR 稀疏矩阵存取格式;

    稀疏矩阵是指矩阵中元素大部分是0的矩阵,事实上,实际问题中大规模矩阵基本上是稀疏矩阵,很多稀疏度在90%甚至99%以上:因此我们需要有高效的稀疏矩阵存储格式. 本文参考了 https://www.cn ...

  3. Scrapy进阶知识点总结(四)——Item Pipeline

    Item Pipeline Item Pipeline调用发生在Spider产生Item之后.当Spider解析完Response之后,Item就会传递到Item Pipeline,被定义的Item ...

  4. 外行人都能看懂的WebFlux,错过了血亏!

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 本文知识点架构: 如果有关注我公众号文章的同学就会发 ...

  5. 网站搭建 - 虚拟机的安装 - Linux 本地网站搭建第一步

    搭建网站-1-域名申请参见公众号 生物信息系统(swxxxt) 搭建网站-域名绑定见稍后的一章,就是直接点解析,然后就完事了,可以不看的. 首先准备材料: 先装虚拟机,会要求重启,那就重启吧,安装界面 ...

  6. nyoj 97-兄弟郊游问题(数学)

    97-兄弟郊游问题 内存限制:64MB 时间限制:3000ms 特判: No 通过数:18 提交数:32 难度:2 题目描述: 兄弟俩骑车郊游,弟弟先出发,每分钟X米,M分钟后,哥哥带一条狗出发.以每 ...

  7. 文件系统类型(ext4、xfs、fat32、vfat、ntfs、....)

    Linux 1.Linux:存在几十个文件系统类型:ext2,ext3,ext4,xfs,brtfs,zfs(man 5 fs可以取得全部文件系统的介绍) 不同文件系统采用不同的方法来管理磁盘空间,各 ...

  8. C语言程序设计100例之(17):百灯判亮

    例17   百灯判亮 问题描述 有序号为1.2.3.….99.100的100盏灯从左至右排成一横行,且每盏灯各由一个拉线开关控制着,最初它们全呈关闭状态.有100个小朋友,第1位走过来把凡是序号为1的 ...

  9. Spring的整体架构的认识

    Spring的整体架构的认识 一).spring是用来做什么的? spirng使用基本的JavaBean来完成以前EJB所完成的事. 二).EJB EJB: Enterprise JavaBean, ...

  10. Kibana创建索引成功,但一直不显示出来(Fielddata is disabled on text fields by default. Set fielddata=true........)

    现象 把EFK整个集群搭建完成后,通过Kibana操作界面创建索引(如图1),我创建了lile-zabbix*的索引,显示是创建成功了,但是只要我在重新刷新一次,已经创建的索引就“消失了”.后通过查看 ...