首页 > 代码库 > Servlet1总结

Servlet1总结

 ServletContext
 1.它是一种域对象
 2.一个Web应用只有一个ServletContext对象
 3.服务器启动时对象就创建了,当服务器关闭时对象才销毁
 功能方法:
 (1)获取ServletContext对象
    ServletContext sc = servletconfig.getServletContext();
    由于GenericServlet类中定义了方法getServletContext(),
    而HttpServlet继承自GenericServlet,
    我们自定义的Servlet类继承自HttpServlet,所以类中也有
    方法getServletContext()
    ServletContext sc = this.getServletContext();
  (2) 域功能,内部有map,可以存取数据
      servletContext.setAttribute("name","Tom");//保存数据
      servletContext.setAttribute("name","Jack");//替换数据
      servletContext.getAttribute("name");//获取数据
      servletContext.removeAttribute("name");//删除数据
      Enumeration en = servletContext.getAttributeNames();//获取所有的属性名
      保存在ServletContext中的数据是被当前Web应用中的所有资源共享
  (3)访问当前的web应用的资源
      //根据文件相对路径得到绝对路径
      String getRealPath(String path)
      G:\apache-tomcat-6\webapps\day6_2\WEB-INF\web.xml
      //将得到的资源包装成一个InputStream
      InputStream is = servletContext.getResourceAsStream("/WEB-INF/web.xml");
   (4)获取在web.xml中配置的初始化参数(不属于一个Servlet)
 <context-param>
  <param-name>school</param-name>
  <param-value>rjxy</param-value>
 </context-param>
  <context-param>
  <param-name>major</param-name>
  <param-value>java</param-value>
 </context-param>
      String value = http://www.mamicode.com/this.getInitParameter("name");
————————————————————————————————————————
  response:
  是service()方法的参数,类型是HttpServletResponse.
  在客户端发出请求时,服务器都会创建一个新的response对象,把它传给service()方法。
  response对象用来完成对客户端的响应。
  它有4种功能:
  设置响应头信息
  发送状态码
  设置响应正文
  重定向

 1、 response设置响应正文,通过两种流发送到客户端的:
  PrintWriter out = response.getWriter();//字符流
  ServletOutputStream out = response.getOutputStream();//字节流 比如下载一个图片时


  通过字符流发送响应时,要注意字符编码问题。
  response.getWriter()默认编码为ISO-8859-1,不支持中文。
  把字符集设置为UTF-8,  response.setcharacterEncoding("UTF-8");
  这样发送到客户端的就是UTF-8编码的内容。
  浏览器一般默认的解码字符集为GB2312或者GBK。
  比如“安阳”  UTF-8编码为6个字节,而GB2312编码为4个字节。
  解决乱码: response.setContentType("text/html;charset=UTF-8");

  缓冲区
  response.getWriter()有缓冲区,大小为8KB,如果响应数据没有达到8KB,
  所有数据都暂时存放在缓冲区中,不会立刻发送到客户端。当Servlet执行完毕后,
  服务器才会将缓冲区中的数据发送到客户端。如果想立刻发送到客户端,
  调用response.flushBuffer()方法手动刷新缓冲区。

 2、设置响应头信息
  告诉客户端浏览器一些关于响应的信息,比如内容编码,内容长度等。
  //3秒钟自动跳转到某个主页
  response.setHeader("Refresh","3;URL=http://www.aynu.edu.cn");
  //跳转到本项目内主页
  response.setHeader("Refresh", "3;URL=/day7/index.jsp");

 3、设置状态码
  response.setStatus(200);
  response.setStatus(404);
 
 4、重定向
    本来浏览器访问的是A地址,服务器却通知浏览器去访问B地址,即再次发送一个新的请求。
    //重定向(到项目外的资源)
    response.sendRedirect("http://www.aynu.edu.cn");
   //重定向(到项目内的资源)
   response.sendRedirect("/day7/FServlet");
   


本文出自 “12330937” 博客,请务必保留此出处http://12340937.blog.51cto.com/12330937/1879821

Servlet1总结