欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaEE基础(02):Servlet核心API用法详解

程序员文章站 2022-09-27 16:11:38
本文源码: "GitHub·点这里" || "GitEE·点这里" 一、核心API简介 1、Servlet执行流程 Servlet是JavaWeb的三大组件之一(Servlet、Filter、Listener),它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet ......

本文源码: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用法详解