您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

JavaEE编程基础:Servlet核心API用法详解

时间:2019-12-11 10:32:15  来源:  作者:

一、核心API简介

1、Servlet执行流程

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

2、核心API简介

JavaEE编程基础:Servlet核心API用法详解

 

二、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("重定向地址");
  • 转发和重定向对比
JavaEE编程基础:Servlet核心API用法详解

 

<END>

推荐阅读:

JavaEE编程基础:Servlet实现方式,生命周期过程

JavaEE编程基础:Servlet核心API用法详解

 



Tags:JavaEE   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、核心API简介1、Servlet执行流程Servlet是JavaWeb的三大组件之一(Servlet、Filter、Listener),它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet...【详细内容】
2019-12-11  Tags: JavaEE  点击:(70)  评论:(0)  加入收藏
▌简易百科推荐
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  顶顶架构师    Tags:面向对象   点击:(2)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(12)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(13)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(11)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(11)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(17)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(19)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(22)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条