response及验证码例子

来源:互联网 发布:mpu9250好用的源码 编辑:程序博客网 时间:2024/06/18 00:26
response对象实现http响应行,http响应头,http响应体,三部分。
手动设置http响应行中的状态码,http响应行
//response.setStatus(302);
设置响应头
//System.out.println("get方法正在运行.........");
//Date date=new Date();
//response.addHeader("name", "zhangsan");
//response.addIntHeader("age",20);
//response.addDateHeader("birthday",date.getTime());
还要setHeader(),setIntHeader(),setDateHeader()方法
用response实现重定向
1设置状态码302
//response.setStatus(302);
2设置响应头location
//response.setHeader("Location","/WEB/servlet2");
重定向封装成了一个方法
response.sendRedirect("servlet2");
设置定时刷新的头
response.setHeader("refresh","5;url=http://www.baidu.com");

js实现定时器跳转

<script type="text/javascript">window.onload=function(){var time=5;var secondEle=document.getElmentById("second");var timer=setInterval(function(){secondEle.innerHTML=time;time--;if(time==0){clearInterval(timer);location.href="http://www.baidu.com";}},1000);}</script></head><body>恭喜你注册成功,<span style="color:red" id="second">5</span>秒钟跳转,如不跳转请点击<a href="http://www.baidu.com">这里!</a></body>
设置response查询的码表
//response.setCharacterEncoding("UTF-8");
通过一个头Content-Type告知客户端使用何种码表
//response.setHeader("Content-Type","text/html;charset=UTF-8");
服务器封装了一个方法
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer=response.getWriter();
//writer.write("hello response!1!");
writer.write("中国");
使用response获得字节输出流

ServletOutputStream out=response.getOutputStream();//获得服务器上的图片String realPath=this.getServletContext().getRealPath("/a.jpg");InputStream in=new FileInputStream(realPath);int len=0;byte[] buffer=new byte[1024];while((len=in.read(buffer))>0){out.write(buffer,0,len);}in.close();out.close();}
1.什么情况下下载?
浏览器不能解析的文件就下载
2.什么情况下需要在服务器端编写文件下载的代码?
理论上,浏览器可以解析代码需要编写文件下载代码,实际开发中,只要是下载的文件都编写文件下载代码。
download.html

<body><h1>使用a标签直接指向服务器上的资源</h1><a href="/WEB/download/a.flv">a.flv</a><br/><a href="/WEB/download/a.jpg">a.jpg</a><br/><a href="/WEB/download/a.mp3">a.mp3</a><br/><a href="/WEB/download/a.mp4">a.mp4</a><br/><a href="/WEB/download/a.txt">a.txt</a><br/><a href="/WEB/download/a.zip">a.zip</a><br/><hr/><h1>使用服务器端编码的方式实现文件下载</h1><a href="/WEB/downloadServlet?filename=a.flv">a.flv</a><br/><a href="/WEB/downloadServlet?filename=a.jpg">a.jpg</a><br/><a href="/WEB/downloadServlet?filename=a.mp3">a.mp3</a><br/><a href="/WEB/downloadServlet?filename=a.mp4">a.mp4</a><br/><a href="/WEB/downloadServlet?filename=a.txt">a.txt</a><br/><a href="/WEB/downloadServlet?filename=a.zip">a.zip</a><br/></body>DownloadServlet.javaprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub//response.getWriter().append("Served at: ").append(request.getContextPath());String filename=request.getParameter("filename");//告诉客户端该文件不是直接解析,而是以附件形式打开(下载)response.setHeader("Content-Disposition","attachment;filename="+filename);//客户端通过文件的mime类型区分文件类型response.setContentType(this.getServletContext().getMimeType(filename));//获得要下载的文件的名称"//String filename=request.getParameter("filename");//获取文件的绝对路径String path=this.getServletContext().getRealPath("download/"+filename);//获得该文件的输入流InputStream in=new FileInputStream(path);//获得输出流----通过response获得的输出流用于想客户端写内容ServletOutputStream out=response.getOutputStream();//文件拷贝的模板代码int len=0;byte[] buffer=new byte[1024];while((len=in.read(buffer))>0){out.write(buffer,0,len);}in.close();out.close();}
response细节点:
1.response获得的流不需要手动关闭,Tomcat容器会帮助我们关闭
2.getWriter和getOutputStream不能同时调用

验证码例子:

login.jsp:

<body><h1>验证码登录</h1><form action="http://www.baidu.com" method="post">用户名: <input type="text" value="" name="username"/><br/>密码:     <input type="password" value="" name="password"/><br/>验证码:<input type="text" value="" name="check"><img id="imgId" onclick="changeImg()" src="${pageContext.request.contextPath}/verifyCodeServlet"/> <a href="javascript:void(0)" onclick="changeImg()">换一张</a><br/><input type="submit" value="登录" name="login"/><script type="text/javascript">function changeImg(){$("#imgId").attr("src","${pageContext.request.contextPath}/verifyCodeServlet?t="+new Date());}</script></form></body>
VerifyCodeServlet.java

public class VerifyCodeServlet extends HttpServlet {private static final long serialVersionUID = 1L;    public VerifyCodeServlet() {        super();    }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// response.getWriter().append("Served at: ").append(request.getContextPath());int height=30;int width=60;String data="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";Random random=new Random();//创建一个图片BufferedImage image=new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);//获得画板Graphics g=image.getGraphics();//填充一个矩形g.setColor(Color.BLACK);g.fillRect(0, 0, width, height);g.setColor(Color.WHITE);g.fillRect(1, 1, width-2, height-2);g.setFont(new Font("宋体", Font.BOLD|Font.ITALIC, 25));//写随机字for(int i=0;i<4;i++){g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));int index=random.nextInt(data.length());String str=data.substring(index, index+1);g.drawString(str, width/6*(i+1), 20);}//干扰线for(int i=0;i<3;i++){g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));g.drawLine(random.nextInt(width), random.nextInt(height), random.nextInt(width), random.nextInt(height));g.drawOval(random.nextInt(width),random.nextInt(height),2,2);}ImageIO.write(image, "jpg", response.getOutputStream());}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}






原创粉丝点击