×

Response.ContentType 详细列表

前端技术网 前端技术网 发表于2024-01-25 03:15:17 浏览2139 评论0

抢沙发发表评论

一、@responsebody会默认设置响应时content-type类型吗

classTest{publicstaticvoidmain(String[]args){Aa=newA();System.out.println(getValueInField(a,"b1","i"));System.out.println(getValueInField(a,"b2","i"));System.out.println(getValueInField(a,"b3","i"));}publicstaticObjectgetValueInField(Objectobj,Stringfield,Stringname){//三个参数分别是外部的类的对象obj,作为成员属性的类的引用名,要查询的类内部的属性名try{Objecto=obj.getClass().getDeclaredField(field).get(obj);returno.getClass().getDeclaredField(name).get(o);}catch(Exceptione){System.out.println("查找失败");returnnull;}}}classA{Bb1=newB(1);Bb2=newB(2);}classB{inti;B(inti){this.i=i;}}追问classA{publicBb;get;set;}classB{privateinti;get;set;}publicstaticvoidmain(String[]args){Listlist=newArrayList();Aa=newA();Bb=newB();b.setI(1);a.setB(b);list.add(a);Aa1=newA();Bb1=newB();b1.setI(11);a1.setB(b1);list.add(a1);//取值的时候传这个list以及一个属性名的list。}回答importjava.lang.reflect.Field;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;classTest{publicstaticvoidmain(String[]args){Aa1=newA();Bb1=newB();a1.setB(b1);b1.setI(1);Aa2=newA();Bb2=newB();a2.setB(b2);b2.setI(2);Listlist=newArrayList();list.add(a1);list.add(a2);Iteratorit=getValueInList(list,"b","i").iterator();while(it.hasNext()){System.out.println(it.next());}}publicstaticListgetValueInList(Listlist,Stringfield,Stringname){Listl=newArrayList();Iteratorit=list.iterator();while(it.hasNext()){l.add(getValueInField(it.next(),field,name));}returnl;}publicstaticObjectgetValueInField(Objectobj,Stringfield,Stringname){try{Fieldf1=obj.getClass().getDeclaredField(field);f1.setAccessible(true);Objecto=f1.get(obj);Fieldf2=o.getClass().getDeclaredField(name);f2.setAccessible(true);returnf2.get(o);}catch(Exceptione){System.out.println("查找失败");returnnull;}}}classA{privateBb;publicvoidsetB(Bb){this.b=b;}}classB{privateinti;publicvoidsetI(inti){this.i=i;}}//查参数只需要用参数名,不应该通过类型查找,反编译文件很容易得到需要的参数名

二、如何设置Response中的ContentType

如何设置Response中的ContentType

Response.ContentType 详细列表

ajax开发中,常遇到下面的几种情况:

1服务端需要返回一段普通文本给客户端 

2服务端需要返回一段HTML代码给客户端 

3服务端需要返回一段XML代码给客户端 

4服务端需要返回一段javascript代码给客户端 

5服务端需要返回一段json串给客户端

Response.ContentType 详细列表

================================

对于每一种返回类型规范的做法是要在服务端指定 response的contentType的. 

(当然不指定绝大多数情况下也没什么问题尤其是返回"非xml"的时候)

Java代码**代码

   1.普通文本: text/plain  

   2. HTML代码: text/html  

   3. XML代码: text/xml 

 

以上三个可以说是毫无争议的,也没什么值得讨论的, 

但是另外两种情况就要注意一下了.

javascript的 contentType按最标准的写法应该是 application/javascript. 

而常用的 text/javascript已经被 rfc定义为废弃的. 

(参见 rfc4329)

但是在这里暂时不建议使用 application/javascript. 

大家还是继续使用 text/javascript为好. 

因为很多老旧浏览器并不支持 application/javascript. 

而所有浏览器都支持 text/javascript. 

在标准和广泛的兼容性之间还是暂且选择后者吧.

json的 contentType常见写法有: text/json& text/javascript. 

但是这个 text/json其实是根本不存在的, 

而 text/javascript在有些时候客户端处理起来会有歧义. 

对于json的contentType, rfc里定义的标准写法是:application/json. 

(参见 rfc4627)

在这里毫无疑问我们应该选择标准写法的 application/json.

====================== 

也许有人会问,设置这些有什么用呢? 

以前一些程序没有设置这些东西运行的也很好啊.

首先必须承认的一点是,这些信息在目前绝大多数情况下确实不设置也可以. 

但是这种做法是不规范不标准的.

未来对于复杂的ajax应用,不规范的行为是会带来很大的隐患.

举个例子.

对于同样的内容可以有下面的3种形式

html形式 

Html代码**代码

   1.<script type="text/javascript">  

   2.  var user={  

   3.    name:"Tom",  

   4.    age: 12  

   5.};  

   6.</script> 

对于 html形式,客户端得到数据后,往往是对其做dom操作.

javascript形式 

Javascript代码**代码

   1. var user={  

   2.   name:"Tom",  

   3.   age: 12  

   4.; 

对于 javascript形式,往往是对其做eval操作: 

eval(responseText);

json形式

   1.{  

   2.   name:"Tom",  

   3.   age: 12 

 

对于 json形式,往往是对其做  eval操作之后赋值给某变量: 

var clientVar= eval(responseText);

客户端拿到不同形式的代码所要做的工作是不一样的. 

如果没有设置 contentType客户端很难判断返回的数据是什么,该怎么处理.

==========================

另外,对于返回信息,如果不设置contentType,web服务器往往会给返回的内容添加一个"默认的contentType", 

但是这个"默认"会根据服务器的不同以及web应用配置的不同而不同.

而浏览器对于没有足够头信息的返回值也会做出"某些默认行为(打开或下载或报错". 

总之不同浏览器不同的浏览器设置结果可能是不一样的无法把控.

也就是说当我们不指定正确的contentType时,我们所能做的只能是祈祷在所有环境中,程序的表现是一致的, 

但是与其"祈祷"不如我们亲自把这些信息加上来得可靠.

所以正确设置返回信息的 contentType 还是很有必要的.

====================== 

总结&建议: 

1.

服务端向客户端发送 JSON数据时: 

Content-Type='application/json;charset=UTF-8'

2. 

服务端向客户端发送 JS代码时: 

Content-Type='text/javascript;charset=UTF-8'

服务端判断客户端提交的是否是 JSON数据时:

Content-Type='application/json;charset=UTF-8' 

Content-Type='text/json;charset=UTF-8' 

Content-Type='text/javascript;charset=UTF-8' 

Content-Type='application/javascript;charset=UTF-8'

只要 Content-Type满足上面4个条件中的任意一个时,就可以认为提交的数据是 JSON数据. 

之所以要提供4种选择是因为为了提供更好的兼容性. 

(我想没有人会提交真正的js代码到服务端然后用服务端js引擎去解析执行吧? 

即使真有这种需求也可以在js代码外包一层 json格式的 wrapper, 

所以姑且都当作json处理应该没什么问题) 

三、“response”的“contentType” 几种类型是什么

ajax开发中在请求服务器端的响应时,对于每一种返回类型规范的做法是要在服务端指定response的contentType\x0d\x0a常遇到下面的几种情况:\x0d\x0a1、服务端需要返回一段普通文本给客户端,Content-Type="text/plain"\x0d\x0a2、服务端需要返回一段HTML代码给客户端,Content-Type="text/html"\x0d\x0a3、服务端需要返回一段XML代码给客户端,Content-Type="text/xml"\x0d\x0a4、服务端需要返回一段javascript代码给客户端\x0d\x0a5、服务端需要返回一段json串给客户端\x0d\x0a我们主要讨论返回javascript代码和Json对象的情况。\x0d\x0ajavascript的 contentType按最标准的写法应该是 application/javascript。而常用的\x0d\x0atext/javascript已经被 rfc定义为废弃的。\x0d\x0a但是在这里暂时不建议使用 application/javascript.大家还是继续使用 text/javascript\x0d\x0a为好.因为很多老旧浏览器并不支持 application/javascript.\x0d\x0a而所有浏览器都支持text/javascript.在标准和广泛的兼容性之间还是暂且选择后者吧。\x0d\x0ajson的 contentType常见写法有: text/json&\x0d\x0atext/javascript.\x0d\x0a但是这个 text/json其实是根本不存在的,而 text/javascript在有些时候客户端处理起来会有歧义.\x0d\x0a对于json的contentType, rfc里定义的标准写法是:application/json.\x0d\x0a在这里毫无疑问我们应该选择标准写法的 application/Json。

感谢您的阅读!希望本文对解决您关于Response.ContentType 详细列表的问题有所帮助。如果您还有其他疑问,欢迎随时向我们提问。