本文源码: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 {@Overridepublic 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 {@Overrideprotected 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 {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// http://localhost:6003/servletThreeImpl?myName=cicadaString method = request.getMethod();System.out.println("method="+method); // GETString requestURL = request.getRequestURL().toString();// http://localhost:6003/servletThreeImplSystem.out.println("requestURL="+requestURL);String requestURI = request.getRequestURI();System.out.println("requestURI="+requestURI); // /servletThreeImplString queryString = request.getQueryString() ;System.out.println("queryString="+queryString); // myName=cicadaString 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 {@Overrideprotected 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. matlab ext2int函数,Ext2 核心 API 中文详解.pdf

    Ext2 核心 API 中文详解 Andyu QQ Ext2 核心 API 中文详解 序.关于Ext2 核心API 1.关于EXT 2.02 为联合Adobe, Ext2.02 当中重要的一项便是针对 ...

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

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

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

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

  4. JAVA8 日期和时间(LocalDate、LocalDateTime、ZoneId、Duration、Period、Instant)API 用法详解

    文章目录 一.LocalDate.LocalTime.Instant.Duration.Period 1.LocalDate和LocalTime a.LocalDate b.LocalTime 2.合 ...

  5. 【Python基础教程】for循环用法详解

    如果明确的知道循环执行的次数或者是要对一个容器进行迭代(后面会讲到),那么我们推荐使用for-in循环,例如下面代码中计算 例: 用for循环实现1~100求和 sum = 0 for x in ra ...

  6. MySQL基础教程之IN的用法详解

    MySQL IN 语法 IN 运算符用于 WHERE 表达式中,以列表项的形式支持多个选择,语法如下: ? 1 2 WHERE column IN (value1,value2,...) WHERE ...

  7. oracle基础|oracle的认知|Select用法详解

    目录 一.前言: 1.为什么学习数据库?(两个概念) 关系型数据库: 2.Oracle的认知(一个认知)

  8. python中的real函数_RealPython 基础教程:Python 字符串用法详解

    字符串是一个由字符数据组成的序列.字符串处理是编程必备的技能,很少有应用程序不需要操作字符串的. Python 提供了丰富的运算符.函数和类方法来操作字符串. 通过本文,你将了解如何访问字符串以及提取 ...

  9. Future 用法详解

    Future 用法详解 前言 其他知识点 Java 多线程基础 深入理解aqs ReentrantLock用法详解 深入理解信号量Semaphore 深入理解并发三大特性 并发编程之深入理解CAS 深 ...

最新文章

  1. 吹灭蛋糕上蜡烛的节能小车
  2. Apache solr(二).
  3. ubuntu14.04使用rails连接mysql数据库
  4. HTTP 和 Socket 的区别
  5. 从DevOps到AIOps,阿里如何实现智能化运维?
  6. JDBC的入门案列以及JDBC的对事务的管理
  7. mysql 选择前4个_mysql从4个表中选择
  8. java jar 版本号,比较两个jar包的版本号
  9. 【重点BFS】LeetCode 127. Word Ladder
  10. django 1.11.16之环境搭建
  11. 微信小程序获取Token 存储2小时
  12. 山东大学高频电子线路实验五 混频器实验详解
  13. 记一次网易云解锁灰色音乐代理异常
  14. [转]java代码混淆以及及IDEA中springboot使用Allatori进行混淆
  15. hadoop 运行过程中出现Call to localhost/127.0.0.1:9000 failed on connection exception错误。
  16. DSP 增强型脉宽调制ePWM
  17. python爬取网站视频保存到本地
  18. 锁屏状态可以远程连接服务器,锁屏状态下如何远程控制安卓手机? 向日葵远程控制完美诠释...
  19. 人机的未来关键在于发现新的逻辑体系
  20. 坚挺市场下,ICT企业如何赢盈并重持续增长–2022年B2B企业新增长趋势之ICT篇

热门文章

  1. (王道408考研操作系统)第一章计算机系统概述-第一节4:中断和异常
  2. 栈溢出笔记1.11 SafeSEH
  3. ssh本地端口转发,远程端口转发,隧道(这个解释不饶)
  4. http响应头中X-Frame-Options的作用及危害
  5. Python中使用Redis的批处理工具pipeline(这种方法从底层思考效率还是低于“订阅发布机制”)
  6. 《论文笔记》Robust Cooperative UAV Visual SLAM
  7. P,NP,NPC,NP-Hard,co-NP问题辨析
  8. 汇编语言:利用栈的特性对内存数据进行逆置
  9. Oracle bug 使用max或min函数into到一个char类型报字符缓冲区太小的错误
  10. python序列中是否包含某个元素