一、引言
了解了servlet基本原理,其中内置对象response与request了解是必须的,终点学习下==
主要包括get和post方法中的使用
先直观的看一下response和request:get请求没有请求体,post请求有请求体,这里举例为post请求
二、response
不说了,直接上代码,应该比较好了解
package xcy.com;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
/**
* Servlet implementation class MyResponse
*/
@WebServlet("/MyResponse")
public class MyResponse extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MyResponse() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
/* //设置响应码
response.sendError(404,"找不到");*/
/*
//重定向两种方法
response.setHeader("location", "/second/Resource");
response.setStatus(302);
response.sendRedirect("/second/Resource");*/
/*
//定时刷新
response.setHeader("refresh", "5;URL=/second/index.jsp");
*/
/*
//设置取消缓存
response.setHeader("Cache-Control", "no-cache");
response.setHeader("pragma", "no-cache");
response.setHeader("expires", "-1");*/
/* //字节流传输
String s="hahaha";
byte[] bs=s.getBytes();
response.getOutputStream().write(bs);*/
//获取图片流
String path="C:/Users/xcy/Desktop/a.jpg";
FileInputStream fi=new FileInputStream(path);
byte[]bt=IOUtils.toByteArray(fi);
response.getOutputStream().write(bt);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
三、request
同上面一样,先上代码,把基本的方法了解==
package xcy.com;
import java.io.IOException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class MyRequest
*/
@WebServlet("/MyRequest")
public class MyRequest extends HttpServlet {
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
/*//获取ip
String ip=request.getRemoteAddr();
response.getWriter().print(ip+"<hr/>");*/
/* //获取请求方法
String method=request.getMethod();
response.getWriter().print(method);*/
/* //获取客户端信息
String useragent=request.getHeader("user-agent");
response.getWriter().print(useragent);*/
/* //获取请求url
String url=request.getRequestURL().toString();
response.getWriter().print(url);*/
/* //获取referer
String refer=request.getHeader("referer");
response.getWriter().print(refer);*/
String name=request.getParameter("name");
/* byte[]bytes=name.getBytes("iso-8859-1");
name=new String(bytes,"utf-8");
response.setHeader("content-type", "text/html;charset=utf-8");*/
response.setHeader("content-type", "text/html;charset=utf-8");
response.getWriter().print(name);
Map<String, String[]> map= request.getParameterMap();
response.getWriter().print(name);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
response.setHeader("content-type", "text/html;charset=utf-8");
//response.setHeader("content-type", "text/html;charset=utf-8");
response.getWriter().print(name);
}
}
然后重点讲解一下请求转发与请求包含;
1、请求转发与包含是一个request请求,而重定向是两个请求,request公用;
2、请求转发和请求包含是两个servlet;
3、请求转发留请求头不留请求体,而请求包含留请求头留请求体;
servlet1
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setHeader("name", "xcy");
response.getWriter().println("1");
/* //请求转发
request.getRequestDispatcher("/zhuanfa2").forward(request, response);*/
//请求包含
request.getRequestDispatcher("/zhuanfa2").include(request, response);
}
servlet2
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().println("2");
}
请求包含输出的是:12;
四、总结
- request与response直观感受;
- response常用方法;
- request常用方法;
- 重点介绍request请求转发与请求包含;