Servlet-request and response
来源:互联网 发布:中世纪2 优化9 拜占庭 编辑:程序博客网 时间:2024/06/06 04:03
一、HttpServletResponse
1、响应行 HTTP/1.1
响应状态码:200 = 服务器端OK
404 = 此信息代表客户端在浏览网页时,服务器无法正常提供信息,或是服务器无法回应且不知原因。
500 = 服务器端代码错误
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);
Referesh刷新
3、响应正文(主体)
*** getWrite(); 字符输出流
getOutputStream(); 字节输出流
setCharacterEncoding(String charset) 告知服务器使用什么编码
*****setContentType(String type)
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;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);}}
解析编码原理图
文件下载,在网页中加入图片下载
import java.io.FileInputStream;import java.io.IOException;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;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);}}
实现编写验证码
1登陆页面JSP编码
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title><script type="text/javascript">function changeCode(){//得到图片元素var img = document.getElementsByTagName("img")[0];//img.setAttribute("src","/day09_00_HttpServletResponse/servlet/demo4");//XML Dom 语法img.src = "/day09_00_HttpServletResponse/servlet/demo4?time="+new Date().getTime();}</script></head><body><form action="#" method="post">用户名:<input type="text" name="userName"/><br>密码:<input type="password" name="pwd"/><br>验证码:<input type="text" name="code"/><img src="/day09_00_HttpServletResponse/servlet/demo4" onclick="changeCode()"/><a href="javascript:changeCode()" >看不清换一张</a><br><input type="submit" value="登录"/><br></form></body></html>
import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.dsna.util.images.ValidateCode;public class ServletDemo4 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//告诉客户端不使用缓存response.setHeader("pragma", "no-cache");response.setHeader("cache-control", "no-cache");response.setIntHeader("expires", 0);ValidateCode vc = new ValidateCode(110, 25, 4, 9);String code = vc.getCode();//得到生成的字符vc.write(response.getOutputStream());}private void test1(HttpServletResponse response) throws IOException {int width = 110;int height = 25;//在内存中创建一个图像对象BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//创建一个画笔Graphics g = img.getGraphics();//给图片添加背景色g.setColor(Color.PINK);//设置一个颜色g.fillRect(1, 1, width-2, height-2);//填充颜色//给边框一个色g.setColor(Color.RED);g.drawRect(0, 0, width-1, height-1);//设置边框的显示坐标//设置文本样式g.setColor(Color.BLUE);g.setFont(new Font("宋体", Font.BOLD|Font.ITALIC, 15));//给图片添加文本Random rand = new Random();int position = 20;for (int i = 0; i < 4; i++) {g.drawString(rand.nextInt(10)+"", position, 20);//给图片填充文本position+=20;}//添加9条干扰线for (int i = 0; i < 9; i++) {g.drawLine(rand.nextInt(width), rand.nextInt(height), rand.nextInt(width), rand.nextInt(height));}//将图片对象以流的方式输出的客户端ImageIO.write(img, "jpg", response.getOutputStream());}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
实现刷新功能
import java.io.IOException;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletDemo5 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8"); /* response.setIntHeader("refresh", 1);//设置1秒钟刷新一次Random r = new Random();response.getWriter().write(r.nextInt()+""); */response.getWriter().write("注册成功!3秒钟跳到主页");//设置3秒钟跳转response.setHeader("refresh", "3;url=/day09_00_HttpServletResponse/servlet/demo6");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
请求重定向
import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletDemo7 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("A:我要借钱!");System.out.println("B:我不有,但是我可以告诉你谁有");/*//告诉客户端要重新定向新的资源response.setStatus(302);//告诉浏览器要去访问哪个URLresponse.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
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。
1、请求行
Get http://localhost:8080/day09/servlet/req1?username=zs http/1.1
getMethod(); 获得请求方式
getRequestURL();返回客户端发出请求时的完整URL。
getRequestURI(); 返回请求行中的资源名部分。
getContextPath(); 当前应用的虚拟目录 /day09_01_request
getQueryString() ; 返回请求行中的参数部分。
2、请求消息头
String getHeader(String name) 根据头名称得到头信息值
Enumeration getHeaderNames() 得到所有头信息name
Enumeration getHeaders(String name) 根据头名称得到相同名称头信息值
3、请求正文(重要)
与获取表单数据相关的方法
<input type="text" name="username" />
getParameter(name) 根据表单中name属性的名,获取value属性的值方法
getParameterValues(String name)专业为复选框取取提供的方法
getParameterNames() 得到表单提交的所有name的方法
getParameterMap 到表单提交的所有值的方法 //做框架用,非常实用
一般我们获取表单数据的最终目的是将其传输到数据库中,所以把数据封装进对象中
getInputStream 以字节流的方式得到所有表单数据
import java.beans.IntrospectionException;import java.beans.PropertyDescriptor;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Enumeration;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.BeanUtils;import com.itheima.entity.User;public class ServletDemo3 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//告诉服务器要使用什么编码,注:浏览器使用的是什么编码传过来的就是什么编码 request.setCharacterEncoding("UTF-8");//只能解决post方式的乱码test1(request);} //使用commons_beanutils包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();}} //getparameterMap方法获取表单数据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);}}
与操作非表单数据相关的方法(request也是一个域对象)
void setAttribute(String name, Object value);
Object getAttribute(String name);
Void removeAttribute(String name);
与请求转发相关的方法
请求转发
与请求转发相关的方法
//得到请求转发或请求包含的协助对象
RequestDispatcher getRequestDispatcher(String path)
forward(ServletRequest request, ServletResponse response) //转发的方法
include(ServletRequest request, ServletResponse response) //请求包含,两个资源当成一个来用
import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;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);}}
import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;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);}}
request 与response对象解决乱码的应用
与请求编码相关的方法:
//解决post方式编码
request.setCharacterEncoding("UTF-8"); //告诉服务器客户端什么编码,只能处理post请求方式
//解决get方式编码
String name = new String(name.getBytes(“iso-8859-1”),”UTF-8”);
- Servlet-request and response
- servlet request response 输出
- Servlet:response和request
- servlet request response
- Superfacial individual study for request and response of servlet
- Request and Response objects
- Request and Response
- HTTP Request and Response
- Response And Request
- python_Django_1:Request and Response
- servlet中的request和response
- Servlet获取Request和Response
- Servlet、Request、Response、filter、listener
- Servlet之request与response
- Servlet中的Response和Request
- request、response与servlet总结
- Servlet中的Request和Response
- WebService SOAP request and response
- 博客备份到iPhone/ipad,我的博文我做主
- 392. Is Subsequence
- Java语言基础-排序算法-冒泡排序
- animate is not a function(zepto 使用报错)
- android 实现多线程断点续传
- Servlet-request and response
- 一个textview实现两种文字大小以及文字颜色
- Xmanager Enterprise 4 的一个用途
- 用IO流方法get、post 方式提交
- 装x用的 内容摘自网络
- H264(NAL简介与I帧判断)
- requestDisallowInterceptTouchEvent方法
- Redis 集合(Set)
- html 表单