当前位置: 移动技术网 > IT编程>开发语言>Java > JavaEE基础(02):Servlet核心API用法详解

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

2019年12月11日  | 移动技术网IT编程  | 我要评论
本文源码: "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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网