JavaEE基础(02):Servlet核心API用法详解
本文源码: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