将servlet类扩展到自定义类以获得更多自定义响应

时间:2012-05-10 09:44:31

标签: java java-ee inheritance servlets

在我的项目中,为了插入,更新和删除我请求servlet类的数据,然后它处理并返回响应。

这一切都是通过jQuery ajax发生的。

现在它只响应成功或失败如下

PrintWriter out =   response.getWriter();
out.println("<custom message>");

现在我想让这条消息更有意义

默认情况下,我将接受1个名为"format"的参数,如果格式为null,则默认情况下特定的servlet类将以json格式响应,否则只有2个选项将是有jsonxml

然后我需要设置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
            }
        }
    }

}

以上课程扩展如下

import 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
    }
}

有可能.. ??

如何动态地将响应转换为xmljson???

1 个答案:

答案 0 :(得分:2)

不要在servlet中执行此操作。这是创建过滤器的好时机,它将完成您的转换工作。

  1. 过滤器使用ServletResponseWrapper并将其传递给servlet
  2. Servlet保存回复
  3. 过滤器检查参数并委托给适当的转换器(json,xml) - 后处理。