1、重定向
1)格式
//设置重定向响应状态码302
response.setStatus(302);
//设置响应头 location
response.setHeader("location","http://127.0.0.1:8080/MyServlet/index.jsp");
//上两部合成一步
response.sendRedirect("http://www.baidu.com");
2)重定向特点
a:两次请求,两次响应。存在请求域中信息不可再用;
b:地址栏发生变化
c:可以跳转到外表站点的资源,也可以跳转到内部站点的资源(如上)
2、设置响应头
setHeader(String headName,String headValue); 设置响应头的名称和值
setDateHeader(String name,long date); 设置日期头
setIntHeader(String name,int count); 设置数字头
3、设置响应体————响应的是数据
PrintWriter getWriter();发送字符数据的对象
ServletOutputStream getOutputStream();发送字节数据的对象
4、设置服务器对字符流的编码
//作用:设置字符打印输出流的编码,并告诉浏览器用相应的编码去解码
response.setCharacterEncoding("utf-8");
response.setHeader("content-type","text/html;charset=utf-8");
//以上两个方法可以合二为一
response.setContentType("text/html;charset=utf-8");
egg:简易验证码
int width = 100; int height = 50; //1.创建图片 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); //2.修饰图片 //2.1设置背景色 Graphics g = image.getGraphics();//获取画笔 g.setColor(Color.PINK);//设置颜色 g.fillRect(0, 0, width, height);//填充背景色 //2.2画边框 g.setColor(Color.BLUE); g.drawRect(0, 0, width - 1, height - 1); //2.3写入验证码 g.setColor(Color.RED); String msg = "abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789"; Random ran = new Random(); for (int i = 1; i <= 4; i++) { int index = ran.nextInt(msg.length());//获取msg的随机角标 g.drawString(String.valueOf(msg.charAt(index)), width/5 * i, height/2); } //2.4画干扰线 g.setColor(Color.GREEN); //g.drawLine(0, 0, width, height); for (int i = 0; i < 5; i++) { int x1 = ran.nextInt(width); int x2 = ran.nextInt(width); int y1 = ran.nextInt(height); int y2 = ran.nextInt(height); g.drawLine(x1, y1, x2, y2); } //3.将图片数据写入response输出流中 ImageIO.write(image, "jpg", response.getOutputStream()); //jsp:<img src="/MyServlet/mydemo"></img> //页面上的路径和重定向需要加上项目名称
二、HttpServletRequest request————请求对象
1、请求转发
request.getRequestDispatcher("/虚拟路径").forward(request, response);//服务器内部跳转路径,不需要加项目名称
特点:
1)一次请求一次响应
2)地址栏不发生变化
3)只能访问内部站点资源
2、获取请求行
//请求行:请求方式 访问的资源 协议/版本 egg:GET /myhtml.html HTTP/1.1
request.getMethod();//获取请求方式
request.getContextPath();//获取项目名称
request.getRequestURI();//获取URI
request.getRequestURL();//获取URL
request.getRemoteAddr();//获取IP地址
request.getQueryString();//获取请求参数
request.getProtocol();//获取协议版本
3、获取请求头
request.getHeader("user-agent");//获取请求头的值
request.getDateHeader(name);//获取日期头
request.getIntHeader(name)//获取数字头
4、获取请求体
只有post才有请求体:放请求参数
获取字符数据: getReader(); 返回一个高效的字符流 我们通过一次读取一行的 方法来获取请求参数数据 然后 拆分字符串获取我们想要的数据
获取字节数据: getInputStream();用于上传文件
//一般获取请求参数的方法:
request.getParameter("key"); 通过请求参数的名称来获取值
request.getParameterValues("hobby"); 通过请求参数的名称,来获取值的数组 一般用于复选框
request.getParameterMap(); 获取所有参数的map集合
//有两个beanutils的jar包可以之间把map集合封装成Javabean对象
Map map = request.getParameterMap();
User user = new User();
BeanUtils.populate(user, map);
request.getParameterNames(); 获取所有参数的名称 枚举 不常用
5、处理中文乱码问题
request.setCharacterEncoding("utf-8");
6、操作请求域对象内数据
request 是一个请求对象,用来封装请求消息;
还是一个域对象 既然是域对象 就可以在他的范围内共享数据
request.setAttribute("name","zhangsan");
request.getAttribute("name");
request.removeAttribute("name");
//ServletContext()在一个资源间共享数据
this.getServletContext().setAttribute(key,value);
原文地址:http://blog.51cto.com/378213986/2056146