日期:2014-05-16  浏览次数:20371 次

head first 学习笔记 JSP&Servlet--3
7.servlet中的幂等请求
    get,head,put是被认为幂等请求,也就是多个完全相同的请求过来时只当做一个请求来处理,非幂等的请求则是当做多个请求来处理。
    即get从服务器获得数据,不会更新数据,post会更新数据库信息。这个就是为什么在用get方式请求服务器的时候会带上一个无效的时间参数,来让服务器来将最新的数据返回。


8.getServerPort(),getLocalPort(),getRemotePort()区别
 
  8.1 getRemotePort() 获得远程客户端端口
  8.2 getServerPort() 获得请求原来发送的端口
  8.3 getLocalPort()  获得请求最后发送的端口
因为servlet会处理多个请求,每个请求会为每个线程找一个不同的端口


1. response 对象

   一般用于向客户端返回请求。设置需要返回内容类型
一个典型的读取jar包的输出返回

package com.xzm.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ContentTypeServlet extends HttpServlet {

        /**
         *
         */
        private static final long serialVersionUID = 1L;

        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                        throws ServletException, IOException
        {
            //设置定返回的对象类型,告诉浏览器你要返回的数据类型
            resp.setContentType("application/jar");
           
            //根据系统级的参数获取读取文件资源的方式
            ServletContext ctxContext = getServletContext();
            // getResourceAsStream()方法需要以/开头,这个表示web应用的根路径:webApp/XXweb/bookCode.jar 与WEB-INF同级
            InputStream is = ctxContext.getResourceAsStream("/bookCode.jar");
           
            int read = 0;
            byte[] buffer = new byte[1024];
           
            OutputStream os = resp.getOutputStream();
            while((read = is.read(buffer))!=-1)
            {
                os.write(buffer);
            }
           
            is.close();
            os.close();
        }

}

常见的MIME类型:

text/html
application/pdf
video/quicktime
application/java
application/jpeg
application/jar
application/octet-stream
application/x-zip