zoukankan      html  css  js  c++  java
  • Servlet中request、response、ServletContext 及其常用方法

    request对象的类是HttpServletRequest


    request的常见方法:

    request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)
    request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名
    request.getQueryString(): 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
    request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
    request.getRemoteHost(): 浏览器所处于的客户机的主机名
    request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
    request.getLocalAddr(): 服务器的IP地址
    request.getLocalName(): 服务器的主机名
    request.getMethod(): 得到客户机请求方式一般是GET或者POST

    获取参数:

    request.getParameter(): 是常见的方法,用于获取单值的参数
    request.getParameterValues(): 用于获取具有多值的参数,比如注册时候提交的多选框,可以是多选的。
    request.getParameterMap(): 用于遍历所有的参数,并返回Map类型。

    获取头信息:

    request.getHeader() 获取浏览器传递过来的头信息。 
    比如getHeader("user-agent") 可以获取浏览器的基本资料,这样就能判断是firefox、IE、chrome、或者是safari浏览器
    request.getHeaderNames() 获取浏览器所有的头信息名称,根据头信息名称就能遍历出所有的头信息

    头信息:

    host: 主机地址
    user-agent: 浏览器基本资料
    accept: 表示浏览器接受的数据类型
    accept-language: 表示浏览器接受的语言
    accept-encoding: 表示浏览器接受的压缩方式,是压缩方式,并非编码
    connection: 是否保持连接
    cache-control: 缓存时限

    使用URL的GET方法传递数据

    跳转地址?参数名1=参数值1&参数名2=参数值2  
    例如:http://localhost:8080/TomcatTest/HelloForm?name=333ddd333&id=12
    因为传参的编码不支持中文,参数值是中文会乱码
    可以通过一下方法处理中文问题:
    String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");


    response是HttpServletResponse的实例,用于提供给浏览器的响应信息


    设置响应内容

    PrintWriter pw= response.getWriter();
    通过response.getWriter(); 获取一个PrintWriter 对象
    可以使用println(),append(),write(),format()等等方法设置返回给浏览器的html内容。

    设置响应格式

    response.setContentType("text/html");
    "text/html" 是即格式 ,在request获取头信息 中对应的request.getHeader("accept"). 
    "text/html" 是存在的,表示浏览器可以识别这种格式,如果换一个其他的格式, 比如 "text/lol" ,浏览器不能识别,那么打开此servlet就会弹出一个下载的对话框。
    这样的手段也就常常用于实现下载功能


    设置不使用缓存

    使用缓存可以加快页面的加载,降低服务端的负担。但是也可能看到过时的信息,可以通过如下手段通知浏览器不要使用缓存
    response.setDateHeader("Expires",0 );
    response.setHeader("Cache-Control","no-cache");
    response.setHeader("pragma","no-cache");

    ServletContext 对象
    WEB容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext,它代表当前Web应用。并且它被所有客户端共享。
    WEB应用中的所有Servlet共享同一个ServletContext对象
    ServletContext中的属性的生命周期从创建开始,到服务器关闭而结束

    ServletContext sc = this.getServletContext()方法获得其对象的引用
    添加属性:setAttribute(String name, Object obj);
    得到值:getAttribute(String name),这个方法返回Object
    删除属性:removeAttribute(String name)
    读取到一个文件的全路径:getRealPath(String path) 其中path必须是/开头,代表当前web应用程序的根目录
    获取资源流,即把资源以输入流的方式获取:getResourceAsStream(String path)
    返回的一个代表某个资源的URL对象:getResource(String parh)
    获取指定目录下所有资源路径:getResourcePaths(String path)

    例如获取/WEB-INF下所有资源的路径:


    代码:
    Set set = context.getResourcePaths("/WEB-INF");
    System.out.println(set);


    结果:
    [/WEB-INF/lib/, /WEB-INF/classes/, /WEB-INF/b.txt, /WEB-INF/web.xml]

    如果资源不在Web应用的根目录,通过ServletContext是读不到的,必须要使用类加载器去读取
    比如在src下的com.gavin包下,此时类加载器要加上包的路径,如下:
    InputStream stream = MyServlet.class.getClassLoader().getResourceAsStream("com/gavin/dbinfo.properties")

    获得初始化参数:
    我们可以使用一个或多个<init-param>标签为servlet配置一些初始化参数,然后我们通过ServletConfig对象获取这些参数
    假如有如下的MyServlet,它的配置为:


    <servlet>
      
        <servlet-name>MyServlet</servlet-name>
      
        <servlet-class>com.gavin.servlet.MyServlet</servlet-class>
      
        <init-param>
      
            <param-name>encoding</param-name>
      
            <param-value>utf-8</param-value>
      
        </init-param>
      
    </servlet>
    可以看到它配置了一个初始化参数:encoding=utf-8,那么我们在MyServlet的源代码中需要这样去得到这个参数:


    String encoding = this.getServletConfig().getInitParameter("encoding");

  • 相关阅读:
    统计中的精度和召回率的解释
    人工智能在医疗行业中的应用
    解决Myeclipse在调试(debug)时无法显示变量值问题(转载)
    溢出的问题
    返回引用和对象遇到的坑
    vmWare上网配置(转载)
    linux内核相关的术语(转载)
    一个死锁问题
    Ethernet,token ring,FDDI,ATM,WLAN(转载)
    kmalloc与vmalloc
  • 原文地址:https://www.cnblogs.com/snzd9958/p/10098912.html
Copyright © 2011-2022 走看看