2012-05-15 26 views
31

Tôi tạo một tệp jsp trả về dưới dạng phản hồi một số chuỗi json. Nhưng tôi thấy rằng các Content-Type được thiết lập để tự động txtĐặt loại nội dung thành ứng dụng/json trong tệp jsp

mã JSP của tôi trông giống như

<%@ page import="java.util.Random" %> 
<%@ page language="java" %> 
<%@ page session="false" %> 

<% 
    String retVal = "// some json string"; 

    int millis = new Random().nextInt(1000); 
    // System.out.println("sleeping for " + millis + " millis"); 
    Thread.sleep(millis); 
%> 
<%=retVal%> 

Làm thế nào tôi có thể thực hiện một cái gì đó giống như

setHeader("Content-Type", "application/json"); 

trong ví dụ này?

Trả lời

59

Bạn có thể thực hiện qua Page directive.

Ví dụ:

<%@ page language="java" contentType="application/json; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
  • contentType = "MIMETYPE [; charset = characterset]" | "text/html; charset = ISO-8859-1"

Loại MIME và nhân vật mã hóa các tập tin JSP sử dụng cho các phản ứng nó sẽ gửi cho khách hàng. Bạn có thể sử dụng bất kỳ loại MIME nào hoặc bộ ký tự hợp lệ cho vùng chứa JSP. Loại MIME mặc định là văn bản/html và bộ ký tự mặc định là ISO-8859-1.

+0

Liên kết đã chết – inovaovao

9

Hãy thử đoạn mã này, nó nên làm việc quá

<% 
    //response.setContentType("Content-Type", "application/json"); // this will fail compilation 
    response.setContentType("application/json"); //fixed 
%> 
+0

Tại sao bạn lại giảm hạng? –

+0

nhưng điều này ném ngoại lệ như java.lang.IllegalStateException: getOutputStream() đã được gọi cho phản hồi này –

+0

đảm bảo bạn * không xuất bất kỳ ký tự đơn nào * cho khách hàng trước khi gọi 'setContentType (..)' (nếu không thì nội dung loại đã được sửa trước đó). Đặc biệt chú ý đến khoảng trống hoặc dòng mới sau%>, ví dụ: viết di chuyển đóng%> của dòng đầu tiên sang dòng thứ hai và bắt đầu ngay lập tức với <% ngay lập tức sau đó sau đó, vv .. –

2

@Petr Mensik & kensen john

Cảm ơn, tôi không thể sử dụng các chỉ thị trang vì tôi phải thiết lập một nội dung khác nhau nhập theo một số tham số URL. Tôi sẽ dán mã của tôi ở đây vì nó là một cái gì đó khá phổ biến với JSON:

<% 
     String callback = request.getParameter("callback"); 
     response.setCharacterEncoding("UTF-8"); 
     if (callback != null) { 
      // Equivalent to: <@page contentType="text/javascript" pageEncoding="UTF-8"> 
      response.setContentType("text/javascript"); 
     } else { 
      // Equivalent to: <@page contentType="application/json" pageEncoding="UTF-8"> 
      response.setContentType("application/json"); 
     } 

     [...] 

     String output = ""; 

     if (callback != null) { 
      output += callback + "("; 
     } 

     output += jsonObj.toString(); 

     if (callback != null) { 
      output += ");"; 
     } 
    %> 
    <%=output %> 

Khi callback được cung cấp, lợi nhuận:

callback({...JSON stuff...}); 

với content-type "text/javascript"

Khi callback KHÔNG được cung cấp, trả về:

{...JSON stuff...} 

với loại nội dung "application/json"

+0

Cảm ơn, tôi đã tìm kiếm một cái gì đó như thế này – Kainix

Các vấn đề liên quan