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