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");

posted @ 2018-12-10 20:32  别念茶茶  阅读(1344)  评论(0编辑  收藏  举报