response.setHeader()的用法Word 文档

合集下载

把数据库的内容导出为word文档格式

把数据库的内容导出为word文档格式

try{
//该类功能是从oracle哭中取出blob实体
getBlobBean getBlob=new getBlobBean();
OutputStream sos = response.getOutputStream();
getBlob.connFunction();
}
pi.close();
sos.flush();
sos.close();
}
getBlob.dropConnFunction();
}catch(Exception e){ </bod Nhomakorabea>
</html>
4 在client端直接生成PDF文档
需要下载JAR包:以下代码在JDK1.4 RESIN2.16 下测试通过
ITEXT包 /sourceforge/itext/itext-1.3.5.jar
字体包 /downloads/iTextAsian.jar
package yourpackage;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import oracle.sql.*;
<%
String filename = "D:\\test\\111111.pdf" ;
Document document = new Document(PageSize.A4);
ServletOutputStream out1 = response.getOutputStream();

servlet跳转页面的几种方法

servlet跳转页面的几种方法

servlet跳转页面的几种方法一直对Servlet的几种页面跳转方式,理解的糊里糊涂的,今天在网上搜了一把,找到一遍比较好的,记下来,以后看看。

跳转分两部分,一是发生在servlet,一是在JSP,其实JSP也就是servlet,不过还是有点差异滴。

Servlet:当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。

1) redirect 方式response.sendRedirect("/a.jsp");页面的路径是相对路径。

sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:response.sendRedirect("");跳转后浏览器地址栏变化。

这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。

2) forward方式RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp"); dispatcher .forward(request, response);页面的路径是相对路径。

forward方式只能跳转到本web应用中的页面上。

跳转后浏览器地址栏不会变化。

使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttributeJSP:1) response.sendRedirect();和servlet的response.sendRedirect()方式一样。

此语句前不允许有out.flush(),如果有,会有异常:ng.IllegalStateException: Can't sendRedirect() after data has committed to the client.atcom.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpRes ponse.java:558)...跳转后浏览器地址栏变化如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了;如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;2) response.setHeader("Location","");此语句前不允许有out.flush(),如果有,页面不会跳转。

2020年智慧树知道网课《动态网页设计技术》课后习题章节测试满分答案

2020年智慧树知道网课《动态网页设计技术》课后习题章节测试满分答案

第一章测试1【单选题】(2分)关于CSS的描述,下列说法正确的是()。

A.只有独立的CSS文件才符合结构与表现分离的特点。

B.当CSS作为独立的文件时,必须以.html为后缀名。

C.CSS用于设置HTML页面中的文本内容、图片的外形以及版面的布局等外观显示样式。

D.目前流行的CSS版本为CSS3。

2【单选题】(2分)下列选项中,JavaScript运算符的优先级最高的是()。

A.==B.++C.()D.+3【单选题】(2分)根据运算符的优先级,表达式z=2*(1+2*3)的运算结果为()。

A.16B.18C.14D.124【单选题】(2分)下列选项中,没有对应的结束标记的是哪一项?()。

A.<title>B.<html>C.<br/>D.<body>5【单选题】(2分)下列选项中,字号最大的是哪一项?()。

A.<h1>B.<h4>C.<h2>D.<h3>第二章测试1【单选题】(2分)一个格式良好的XML文件的根元素个数是()。

A.3B.4C.2D.12【单选题】(2分)假设在helloapp应用中有一个hello.jsp,它的文件路径如下:<CATALINA_HOME>/webapps/helloapp/hello/hello.jsp在web.xml文件中没有对hello.jsp作任何配置,那么浏览器端访问hello.jsp的URL是什么?A.http://localhost:8080/hello.jspB.http://localhost:8080/helloapp.jspC.http://localhost:8080/helloD.http://localhost:8080/helloapp/hello/hello.jsp3【单选题】(2分)下面选项中,关于Tomcat存放Web应用程序需要访问的JAR包的是()。

WEB 文档

WEB 文档

1.内置对象request对象是实现了ServletRequest接口类的一个实例.2. Tomcat服务器将用户的请求封装在内置对象request中,该对象调用相应的方法可以获取封装的信息.常用方法:⏹getProtocol():获取请求使用的通信协议,如http/1.1等。

⏹getServletPath():获取请求的JSP页面所在的目录。

⏹getContentLength():获取HTTP请求的长度。

⏹getMethod():获取表单提交信息的方式,如POST或GET。

⏹getHeader(String s):获取请求中头的值。

⏹getHeaderNames():获取头名字的一个枚举。

⏹getHeaders(String s):获取头的全部值的一个枚举。

⏹getRemoteAddr():获取客户的IP地址。

⏹getRemoteHost():获取客户机的名称(如果获取不到,就获取IP地址)。

⏹getServerName():获取服务器的名称。

⏹getServerPort():获取服务器的端口号。

⏹getParameterNames():获取表单提交的信息体部分中name参数值的一个枚举<%@page contentType="text/html;charset=GB2312"%><HTML><BODY bgcolor=cyan><FONT size=4><FORM action=""method=post name=form><INPUT type="text"name="girl"><INPUT TYPE="submit"value="Enter"name="submit"> </FORM><% String textContent=request.getParameter("girl");double number=0,r=0;if(textContent==null){ textContent="0";}try { number=Double.parseDouble(textContent);if(number>=0){ r=Math.sqrt(number) ;out.print(String.valueOf(number)+"的平方根:");out.print("<BR>"+String.valueOf(r));}else{ out.print("<BR>"+"请输入一个正数");}}catch(NumberFormatException e){ out.print("<BR>"+"请输入数字字符");}%></FONT></BODY></HTML>⏹response对象对客户的请求做出响应,向客户端发送数据⏹response对象调用setContentType(String s)方法来动态改变contentType的属性值:⏹response对象可以使用如下方法:addHeader(String head,String value);setHeader(String head,String value)动态添加新的响应头和头的值<%@page contentType="text/html;charset=GB2312"%><%@page import="java.util.*"%><HTML><BODY bgcolor=cyan><Font size=5><P>现在的时间是:<BR><% out.println(""+new Date());response.setHeader("Refresh","5");%></FONT></BODY></HTML>•内置对象session由Tomcat服务器负责创建,session是实现了HttpSession接口类的一个实例.•session对象被分配了一个String类型的ID,Tomcat服务器将ID发送到客户端,存放在客户的Cookie中。

HttpServletResponse的使用

HttpServletResponse的使用

使用HttpServletResponse 可以对浏览器进行响应。

大部分情况下,可以使用setContentType()设置响应类型,使用getWriter()取得PrintWriter 对象,而后使用PrintWriter 对象的println()等方法输出HTML 内容。

还可以进一步使用setHeader()、addHeader()等方法进行响应标头的设置,或者是使用sendRedirect()、sendError()方法,对客户端要求重定向网页,或是传送错误消息状态。

也可以使用getOutputStream()取得ServletOutputStream ,直接使用串流对象对浏览器进行字节数据的响应。

对浏览器进行响应当浏览器收到响应时,必须知道如何处理响应的数据,这个信息来自于HTTP 响应的content-type 标头,该标头的设置值为MIME (Multipurpose Internet Mail Extentions )类型,常见的设置有text/html 、application/pdf 、application/jar 、application/x-zip 、image/jpeg 等。

setContentType()会自动设置content-type 响应标头,只要指定MIME 类型就可以了,必要时可以附加一个编码规格,容器会使用指定的字符编码来作为响应对象处理编码的方式(默认是ISO-8859-1)。

响应对象处理编码的方式亦可以使用setCharacterEncoding()来设置,使用getCharacterEncoding()则可以取得代表编码方式的字符串。

setContentType()可以自动设置content-type 的标头。

如果要自行设置响应标头,则可以使用setHeader()、addHeader()等方法。

语句:<codeclass ="hljsavrasm">response.setContentType("text/html;charset=utf-8");</code>等同于以下的程序:?1 2 <code class ="language-java hljs ">response.setHeader("content-type", "text/html;charset=utf-8");response.setCharacterEncoding("utf-8");</code>如果标头名称相同,后续的setHeader()设置值会覆盖先前的设置值,如果打算在一个标头上附加值,则应使用addHeader()方法。

servlet响应参数

servlet响应参数

servlet响应参数在Java Servlet 中,响应参数通常是通过`HttpServletResponse` 对象来设置的。

`HttpServletResponse` 提供了一系列的方法,允许你设置响应的头部、状态码、内容类型以及响应正文等信息。

以下是一些常见的设置响应参数的方法:1. 设置响应头部信息:```javaresponse.setHeader("HeaderName", "HeaderValue");```这允许你设置特定的HTTP 响应头。

例如,你可以设置内容类型、缓存控制、跨域资源共享等。

2. 设置状态码:```javaresponse.setStatus(HttpServletResponse.SC_OK);```这将设置HTTP 响应的状态码。

`SC_OK` 表示成功,你还可以使用其他状态码,如`SC_NOT_FOUND`、`SC_INTERNAL_SERVER_ERROR` 等。

3. 设置内容类型:```javaresponse.setContentType("text/html");```这将设置响应的内容类型。

通常,你可以设置为"text/html"、"application/json" 等,根据你要返回的内容类型。

4. 设置字符编码:```javaresponse.setCharacterEncoding("UTF-8");```这用于指定响应正文的字符编码。

5. 获取输出流并写入响应体:```javaPrintWriter writer = response.getWriter();writer.write("Hello, World!");```这允许你获取输出流并将内容写入响应正文。

你可以使用`getOutputStream()` 方法,如果你需要处理二进制数据。

用jsp生成word文档代码

用jsp生成word文档代码
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
margin-top:17.0pt;
margin-right:0cm;
margin-bottom:16.5pt;
margin-left:0cm;
text-align:justify;
text-justify:inter-ideograph;
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
%>
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="/TR/REC-html40">
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>

response的setHeader()设置http头信息概述

response的setHeader()设置http头信息概述

response.setHeader 是用来设置返回页面的头meta 信息, 使用时response.setHeader( name, contect );meta是用来在HTML文档中模拟HTTP协议的响应头报文。

meta 标签用于网页的<head>与</head>中1、<meta name="Generator" contect="">用以说明生成工具(如Microsoft FrontPage 4. 0)等;2、<meta name="KEYWords" contect="">向搜索引擎说明你的网页的关键词;3、<meta name="DEscription" contect="">告诉搜索引擎你的站点的主要内容;4、<meta name="Author" contect="你的姓名">告诉搜索引擎你的站点的制作的作者;5、<meta name="Robots" contect= "all|none|index|noindex|follow|nofollow">其中的属性说明如下:设定为all:文件将被检索,且页面上的链接可以被查询;设定为none:文件将不被检索,且页面上的链接不可以被查询;设定为index:文件将被检索;设定为follow:页面上的链接可以被查询;设定为noindex:文件将不被检索,但页面上的链接可以被查询;设定为nofollow:文件将不被检索,页面上的链接可以被查询。

http-equiv属性1、<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80"> 和<me ta http-equiv="Content-Language" contect="zh-CN">用以说明主页制作所使用的文字以及语言;如英文是ISO-8859-1字符集,还有BIG5、utf-8、shift-Jis、Euc、Koi8-2等字符集;2、<meta http-equiv="Refresh" contect="n;url=http://yourlink/">定时让网页在指定的时间n内,跳转到页面http://yourlink/;3、<meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">可以用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。

response.sendRedirect()与forward()区别

response.sendRedirect()与forward()区别

response.sendRedirect()与forward()区别首先我们要明白用response.sendRedirect做转向的原理,他其实是向浏览器发送一个特别的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上能够看到地址的变化。

用<jsp:forward page=""/>则不同,他是直接在server做的,浏览器并不知道,也不和浏览器打交道,这从浏览器的地址并不变化能够看出。

所以使用response.sendRedirect时就需要注意以下两点:1,在使用response.sendRedirect时,前面不能有HTML输出。

这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。

事实上现在的server都有cache机制,一般在8K(我是说JSP SERVER),这就意味着,除非您关闭了cache,或您使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的HTML输出也是允许的。

假如报错说,“一些信息已被submitted”(原文忘了),那么,您就要注意看了,前面是不是有过多的HTML输出了。

2,在response.sendRedirect之后,应该紧跟一句return;我们已知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。

既然您已要做转向了,那么后的输出更有什么意义呢?而且有可能会因为后面的输出导致转向失败。

由于response.sendRedirect()之前不能有任何HTML输出.要想在重定向之前输出一些提示信息,可能会想到:out.println("<script>alert(''错误信息'')</script>");response.sendRedirect(index.html);return;但这个简单的想法,怎么也实现不了.没办法....只好另想他法1.全部用out.println输出javascript,由javascript完成重定向out.println("<script>alert(''错误信息'')</script>");out.println("<script>window.location.href=''index.jsp''</script>");return;2.用Header头刷新到重定向页面out.println("<script>alert(''错误信息'')</script>");response.setHeader("refresh","1;url=index.jsp");return;3.用java swing 组件的JOptionPane 代替javascript 提示框,由sendRedirect()完成重定向javax.swing.JOptionPane.showMessageDialog(null, "错误信息");response.sendRedirect("index.jsp");return;在Java Web开发中,经常会用到跳转页面的方法,一般有下面两种方法。

servlet的两种重定向方法的区别及应用

servlet的两种重定向方法的区别及应用

servlet的两种重定向方法的区别及应用一问题:在servlet/JSP编程学习中,发现有两种方法可以实现服务端输出重定向,一种是通过forward方法(例如JSP中的<jsp:forwardpage=”OtherPage.jsp”/>),另一种则是通过运用javax.servlet.http.HttpServletResponse接口的sendRedirect方法(例如response.sendRedirect(“OtherPage.jsp”);这两种方法有什么区别和联系呢?让我们看下面的分析。

二分析:(1)<JSP:FORWORD>该方法是利用服务器端先将数据输出到缓冲区的机制,在把缓冲区(buffer)的内容发送到客户端之前,原来的不发送,改为发送该页面的内容,如果在<JSP:FORWORD>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意.补充知识:输出缓冲区缺省情况下:服务端要输出到客户端的内容,不直接写到客户端,而是先写到一个输出缓冲区中.只有在下面三中情况下,才会把该缓冲区的内容输出到客户端上:1该JSP网页已完成信息的输出2输出缓冲区已满3JSP中调用了out.flush()或response.flushbuffer()输出缓冲区的大小可以用:<%@page buffer="none"|"nkb"%>或response.setBufferSize()设置,如下:1设置输出缓冲区的大小为1KB。

<%@page buffer="1kb"%>或response.setBufferSize(1);2设置输出缓冲区的大小为0,即不缓冲。

<%@page buffer="none" %>或response.setBufferSize(0);用response.getBufferSize()或out.getBufferSize()可取的输出缓冲区的大小,单位为字节.用response.isCommitted()可检查看服务端是否已将数据输出到客户端. 如果返回值是TRUE则已将数据输出到客户端,是FALSE则还没有。

HTTP 1.1 状态码与它们的用途

HTTP 1.1 状态码与它们的用途

302 (Found/找到)
与301有些类似,只是定位头信息中所给的URL应被理解为临时交换地址而不是永久的。注意:在 HTTP 1.0中,消息是临时移动(Moved Temporarily)的而不是被找到,因此HttpServletResponse中的常量是SC_MOVED_TEMPORARILY不是我们以为的SC_FOUND。
205 (Reset Content/重置内容)
重置内容205 (SC_RESET_CONTENT)的意思是虽然没有新文档但浏览器要重置文档显示。这个状态码用于强迫浏览器清除表单域。这是 HTTP 1.1中新加入的。
206 (Partial Content/局部内容)
206 (SC_PARTIAL_CONTENT)是在服务器完成了一个包含Range头信息的局部请求时被发送的。这是 HTTP 1.1中新加入的。
100 (Continue/继续)
如果服务器收到头信息中带有100-continue的请求,这是指客户端询问是否可以在后续的请求中发送附件。在这种情况下,服务器用100(SC_CONTINUE)允许客户端继续或用417 (Expectation Failed)告诉客户端不同意接受附件。这个状态码是 HTTP 1.1中新加入的。
} else {
// Create regular page
}
但是,这种方法对通过刷新响应头信息或等价的HTML标记<META HTTP-EQUIV="Refresh" ...>自动重载的页面起作用,因为它会返回一个204状态码停止以后的重载。但基于JavaScript脚本的自动重载在这种情况下仍然需要能够起作用。可以阅读本书7.2 ( HTTP 1.1 Response Headers and Their Meaning/HTTP 1.1响应头信息以及他们的意义)部分的详细讨论。

response.setHeader各种使用方法

response.setHeader各种使用方法

response.setHeader各种使⽤⽅法⼀秒刷新页⾯⼀次 response.setHeader("refresh","1");⼆秒跳到其它页⾯ response.setHeader("refresh","2;URL=otherPagename");没有缓存:response.setHeader("Pragma", "No-cache");response.setHeader("Cache-Control", "no-cache");设置过期的时间期限response.setDateHeader("Expires", System.currentTimeMillis()+⾃⼰设置的时间期限);訪问别的页⾯:response.setStatus(302); response.setHeader("location","url");通知浏览器数据採⽤的压缩格式:response.setHeader("Content-Encoding","压缩后的数据");快速浏览器压缩数据的长度:response.setHeader("Content-Length",压缩后的数据.length+"");快速浏览器图⽚或视频:response.setHeader("Content-type","这个參数在tomcat⾥conf下的web.xml⾥⾯找"); inputstream in= this.getServletContext.getResourceAsStream("/2.jpg");int len=0;byte buffer[]= new byte[1024]outputStream out = response.getOutputStream();while(len=in.read(buffer)>0){out.write(buffer,0,len)}快速浏览器已下载的形式:response.setHeader("Content-disposition","attachment;filename=2.jpg"); inputstream in= this.getServletContext.getResourceAsStream("/2.jpg");int len=0;byte buffer[]= new byte[1024]outputStream out = response.getOutputStream();while(len=in.read(buffer)>0){out.write(buffer,0,len)}。

response对象、转发、重定向

response对象、转发、重定向

response对象、转发、重定向1.response:响应。

该对象是⽤来响应⽤户请求后的结果。

2.response中的常⽤⽅法: response.setCharacterEncoding();该⽅法⽤来处理响应时的字符集编码问题。

response.sendRedirect("要跳转的url地址").该⽅法⽤来重定向页⾯。

浏览器的地址栏地址会发⽣改变3.转发: a.为什么要使⽤转发? 因为request请求到服务器后,该request中的数据会失效,那么⽆法将请求数据传递到其它页⾯,所以,使⽤转发进⾏处理。

转发对象使⽤request进⾏创建: RequestDispatcher rd = request.getRequestDispatcher("转发到的地址"); rd.forward(request,response); //注意:请求成功后,request对象的数据不存在了,所以在转发对象创建前, 使⽤request.setAttribute("",object)将要转发的数据放⼊ request作⽤域。

然后进⾏转发操作。

1 <body>2 <%3//获取⽤户提交的登录信息(获取请求信息使⽤request对象中的getParameter())4 String name = request.getParameter("uname");5 String pwd = request.getParameter("upwd");6if("jack".equalsIgnoreCase(name)&&"000000".equalsIgnoreCase(pwd)){7//登录成功页⾯重定向8//response.sendRedirect("main.jsp");9//如果需要将该页⾯的数据在页⾯跳转页⾯的同时⼀并进⾏传递时,⽤转发10//将要转发的数据放⼊request作⽤域11 request.setAttribute("uname", name);12//创建转发对象13 RequestDispatcher rd = request.getRequestDispatcher("main.jsp");14 rd.forward(request, response);15 }16 %>17 <%="姓名:"+name+",密码:"+pwd %>18 </body>1 <%2 //从request作⽤域中获取setAttribute()中的数据3String name = String.valueOf(request.getAttribute("uname"));4 %>5 <%="欢迎:"+name+",登录" %>。

response.setHeader(Content-disposition,attach。。。

response.setHeader(Content-disposition,attach。。。

response.setHeader(Content-disposition,attach。

最近在进⾏⽂件下载时发现⼀个问题,就是下⾯语句运⾏时,下载某些⽂件正常,下载某些⽂件异常,后来发现⽂件名中有空格的⽂件⽕狐浏览器是默认将⽂件名截断了的response.setHeader("Content-disposition","attachment;filename="+new String(fileName.getBytes("gb2312"),"iso8859-1"));但是在IE上⾯就是正常的,解决问题的⽅法有两种,⼀种⽐较简单,就是先判断是否是⽕狐,如果是⽕狐,则将⽂件名中的空格去掉,String agent = (String)request.getHeader("USER-AGENT");if(agent != null && agent.indexOf("MSIE") == -1) { try { fileName2=new String(fileName.replace("","").getBytes("gb2312"),"iso8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }}response.setHeader("Content-disposition","attachment;filename="+fileName2);另外⼀种就是加密解密,可以参考。

response.setHead...

response.setHead...

response.setHead...Response.AddHeader("content-type", "application/x-msdownload;");类型列表".*"="application/octet-stream"".001"="application/x-001"".301"="application/x-301"".323"="text/h323"".906"="application/x-906"".907"="drawing/907"".a11"="application/x-a11"".acp"="audio/x-mei-aac"".ai"="application/postscript"".aif"="audio/aiff"".aifc"="audio/aiff"".aiff"="audio/aiff"".anv"="application/x-anv"".asa"="text/asa"".asf"="video/x-ms-asf"".asp"="text/asp"".asx"="video/x-ms-asf"".au"="audio/basic"".avi"="video/avi"".awf"="application/vnd.adobe.workflow"".biz"="text/xml"".bmp"="application/x-bmp"".bot"="application/x-bot"".c4t"="application/x-c4t"".c90"="application/x-c90"".cal"="application/x-cals"".cat"="application/vnd.ms-pki.seccat" ".cdf"="application/x-netcdf"".cdr"="application/x-cdr"".cel"="application/x-cel"".cer"="application/x-x509-ca-cert" ".cg4"="application/x-g4"".cgm"="application/x-cgm"".cit"="application/x-cit"".class"="java/*"".cml"="text/xml"".cmp"="application/x-cmp"".cmx"="application/x-cmx"".cot"="application/x-cot"".crl"="application/pkix-crl"".crt"="application/x-x509-ca-cert" ".csi"="application/x-csi"".css"="text/css"".cut"="application/x-cut"".dbf"="application/x-dbf"".dbm"="application/x-dbm"".dbx"="application/x-dbx"".dcd"="text/xml"".dcx"="application/x-dcx"".der"="application/x-x509-ca-cert" ".dgn"="application/x-dgn"".dib"="application/x-dib"".dll"="application/x-msdownload" ".doc"="application/msword"".dot"="application/msword"".drw"="application/x-drw"".dtd"="text/xml"".dwf"="Model/vnd.dwf"".dwf"="application/x-dwf"".dwg"="application/x-dwg"".dxb"="application/x-dxb"".dxf"="application/x-dxf"".edn"="application/vnd.adobe.edn" ".emf"="application/x-emf"".eml"="message/rfc822"".ent"="text/xml"".epi"="application/x-epi"".eps"="application/x-ps"".eps"="application/postscript" ".etd"="application/x-ebx"".exe"="application/x-msdownload" ".fax"="image/fax"".fdf"="application/vnd.fdf"".fif"="application/fractals"".fo"="text/xml"".frm"="application/x-frm"".g4"="application/x-g4"".gbr"="application/x-gbr"".gcd"="application/x-gcd"".gif"="image/gif"".gl2"="application/x-gl2"".gp4"="application/x-gp4"".hgl"="application/x-hgl"".hmr"="application/x-hmr"".hpg"="application/x-hpgl"".hpl"="application/x-hpl"".hqx"="application/mac-binhex40" ".hrf"="application/x-hrf"".hta"="application/hta"".htc"="text/x-component"".htm"="text/html"".html"="text/html"".htt"="text/webviewhtml"".htx"="text/html"".icb"="application/x-icb"".ico"="image/x-icon"".ico"="application/x-ico"".iff"="application/x-iff"".ig4"="application/x-g4"".igs"="application/x-igs"".iii"="application/x-iphone"".img"="application/x-img"".ins"="application/x-internet-signup" ".isp"="application/x-internet-signup" ".IVF"="video/x-ivf"".java"="java/*"".jfif"="image/jpeg"".jpe"="image/jpeg"".jpe"="application/x-jpe"".jpeg"="image/jpeg"".jpg"="image/jpeg"".jpg"="application/x-jpg"".js"="application/x-javascript"".jsp"="text/html"".la1"="audio/x-liquid-file"".lar"="application/x-laplayer-reg"".latex"="application/x-latex"".lavs"="audio/x-liquid-secure"".lbm"="application/x-lbm"".lmsff"="audio/x-la-lms"".ls"="application/x-javascript"".ltr"="application/x-ltr"".m1v"="video/x-mpeg"".m2v"="video/x-mpeg"".m3u"="audio/mpegurl"".m4e"="video/mpeg4"".mac"="application/x-mac"".man"="application/x-troff-man"".math"="text/xml"".mdb"="application/msaccess"".mdb"="application/x-mdb"".mfp"="application/x-shockwave-flash" ".mht"="message/rfc822"".mhtml"="message/rfc822"".mi"="application/x-mi"".mid"="audio/mid"".midi"="audio/mid"".mil"="application/x-mil"".mml"="text/xml"".mnd"="audio/x-musicnet-download" ".mns"="audio/x-musicnet-stream" ".mocha"="application/x-javascript" ".movie"="video/x-sgi-movie"".mp1"="audio/mp1"".mp2"="audio/mp2"".mp2v"="video/mpeg"".mp3"="audio/mp3"".mp4"="video/mpeg4"".mpa"="video/x-mpg"".mpd"="application/vnd.ms-project" ".mpe"="video/x-mpeg"".mpeg"="video/mpg"".mpg"="video/mpg"".mpga"="audio/rn-mpeg"".mpp"="application/vnd.ms-project" ".mps"="video/x-mpeg"".mpt"="application/vnd.ms-project" ".mpv"="video/mpg"".mpv2"="video/mpeg"".mpw"="application/vnd.ms-project" ".mpx"="application/vnd.ms-project" ".mtx"="text/xml"".mxp"="application/x-mmxp"".net"="image/pnetvue"".nrf"="application/x-nrf"".nws"="message/rfc822"".odc"="text/x-ms-odc"".out"="application/x-out"".p10"="application/pkcs10"".p12"="application/x-pkcs12"".p7b"="application/x-pkcs7-certificates" ".p7c"="application/pkcs7-mime"".p7m"="application/pkcs7-mime"".p7r"="application/x-pkcs7-certreqresp" ".p7s"="application/pkcs7-signature" ".pc5"="application/x-pc5"".pci"="application/x-pci"".pcl"="application/x-pcl"".pcx"="application/x-pcx"".pdf"="application/pdf"".pdf"="application/pdf"".pdx"="application/vnd.adobe.pdx" ".pfx"="application/x-pkcs12"".pgl"="application/x-pgl"".pic"="application/x-pic"".pko"="application/vnd.ms-pki.pko" ".pl"="application/x-perl"".plg"="text/html"".pls"="audio/scpls"".plt"="application/x-plt"".png"="image/png"".png"="application/x-png"".pot"="application/vnd.ms-powerpoint" ".ppa"="application/vnd.ms-powerpoint" ".ppm"="application/x-ppm"".pps"="application/vnd.ms-powerpoint" ".ppt"="application/vnd.ms-powerpoint" ".ppt"="application/x-ppt"".pr"="application/x-pr"".prf"="application/pics-rules"".prn"="application/x-prn"".prt"="application/x-prt"".ps"="application/x-ps"".ps"="application/postscript"".ptn"="application/x-ptn"".pwz"="application/vnd.ms-powerpoint"".r3t"="text/vnd.rn-realtext3d"".ra"="audio/vnd.rn-realaudio"".ram"="audio/x-pn-realaudio"".ras"="application/x-ras"".rat"="application/rat-file"".rdf"="text/xml"".rec"="application/vnd.rn-recording"".red"="application/x-red"".rgb"="application/x-rgb"".rjs"="application/vnd.rn-realsystem-rjs"".rjt"="application/vnd.rn-realsystem-rjt"".rlc"="application/x-rlc"".rle"="application/x-rle"".rm"="application/vnd.rn-realmedia"".rmf"="application/vnd.adobe.rmf"".rmi"="audio/mid"".rmj"="application/vnd.rn-realsystem-rmj" ".rmm"="audio/x-pn-realaudio"".rmp"="application/vnd.rn-rn_music_package" ".rms"="application/vnd.rn-realmedia-secure" ".rmvb"="application/vnd.rn-realmedia-vbr" ".rmx"="application/vnd.rn-realsystem-rmx" ".rnx"="application/vnd.rn-realplayer"".rp"="image/vnd.rn-realpix"".rpm"="audio/x-pn-realaudio-plugin"".rsml"="application/vnd.rn-rsml"".rt"="text/vnd.rn-realtext"".rtf"="application/msword"".rtf"="application/x-rtf"".rv"="video/vnd.rn-realvideo"".sam"="application/x-sam"".sat"="application/x-sat"".sdp"="application/sdp"".sdw"="application/x-sdw"".sit"="application/x-stuffit"".slb"="application/x-slb"".sld"="application/x-sld"".slk"="drawing/x-slk"".smi"="application/smil"".smil"="application/smil"".smk"="application/x-smk"".snd"="audio/basic"".sol"="text/plain"".sor"="text/plain"".spc"="application/x-pkcs7-certificates" ".spl"="application/futuresplash"".spp"="text/xml"".ssm"="application/streamingmedia" ".sst"="application/vnd.ms-pki.certstore" ".stl"="application/vnd.ms-pki.stl"".stm"="text/html"".sty"="application/x-sty"".svg"="text/xml"".swf"="application/x-shockwave-flash" ".tdf"="application/x-tdf"".tg4"="application/x-tg4"".tga"="application/x-tga"".tif"="image/tiff"".tif"="application/x-tif"".tiff"="image/tiff"".tld"="text/xml"".top"="drawing/x-top"".torrent"="application/x-bittorrent" ".tsd"="text/xml"".txt"="text/plain"".uin"="application/x-icq"".uls"="text/iuls"".vcf"="text/x-vcard"".vda"="application/x-vda"".vdx"="application/vnd.visio"".vml"="text/xml"".vpg"="application/x-vpeg005" ".vsd"="application/vnd.visio"".vsd"="application/x-vsd"".vss"="application/vnd.visio"".vst"="application/vnd.visio"".vst"="application/x-vst"".vsw"="application/vnd.visio"".vsx"="application/vnd.visio"".vtx"="application/vnd.visio"".vxml"="text/xml"".wav"="audio/wav"".wax"="audio/x-ms-wax"".wb1"="application/x-wb1"".wb2"="application/x-wb2"".wb3"="application/x-wb3"".wbmp"="image/vnd.wap.wbmp" ".wiz"="application/msword"".wk3"="application/x-wk3"".wk4"="application/x-wk4"".wks"="application/x-wks"".wm"="video/x-ms-wm"".wma"="audio/x-ms-wma"".wmd"="application/x-ms-wmd" ".wmf"="application/x-wmf"".wml"="text/vnd.wap.wml"".wmv"="video/x-ms-wmv"".wmx"="video/x-ms-wmx"".wmz"="application/x-ms-wmz" ".wp6"="application/x-wp6"".wpd"="application/x-wpd"".wpg"="application/x-wpg"".wpl"="application/vnd.ms-wpl" ".wq1"="application/x-wq1"".wr1"="application/x-wr1"".wri"="application/x-wri"".wrk"="application/x-wrk"".ws"="application/x-ws"".ws2"="application/x-ws"".wsc"="text/scriptlet"".wsdl"="text/xml"".wvx"="video/x-ms-wvx"".xdp"="application/vnd.adobe.xdp" ".xdr"="text/xml"".xfd"="application/vnd.adobe.xfd" ".xfdf"="application/vnd.adobe.xfdf" ".xhtml"="text/html"".xls"="application/vnd.ms-excel" ".xls"="application/x-xls"".xml"="text/xml"".xpl"="audio/scpls"".xq"="text/xml"".xql"="text/xml"".xquery"="text/xml"".xsd"="text/xml"".xsl"="text/xml"".xslt"="text/xml"".xwd"="application/x-xwd" ".x_b"="application/x-x_b" ".x_t"="application/x-x_t"。

使用response.setHeader(Content-Disposition,atta。。。

使用response.setHeader(Content-Disposition,atta。。。

使⽤response.setHeader(Content-Disposition,atta。

今天遇到这么⼀个情况,在Action代码中进⾏⽂件下载: ActionForm得到file_id,通过file_id进⾏数据库查询得到file_name以及服务器硬盘上的file_uri,其中file_name是中⽂,然后通过如下代码下载response.setContentType("application/x-download");response.setHeader("Content-Disposition","attachment;filename="+file_name);OutputStream outputStream = response.getOutputStream();InputStream inputStream = new FileInputStream(file_uri());byte[] buffer = new byte[1024];int i = -1;while ((i = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, i);}outputStream.flush();outputStream.close();inputStream.close();假设file_name的内容是:“⼯程⽂档.docx”那么下载的结果就是⼀个名为“docx”的⽂件(⽂件名+后缀名),显然,⽂件名中的中⽂字符丢失了上⽹查了资料,解决办法如下(我也感觉很不可思议,但的确管⽤了)response.setContentType("application/x-download");file_name = new String(file_name.getBytes(), "ISO-8859-1");response.setHeader("Content-Disposition","attachment;filename="+file_name);// 其他代码略。

response.setHeader()方法设置http文件头的值

response.setHeader()方法设置http文件头的值

response.setHeader()方法设置http文件头的值8.1 HTTP应答头概述 Web服务器的HTTP应答一般由以下几项构成:一个状态行,一个或多个应答头,一个空行,内容文档。

设置HTTP应答头往往和设置状态行中的状态代码结合起来。

例如,有好几个表示“文档位置已经改变”的状态代码都伴随着一个Location头,而401(Unauthorized)状态代码则必须伴随一个WWW-Authenticate头。

然而,即使在没有设置特殊含义的状态代码时,指定应答头也是很有用的。

应答头可以用来完成:设置Cookie,指定修改日期,指示浏览器按照指定的间隔刷新页面,声明文档的长度以便利用持久HTTP连接,……等等许多其他任务。

设置应答头最常用的方法是HttpServletResponse的setHeader,该方法有两个参数,分别表示应答头的名字和值。

和设置状态代码相似,设置应答头应该在发送任何文档内容之前进行。

setDateHeader方法和setIntHeadr方法专门用来设置包含日期和整数值的应答头,前者避免了把Java时间转换为GMT时间字符串的麻烦,后者则避免了把整数转换为字符串的麻烦。

HttpServletResponse还提供了许多设置常见应答头的简便方法,如下所示:setContentType:设置Content-Type头。

大多数Servlet都要用到这个方法。

setContentLength:设置Content-Length头。

对于支持持久HTTP连接的浏览器来说,这个函数是很有用的。

addCookie:设置一个Cookie(Servlet API中没有setCookie方法,因为应答往往包含多个Set-Cookie头)。

另外,如上节介绍,sendRedirect方法设置状态代码302时也会设置Location头。

8.2 常见应答头及其含义有关HTTP头详细和完整的说明,应答头说明Allow 服务器支持哪些请求方法(如GET、POST等)。

setheader方法

setheader方法

setheader方法在HTTP协议中,HTTP头部是非常重要的部分,它包含了HTTP请求或响应的各种元数据信息。

在实际开发中,我们经常会需要在HTTP头部中添加或修改某些字段,比如设置Cookie、设置跨域请求头等等。

这时候,我们就需要使用setHeader方法来实现。

setHeader方法是Node.js中HTTP模块提供的一个API,它用于设置HTTP头部的字段值。

该方法的语法如下:```jsres.setHeader(name, value)```其中,res是一个HTTP响应对象,name是字段名,value是字段值。

这两个参数都是字符串类型。

例如,我们可以使用setHeader方法来设置一个名为“Content-Type”的字段,字段值为“application/json”:```jsres.setHeader('Content-Type', 'application/json')```这样,我们就能够在HTTP响应头中添加一个Content-Type字段,告诉客户端返回的数据格式是JSON格式。

除了setHeader方法外,HTTP模块还提供了一些其他的API,用于设置HTTP头部的字段值。

这些API包括:- res.writeHead(statusCode, headers):设置HTTP响应头的状态码和字段值。

- res.writeHeader(statusCode, headers):设置HTTP响应头的状态码和字段值,与writeHead方法的区别在于writeHead方法会清空HTTP响应头的所有字段值。

- res.getHeader(name):获取HTTP响应头中指定字段的值。

- res.removeHeader(name):从HTTP响应头中移除指定的字段。

在实际开发中,我们可以根据需要选择合适的API来设置HTTP 头部的字段值。

Web技巧:解决Response.Redirect()方法传递汉字丢失或出现乱码的问题

Web技巧:解决Response.Redirect()方法传递汉字丢失或出现乱码的问题
Байду номын сангаас
string url = Server.UrlEncode("汉字可能出现的乱码!"); //将传递的值进行URL编码 Response.Redirect("Default.aspx?name=" + url); string str = Server.UrlDecode(Request.QueryString["name"]);//解码
在我们平时做的项目的过程中用responseredirect进行传递参数的时候并且参数是汉字的时候可能会出现接受到的字符串跟传递的不一致如果遇见这种情况就可以采用url编码和解码来解决
Web技巧:解决 Response.Redirect()方法传递汉字丢失或出 现乱码的问题
在我们平时做的项目的过程中,用Response.Redirect()进行传递参数的时候,并且参数是汉字的时候,可能会出现接受到的字符串跟传递的 不一致,如果遇见这种情况,就可以采用URL编码和解码来解决,
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. HTTP消息头(1)通用信息头即能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pragma主要: Cache-Control , Connection , Data , Pragma , Trailer , Transfer-Encoding , Upgrade(2)请求头用于在请求消息中向服务器传递附加信息,主要包括客户机可以接受的数据类型,压缩方法,语言,以及客户计算机上保留的信息和发出该请求的超链接源地址等.主要: Accept , Accept-Encoding , Accept-Language , Host ,(3)响应头用于在响应消息中向客户端传递附加信息,包括服务程序的名称,要求客户端进行认证的方式,请求的资源已移动到新地址等.主要: Location , Server , WWW-Authenticate(认证头)(4)实体头用做实体内容的元信息,描述了实体内容的属性,包括实体信息的类型,长度,压缩方法,最后一次修改的时间和数据的有效期等.主要: Content-Encoding , Content-Language , Content-Length ,Content-Location , Content-Type(4)扩展头主要:Refresh, Content-Disposition2. 几个主要头的作用(1)Content-Type的作用该实体头的作用是让服务器告诉浏览器它发送的数据属于什么文件类型。

例如:当Content-Type 的值设置为text/html和text/plain时,前者会让浏览器把接收到的实体内容以HTML格式解析,后者会让浏览器以普通文本解析.(2)Content-Disposition 的作用当Content-Type 的类型为要下载的类型时, 这个信息头会告诉浏览器这个文件的名字和类型。

在讲解这个内容时,张老师同时讲出了解决中文文件名乱码的解决方法,平常想的是使用getBytes() , 实际上应使用email的附件名编码方法对文件名进行编码,但IE不支持这种作法(其它浏览器支持) , 使用javax.mail.internet.*包的MimeUtility.encodeWord("中文.txt")的方法进行编码。

Content-Disposition扩展头的例子:<%@ page pageEncoding="GBK"contentType="text/html;charset=utf-8" import="java.util.*,java.text.*"%><%=DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.CHINA).format(newDate())%><%response.setHeader("Content-Type","video/x-msvideo");response.setHeader("Content-Disposition","attachment;filename=aaa.doc");%>Content-Disposition中指定的类型是文件的扩展名,并且弹出的下载对话框中的文件类型图片是按照文件的扩展名显示的,点保存后,文件以filename的值命名,保存类型以Content中设置的为准。

注意:在设置Content-Disposition头字段之前,一定要设置Content-Type头字段。

(3)Authorization头的作用Authorization的作用是当客户端访问受口令保护时,服务器端会发送401状态码和WWW-Authenticate响应头,要求客户机使用Authorization来应答。

例如:<%@ page pageEncoding="GBK"contentType="text/html;charset=utf-8" import="java.util.*,java.text.*"%><%=DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.CHINA).format(newDate())%><%response.setStatus(401);response.setHeader("WWW-Authenticate", "Basic realm=\"Tomcat Manager Application\"");%>3.如何实现文件下载要实现文件下载,我们只需要设置两个特殊的相应头,它们是什么头?如果文件名带中文,该如何解决?两个特殊的相应头:----Content-Type: application/octet-stream----Content-Disposition: attachment;filename=aaa.zip例如:response.setContentType("image/jpeg");response.setHeader("Content- Disposition","attachment;filename=Bluehills.jpg");如果文件中filename参数中有中文,则就会出现乱码。

解决办法:(1)MimeUtility.encodeWord("中文.txt");//现在版本的IE还不行(2)new String("中文".getBytes("GB2312"),"ISO8859- 1");//实际上这个是错误的4. 测试并分析文件名乱码问题response.setHeader()下载中文文件名乱码问题response.setHeader("Content-Disposition", "attachment; filename=" + .URLEncoder.encode(fileName, "UTF-8"));下载的程序里有了上面一句,一般在IE6的下载提示框上将正确显示文件的名字,无论是简体中文,还是日文。

不过当时确实没有仔细测试文件名为很长的中文文件名的情况。

现如今经过仔细测试,发现文字只要超过17个字,就不能下载了。

分析如下:一. 通过原来的方式,也就是先用URLEncoder编码,当中文文字超过17个时,IE6 无法下载文件。

这是IE的bug,参见微软的知识库文章KB816868 。

原因可能是IE在处理Response Header 的时候,对header的长度限制在150字节左右。

而一个汉字编码成UTF-8是9个字节,那么17个字便是153个字节,所以会报错。

而且不跟后缀也不对.二. 解决方案:将文件名编码成ISO8859-1是有效的解决方案,代码如下:response.setHeader( "Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) );在确保附件文件名都是简体中文字的情况下,那么这个办法确实是最有效的,不用让客户逐个的升级IE。

如果台湾同胞用,把gb2312改成big5就行。

但现在的系统通常都加入了国际化的支持,普遍使用UTF-8。

如果文件名中又有简体中文字,又有繁体中文,还有日文。

那么乱码便产生了。

另外,在上Firefox (v1.0-en)下载也是乱码。

三. 参看邮件中的中文附件名的形式,用outlook新建一个带有中文附件的邮件,然后看这个邮件的源代码,找到:Content-Disposition: attachment;filename="=?gb2312?B?0MK9qCDOxLG+zsS1tS50eHQ=?="用这个filename原理上就可以显示中文名附件,但是现在IE并不支持,Firefox是支持的。

尝试使用javamail的MimeUtility.encode()方法来编码文件名,也就是编码成=?gb2312?B?xxxxxxxx?= 这样的形式,并从RFC1522 中找到对应的标准支持。

折中考虑,结合了一、二的方式,代码片断如下:String fileName = URLEncoder.encode(atta.getFileName(), "UTF-8");/** see /default.aspx?kbid=816868*/if (fileName.length() > 150) {String guessCharset = xxxx//根据request的locale 得出可能的编码,中文操作系统通常是gb2312fileName = new String(atta.getFileName().getBytes(guessCharset), "ISO8859-1");}response.setHeader("Content-Disposition", "attachment; filename=" + fileName);编码转换的原理:首先在源程序中将编码设置成GB2312字符编码,然后将源程序按Unicode编码转换成字节码加载到内存中(java加载到内存中的字节码都是Unicode编码),然后按GB2312编码获得中文字符串的字节数组,然后生成按ISO8859-1编码形式的Unicode字符串(这时的4个字节就变成了8个字节,高位字节补零),java培训北京java培训java培训班java就业培训java培训机构软件培训最好的java培训当在网络中传输时,因为setHeader方法中的字符只能按ISO8859-1传输,所以这时候就又把Unicode字符转换成了ISO8859-1的编码传到浏览器(就是把刚才高位补的零全去掉),这时浏览器接收到的ISO8859-1码的字符因为符合GB2312编码,所以就可以显示中文了。

相关文档
最新文档