博客
关于我
JavaEE基础(02):Servlet核心API用法详解
阅读量:406 次
发布时间:2019-03-06

本文共 5688 字,大约阅读时间需要 18 分钟。

本文源码: ||

一、核心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、代码案例

  • 配置文件
my-name
cicada
servletOneImpl
com.node02.servlet.impl.ServletOneImpl
servletOneImpl
/servletOneImpl
  • 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、代码案例

  • 配置文件
my-blog
2019-11-19
servletTwoImpl
com.node02.servlet.impl.ServletTwoImpl
servletTwoImpl
/servletTwoImpl
  • 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、代码案例

  • 配置文件
servletThreeImpl
com.node02.servlet.impl.ServletThreeImpl
servletThreeImpl
/servletThreeImpl
  • 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、代码案例

  • 配置文件
servletFourImpl
com.node02.servlet.impl.ServletFourImpl
servletFourImpl
/servletFourImpl
  • 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-parentGitEE·地址https://gitee.com/cicadasmile/java-base-parent

转载地址:http://vsqkz.baihongyu.com/

你可能感兴趣的文章
【Oozie】(三)Oozie 使用实战教学,带你快速上手!
查看>>
师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
查看>>
C语言的数值溢出问题(上)
查看>>
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
查看>>
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
查看>>
android:使用audiotrack 类播放wav文件
查看>>
聊聊我的五一小假期
查看>>
数据库三个级别封锁协议
查看>>
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
查看>>
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
查看>>
SLAM学习笔记-求解视觉SLAM问题
查看>>
还在一个一个手动安装虚拟机吗?Cobbler自动部署装机一键最小化安装打把游戏就好了
查看>>
程序员应该知道的97件事
查看>>
create-react-app路由的实现原理
查看>>
openstack安装(九)网络服务的安装--控制节点
查看>>
shell编程(六)语言编码规范之(变量)
查看>>
vimscript学习笔记(二)预备知识
查看>>
SSM项目中遇到Could not autowire. No beans of ‘XXX‘ type found.错误
查看>>
Android数据库
查看>>
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
查看>>