servlet对象servletConfig_servletcontext_request_response

一、ServletConfig
1.代表当前Servlet的web.xml中的配置信息
           ServletConfig conf = this.getServletConfig();
2.获取Servlet的名字
             getServletName()
3.获取Servlet中配置的Servlet初始化参数
             web里构建参数:
             在servlet标签下
             
          name
          nameValue
             

             getInitParameter("")
4.获取ServletContext对象
             getServletContext()
二、ServletContext
代表当前web应用
在服务器启动,web应用被加载后立即创建代表当前web应用的ServletContext对象,此对象一直驻留在内存中,直到web应用被移除出容器,或服务器关闭时,webServletContext对        象随着web应用的销毁而销毁
config.getServletContext();
this.getServletContext();

1.作为域对象在整个web应用范围内共享数据
作用范围:整个web应用范围
生命周期:随着web应用启动而创建,随着web应用的销毁而销毁
this.getServletContext().setAttribute("param1", "avb");有缓存问题,要刷新。
在任何servlet里设置属性,在另外一个servlet里就能获取
context.getAttribute("param1") 
2.获取整个web应用的初始化参数
                在web-app标签下:
               
 param1
 value1
               

    
context.getInitParameter("");

3.实现Servlet的转发。
//获取转发器 RequestDispatcher
this.getServletContext().getRequestDispatcher("/servlet/Demo3Servlet").forward(request, response);
4.获取资源
this.getServletContext().getRealPath("/1.txt")//---在传入的路径前拼接当前web应用的硬盘路径,返回的就是需要的资源的硬盘路径
*5.利用类加载器读取资源
    String path = Demo4.class.getClassLoader().getResource                      ("config.properties").getPath();
    找该类的加载开始路径就是WebRoot目录下classes目录开始

三、ServletResponse  -- HttpServletResponse
1.向浏览器输出一段数据
输出数据时的乱码问题原理,解决方案
           1)字节输出流
            设置浏览器打开的编码
            response.setHeader("Content-Type", "text/html;charset=utf-8");
            设置输入时的字节编码
   response.getOutputStream().write("中国".getBytes("utf-8"));
           2)字符输出流
            /*response.setCharacterEncoding("uft-8");
response.setHeader("Content-Type", "text/html;charset=utf-8");*/
                 下面的方法代替上面方法:
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("中国");
2.控制浏览器定时刷新(3秒后回到主页)
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;utf-8");
response.getWriter().write("恭喜您注册成功!3秒后自动跳转到主页!如果没有自动跳转,点这里");
response.setHeader("refresh", "3;url="+request.getContextPath() +"/index.jsp");
3.控制浏览器是否缓存资源
response.setDateHeader("Expires", System.currentTimeMillis()+1000L*3600*24*30);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("pragma", "no-cache");
response.getWriter().write(new Date().toLocaleString());
               
4.实现请求重定向
/*response.setStatus(302);
response.setHeader("Location", "/day04/index.jsp");*/
                请求重定向用下面方法:
response.sendRedirect("/day04/index.jsp");
如果给浏览器看的要写/项目名
服务器程序不用写/项目名
*请求重定向和请求转发
他们都可以实现访问资源的跳转过程
请求转发:一次请求一次响应,地址栏不发生变化,转发之前和转发之后是同一个request、response
请求重定向:两次请求两次响应。地址栏发生变化,重定向之前和重定向之后的是两个不同的request两个不同的response

通常情况下都是用请求转发。减少对服务器的访问次数,减少服务器的压力。可以在请求转发的过程中利用request对象带参数。
如果希望地址栏发生变化时用请求重定向。
5.response身上的getOutputStream和getWriter是互斥的调用了其中一个就不能再调用另外一个了。
response身上获取的OutputStream和Writer会在Servic方法结束后由服务器关闭,我们就不用关了。
6.验证码
四、ServletRequest -- HttpServletRequest
1.获取客户机信息
getRequestURL方法返回客户端发出请求完整URL
getRequestURI方法返回请求行中的资源名部分
getQueryString 方法返回请求行中的参数部分
getRemoteAddr方法返回发出请求的客户机的IP地址
getMethod得到客户机请求方式
getContextPath 获得当前web应用虚拟目录名称
2.获取请求头信息
getHeader(name)方法 --- String 
getHeaders(String name)方法 --- Enumeration
getHeaderNames方法 --- Enumeration
getIntHeader(name)方法  --- int
getDateHeader(name)方法 --- long(日期对应毫秒)
3.获取请求参数
      
                1)getParameter(name) --- String 通过name获得值
                2)getParameterValues  --- String[ ] 通过name获得多值 checkbox
3)getParameterNames  --- Enumeration 获得所有name
4)getParameterMap  --- Map key :name value: 

5)对于获取请求参数时的乱码:
如果是POST提交,只要设置request.setCharacterEncoding("xxxx");就可以解决
但是如上的方法只对请求中实体内容中的部分起作用,由于get提交方式提交的请求参数时在URL后面带过来的,所以上面的方法不能解决get乱码
对于get方式提交的请求参数中的乱码需要我们手动的编解码解决:
value = new String(value.getBytes("iso8859-1"),"utf-8");
4.利用请求域传递对象





你可能感兴趣的:(servlet对象servletConfig_servletcontext_request_response)