在我的项目中,为了插入、更新和删除我向 servlet 类请求的数据,然后它处理并返回响应。
这一切都是通过 jQuery ajax 发生的。
现在它只响应成功或失败,如下
PrintWriter out = response.getWriter();
out.println("<custom message>");
现在我想让这条信息更有意义
默认情况下,我将接受 1 个名为 “format”
的参数,如果格式为 null
,则默认情况下该特定 servlet 类将以 json 响应
code> 格式,否则只有 2 个选项 json
和 xml
。
然后我需要设置response.setContentType("application/json");
等。
所以我将制作一个servlet类,如下
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class myservlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
{
String format = req.getParameter("format");
if(format == null)
{
format = "json";
}
else
{
if(format.equals("json"))
{
resp.setContentType("application/json");
}
else if(format.equals("xml"))
{
resp.setContentType("application/rss+xml");
}
else
{
//error
}
}
}
public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
{
String format = req.getParameter("format");
if(format == null)
{
format = "json";
}
else
{
if(format.equals("json"))
{
resp.setContentType("application/json");
}
else if(format.equals("xml"))
{
resp.setContentType("application/rss+xml");
}
else
{
//error
}
}
}
}
上面的类扩展如下
导入java.io.PrintWriter;
import javax.servlet.ServletException;
public class abc extends myservlet
{
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
{
PrintWriter out = resp.getWriter();
out.println("{/"id/": /"file/"}");
//response must be converted to either json or to xml
}
}
这可能吗??
如何动态地将响应转换为 xml
或 json
...??
最佳答案
不要在 servlet 中执行此操作。这是创建一个可以完成转换工作的过滤器的好时机。
- 过滤器使用ServletResponseWrapper并将其传递给 servlet
- Servlet 保存响应
- 过滤器检查参数并委托(delegate)给适当的转换器(json、xml) - 后处理。
关于java - 将 servlet 类扩展为自定义类以获得更多自定义响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10531398/