• Servlet中的几个重要的对象(转)


     讲解四大类,ServletConfig对象,ServletContext对象、request对象,response对象

    ServletConfig对象

            获取途径:getServletConfig(); 

            功能:上面大概提及了一下,能得到四个东西,

                  

                getServletName();  //获取servlet的名称,也就是我们在web.xml中配置的servlet-name

                getServletContext(); //获取ServletContext对象,该对象的作用看下面讲解

                getInitParameter(String); //获取在servlet中初始化参数的值。这里注意与全局初始化参数的区分。这个获取的只是在该servlet下的初始化参数

                    

                 getInitParameterNames(); //获取在Servlet中所有初始化参数的名字,也就是key值,可以通过key值,来找到各个初始化参数的value值。注意返回的是枚举类型

                    

                    

                    

               注意:在上面我们所分析的源码过程中,我们就知道,其实可以不用先获得ServletConfig,然后在获取其各种参数,可以直接使用其方法,比如上面我们用的ServletConfig().getServletName();可以直接写成getServletName();而不用在先获取ServletConfig();了,原因就是在GenericServlet中,已经帮我们获取了这些数据,我们只需要直接拿就行。

    ServletContext对象

               获取途径:getServletContext(); 、getServletConfig().getServletContext();  //这两种获取方式的区别就跟上面的解释一样,第一种是直接拿,在GenericServlet中已经帮我们用getServletConfig().getServletContext();拿到了ServletContext。我们只需要直接获取就行了,第二种就相当于我们自己在获取一遍,两种读是一样的。

               功能:tomcat为每个web项目都创建一个ServletContext实例,tomcat在启动时创建,服务器关闭时销毁,在一个web项目中共享数据,管理web项目资源,为整个web配置公共信息等,通俗点讲,就是一个web项目,就存在一个ServletContext实例,每个Servlet读可以访问到它。

                  1、web项目中共享数据,getAttribute(String name)、setAttribute(String name, Object obj)、removeAttribute(String name)

                      setAttribute(String name, Object obj) 在web项目范围内存放内容,以便让在web项目中所有的servlet读能访问到

                      getAttribute(String name) 通过指定名称获得内容

                      removeAttribute(String name) 通过指定名称移除内容   

                       

                         

                        

                  2、整个web项目初始化参数 //这个就是全局初始化参数,每个Servlet中都能获取到该初始化值

                      getInitPatameter(String name)  //通过指定名称获取初始化值

                      getInitParameterNames()  //获得枚举类型

                       web.xml 配置 整个web项目的初始化

                          

                          

                          

                  3、获取web项目资源

                      3.1获取web项目下指定资源的路径:getServletContext().getRealPath("/WEB-INF/web.xml")

                        

                        

                      3.2获取web项目下指定资源的内容,返回的是字节输入流。InputStream getResourceAsStream(java.lang.String path)

                        前提知识:需要了解流。不知道的可以去看看IO流总结的文章

                        

                        输出内容截图一部分

                        

                   4、getResourcePaths(java.lang.String path)  指定路径下的所有内容。

                        

                        

                        

                    5还有很多别的方法,暂时用到的就这几个了,以后需要在用的,就查看源码,看API。

    request对象

              我们知道,request就是将请求文本封装而成的对象,所以通过request能获得请求文本中的所有内容,请求头、请求体、请求行 。

                    

                1、请求行内容的获取。

                  

                  

                    

                2请求头的获取

                    随便百度一个东西,然后查看的请求头,包括以下这些内容,稍作了解。

                    

                    String getHeader(java.lang.String name) 获得指定头内容String【】

                      

                      

                    long getDateHeader(java.lang.String name) 获得指定头内容Date

                    int getIntHeader(java.lang.String name)  获得指定头内容int

                    Enumeration getHeaders(java.lang.String name) 获得指定名称所有内容

                3请求体的获取 -- 请求参数的获取

                   分两种,一种get请求,一种post请求

                   get请求参数:http://localhost:8080/test01/MyServlet?username=jack&password=1234

                   post请求参数: <form method="post"><input type="text" name="username">

                    String request.getParameter(String) 获得指定名称,一个请求参数值。

                    String[] request.getParameterValues(String) 获得指定名称,所有请求参数值。例如:checkbox、select等

                    Map<String , String[]> request.getParameterMap() 获得所有的请求参数  

        

                4请求转发

                    request.getRequestDispatcher(String path).forward(request,response);  //path:转发后跳转的页面,这里不管用不用"/"开头,都是以web项目根开始,因为这是请求转发,请求转发只局限与在同一个web项目下使用,所以这里一直都是从web项目根下开始的,

                    web项目根:

                        开发:G:Workspaces est01WebRoot..

                        运行时:D:java omcatapache-tomcat-7.0.53webapps est01..

                     web站点根:

                        运行时:D:java omcatapache-tomcat-7.0.53webapps..

                    从这里可以看出,web项目根就是从该web项目名开始,所以我们请求转发时,只需要接着项目名后面需要访问的路径写就行了,

                    特点:浏览器中url不会改变,也就是浏览器不知道服务器做了什么,是服务器帮我们跳转页面的,并且在转发后的页面,能够继续使用原先的request,因为是原先的request,所以request域中的属性都可以继续获取到。

                    

    response对象

              

            常用的一个方法:response.setHeader(java.lang.String name, java.lang.String value) 设置指定的头,一般常用。

                 例如:设置每隔3秒就自动刷新一次,

                  response.setHeader("Refresh",3);

                  

                  

                  这样可以看到现在时间的秒数,会发现每隔三秒就会自动刷新一次页面。

            这个最重要的一个就是重定向,其他的一些操作都被封装到response对象中了,重点讲解重定向

              重定向(页面跳转)

                方式一:手动方案

                    response.setStatus(302);  //状态码302就代表重定向

                    response.setHeader("location","http://www.baidu.com");

                方式二:使用封装好的,通过response.sendRedirect("http://www.baidu.com");

              特点:服务器告诉浏览器要跳转的页面,是浏览器主动去跳转的页面,浏览器知道,也浏览器的地址栏中url会变,是浏览器重新发起一个请求到另外一个页面,所以request是重新发起的,跟请求转发不一样。

                注意:response.sendRedirect(path);  //

                第一种:response.sendRedirect("/test01/MyServlet01");  //使用了"/"开头,说明是从web站点根开始,所以需要写test01/MyServlet01

                第二种:response.sendRedirect("MyServlet01");  //没有使用"/"开头,说明是从web项目根开始,那么就无需写test01了。

                重定向没有任何局限,可以重定向web项目内的任何路径,也可以访问别的web项目中的路径,并且这里就用"/"区分开来,如果使用了"/"开头,就说明我要重新开始定位了,不访问刚才的web项目,自己写项目名,如果没有使用"/"开始,那么就知道是访问刚才那个web项目下的servlet,就可以省略项目名了。就是这样来区别。

  • 相关阅读:
    【JSP】上传图片到数据库中
    【MySQL】ERROR 1005: Can't create table (errno: 150)的错误解决办法
    【汇编】16进制转换成10进制(三种方法)
    书单
    C实现一个NTP客户端,可以从指定IP的NTP服务器获取时间戳
    crosss compile VLC with OpenMAX on ARM board(RockChip RK3399),in order to use Hard Acceleration when decode video
    win7结束进程 时,提示“拒绝访问”、“没有此任务的实例运行”怎么办?
    驱动文件中只有cat/inf/dll文件,怎么安装
    MFC开发中添加自定义消息和消息响应函数
    MFC中开发ocx控件,html容器收不到ocx的事件Event
  • 原文地址:https://www.cnblogs.com/yangkunyk/p/7905618.html
Copyright © 2020-2023  润新知