У меня есть Java Dynamic Web Project, в котором один из сервлетов выполняет следующие действия:
/**
* Servlet implementation class DataAPIServlet
*/
@WebServlet(name = "data", urlPatterns = { "/data" })
public class DataAPIServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String format;
/**
* @see HttpServlet#HttpServlet()
*/
public DataAPIServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
response)*/
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
format = request.getParameter("format").replaceAll("\"", "");
// create data model and add to request object
RequestDispatcher requestDispatcher = null;
if (format.equals(null)) {
requestDispatcher = jsonDispatcher(request);
response.setContentType("text/json");
} else {
System.out.println("SERVING FORMATTED DATA : " + format);
String returnString;
switch (format.toLowerCase()) {
case "xml":
returnString = Films.getFilmsXML();
request.setAttribute("data", returnString);
requestDispatcher = xmlDispatcher(request);
response.setContentType("text/xml;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
break;
case "csv":
returnString = Films.getFilmsCSV();
request.setAttribute("data",returnString);
requestDispatcher = csvDispatcher(request);
response.setContentType("text");
break;
case "json":
returnString = Films.getFilmsJSON();
request.setAttribute("data", returnString);
requestDispatcher = jsonDispatcher(request);
response.setContentType("text/json");
response.setContentType("text/json;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
break;
}
}
// Forward the request to the view
requestDispatcher.forward(request, response);
}
private RequestDispatcher xmlDispatcher(HttpServletRequest request){
return request.getRequestDispatcher("xml.jsp");
}
private RequestDispatcher jsonDispatcher(HttpServletRequest request) {
return request.getRequestDispatcher("json.jsp");
}
private RequestDispatcher csvDispatcher(HttpServletRequest request){
return request.getRequestDispatcher("csv.jsp");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
response)*/
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
doGet(request, response);
}
}
Один из сервлетов выводит данные в формате xml / json / csv на основе URL-запроса (дляexmaple / data? format = json вернет данные json для всех фильмов в базе данных).
Посредством отладки я обнаружил, что мои методы JAXB / GSON правильно создают набор данных из моей модели, однако при просмотре в ответе браузеру что-то идет не так, что, вероятно, выглядит как escape-последовательности HTML для специальных символовтакие как <в тегах xml. </p>
![json](https://i.stack.imgur.com/6UN7F.jpg)
![xml](https://i.stack.imgur.com/nVpvf.jpg)
Это сужает дочто-то делать с методом "" в JSTL.
Мой XML отображается следующим jsp:
<%@page contentType="application/xml" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page trimDirectiveWhitespaces="true"%>
<c:set var="data" value="${data}"></c:set>
<c:out value="${data}" />
Я могу сказать, что данные, передаваемые ответом на JSP, верныотладкой:
![debug screen shot 1](https://i.stack.imgur.com/0pvAh.jpg)
![debug screen shot 2](https://i.stack.imgur.com/fAVSG.jpg)
Если проблема с тем, что я делаю, не будетрешен каким-то лучшим механизмом для обслуживания данных xml / json / csv, чем просто передача их в файл jsp?предложения приветствуются.