HttpServletRequest
1、响应行 HTTP/1.1 200 OK
setStatus(int sc) 设置响应状态码
2、响应头
sendRedirect(String location) 请求重定向
setHeader(String name, String value) 设置响应头信息
//告知浏览器使用什么码表
response.setHeader(“content-type”, “text/html;charset=UTF-8”);
//告知客户端不缓存
response.setHeader("pragma", "no-cache");
response.setHeader("cache-control", "no-cache");
response.setDateHeader("expires", 0);
3、响应正文(主体)
getWrite(); 字符输出流
getOutputStream(); 字节输出流
setCharacterEncoding(String charset) 告知服务器使用什么编码
setContentType(String type);告知服务器使用的编码方式和告知客户端使用的解码方式
代码
public class ServletDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//服务器中默认的编码为ISO-8859-1,它不支持中文,tomcat规定的
/* //告诉服务器应用使用UTF-8解析文本
response.setCharacterEncoding("UTF-8");
//告诉客户端要使用什么编码
response.setHeader("content-type", "text/html;charset=UTF-8");*/
//告诉服务器应用使用UTF-8解析文本,告诉客户端要使用什么编码
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();//得到一个字符输出流
out.write("你好!");//向客户端响应文本内容
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
下载图片的服务器代码
public class ServletDemo3 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//通过路径得到一个输入流
String path = this.getServletContext().getRealPath("/WEB-INF/classes/美女.jpg");
FileInputStream fis = new FileInputStream(path);
//创建字节输出流
ServletOutputStream sos = response.getOutputStream();
//得到要下载的文件名
String filename = path.substring(path.lastIndexOf("\\")+1);
//设置文件名的编码
filename = URLEncoder.encode(filename, "UTF-8");//将不安全的文件名改为UTF-8格式
//告知客户端要下载文件
response.setHeader("content-disposition", "attachment;filename="+filename);
response.setHeader("content-type", "image/jpeg");
//执行输出操作
int len = 1;
byte[] b = new byte[1024];
while((len=fis.read(b))!=-1){
sos.write(b,0,len);
}
sos.close();
fis.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
请求转发
public class ServletDemo5 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("A:我要借钱!");
System.out.println("B:我不有,但是我可以告诉你谁有");
/*//告诉客户端要重新定向新的资源
response.setStatus(302);
//告诉浏览器要去访问哪个URL
response.setHeader("location", "/day09_00_HttpServletResponse/servlet/demo8");*/
//请求重定向
response.sendRedirect("/day09_00_HttpServletResponse/servlet/demo8");
System.out.println("A: 我去了");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
HttpServletRequest
1.请求行
Get http://localhost:8080/day09/servlet/req?username=zs
getMedthos(); 获取请求方式
getRequestURL();获取访问资源完整的URL();
getReuqestURI();获取访问资源名称部分
getCOntextPath();返回当前的目录(/day09)
getQueryString()返回当前的参数
2.请求头
getHeader(String name) 根据头名称获取头信息的值
Enumeration getHeaders(String name);//根据头名称得到头信息相同的值
Enumeration getHeaderNames();//得到所有头信息的值
3.获取表单相关的方法
getParameter(name):根据表单中的name属性获取value值
getParameterValues(String name) 为复选框准备的
getParameterMap()获取表达提交所有值的方法
4请求转发的方法:
void setAttribute(String name, String value);
Object getAttribute(String name)
void removeAttribute(String name)
RequestDispatcher getRequestDispatcher(String path)得到请求转发的协助对象
forward(ServletRequest request, ServletRequest response)
include(ServletRequest request, ServletResponse response)
6.与请求编码相关的方法
解决Post方式:
request.setCharacterEncoding(“UTF-8”);解决post的请求方式
解决get方式的编码
String name = new String(name.getBytes(“iso-8859-1”,”UTF-8”))
代码
- 与请求消息行有关代码
public class ServletDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// getMethod(); 获得请求方式
// ***getRequestURL();返回客户端发出请求时的完整URL。
// ***getRequestURI(); 返回请求行中的资源名部分。
// *****getContextPath(); 当前应用的虚拟目录 /day09_01_HttpServletRequest
// getQueryString() ; 返回请求行中的参数部分。
System.out.println(request.getMethod());// GET
System.out.println(request.getRequestURL()); // http://localhost:8080/day09_01_HttpServletRequest/servlet/demo1
System.out.println(request.getRequestURI()); // /day09_01_HttpServletRequest/servlet/demo1
System.out.println(request.getContextPath()); // /day09_01_HttpServletRequest
System.out.println(request.getQueryString()); // username=tom
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
- 与请求消息头有关代码
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//test1(request);
// test2(request);
//获得相关name的消息头
Enumeration headers = request.getHeaders("accept-language");
while(headers.hasMoreElements()){
String e = (String) headers.nextElement();
System.out.println(e+":"+request.getHeader(e));
}
}
private void test2(HttpServletRequest request) {
//获得所有请求消息头的name
Enumeration names = request.getHeaderNames();
while(names.hasMoreElements()){
String e = (String) names.nextElement();
System.out.println(e+":"+request.getHeader(e));
}
}
private void test1(HttpServletRequest request) {
//获得请求消息头的信息
String header = request.getHeader("User-Agent");
System.out.println(header);
if(header.toLowerCase().contains("msie")){
System.out.println("你使用的是IE浏览器");
}else if(header.toLowerCase().contains("firefox")){
System.out.println("你使用的是火狐浏览器");
}else if(header.toLowerCase().contains("chrome")){
System.out.println("你使用的是谷歌浏览器");
}else{
System.out.println("你使用的是其它浏览器");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
public class ServletDemo3 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//告诉服务器要使用什么编码,注:浏览器使用的是什么编码传过来的就是什么编码
request.setCharacterEncoding("UTF-8");//只能解决post方式的乱码
test4(request);
}
private void test4(HttpServletRequest request) {
try {
User u = new User();
System.out.println("封装数据前:"+u);
BeanUtils.populate(u, request.getParameterMap());
System.out.println("封装数据后:"+u);
} catch (Exception e) {
e.printStackTrace();
}
}
private void test3(HttpServletRequest request) {
try {
User u = new User();
System.out.println("封装数据前:"+u);
//获取表单数据
Map<String,String[]> map = request.getParameterMap();
for (Map.Entry<String, String[]> m : map.entrySet()) {
String name = m.getKey();
String[] value = m.getValue();
//创建一属性描述器
PropertyDescriptor pd = new PropertyDescriptor(name, User.class);
//得到setter属性
Method setter = pd.getWriteMethod();
if(value.length==1){
setter.invoke(u, value[0]);//给一个值的变量赋值
}else{
setter.invoke(u, (Object)value);//相关于给复选框赋值
}
}
System.out.println("封装数据后:"+u);
} catch (Exception e) {
e.printStackTrace();
}
}
private void test2(HttpServletRequest request) {
//获取所有的表单name的名子
Enumeration names = request.getParameterNames();
while(names.hasMoreElements()){
String name = (String) names.nextElement();//得到每一个name名
String[] values = request.getParameterValues(name);//根据name名,得到value值
for (int i = 0;values!=null && i < values.length; i++) {
System.out.println(name+"\t"+values[i]);
}
}
}
private void test1(HttpServletRequest request) throws UnsupportedEncodingException {
//获取表单数据
//根据表单中name属性的名,获取value属性的值方法
String userName = request.getParameter("userName");
String pwd = request.getParameter("pwd");
String sex = request.getParameter("sex");
String[] hobbys = request.getParameterValues("hobby");
String city = request.getParameter("city");
userName = new String(userName.getBytes("iso-8859-1"),"UTF-8");
System.out.println(userName);
System.out.println(pwd);
System.out.println(sex);
for (int i = 0;hobbys!=null && i < hobbys.length; i++) {
System.out.print(hobbys[i]+"\t");
}
System.out.println();
System.out.println(city);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
public class ServletDemo4 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//获取表单数据
ServletInputStream sis = request.getInputStream();
int len = 0;
byte[] b = new byte[1024];
while((len=sis.read(b))!=-1){
//System.out.println(new String(new String(b,0,len).getBytes(),"utf-8"));
System.out.println(new String(b, 0, len, "UTF-8"));
}
sis.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
- request1作为域对象
public class ServletDemo5 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String str = "aaaaa";
System.out.println("A:我想办事");
System.out.println("B:我办不了,但我可以找人帮你办");
//将非表单的数据添加到request的域中
request.setAttribute("s", str);
//将请求转发到demo6中
//request.getRequestDispatcher("/servlet/demo6").forward(request, response);
//注:请求转发不能跳转到其它应用
//request.getRequestDispatcher("http://www.baidu.com").forward(request, response);
//使用重定向
//response.sendRedirect(request.getContextPath()+"/servlet/demo6");
//可以跳转到其它应用
//response.sendRedirect("http://www.baidu.com");
System.out.println("B:事办完了");
//请求包含
request.getRequestDispatcher("/servlet/demo6").include(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
public class ServletDemo6 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
System.out.println("这个事我能办");
//将request对象中的移除
//request.removeAttribute("s");
//从request对象中获取s的值
String s = (String) request.getAttribute("s");
System.out.println(s);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}