java - 将 servlet 类扩展为自定义类以获得更多自定义响应

标签 java jakarta-ee inheritance servlets

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

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

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

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

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

默认情况下,我将接受 1 个名为 “format” 的参数,如果格式为 null,则默认情况下该特定 servlet 类将以 json 响应 code> 格式,否则只有 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
            }
        }
    }

}

上面的类扩展如下

导入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...??

最佳答案

不要在 servlet 中执行此操作。这是创建一个可以完成转换工作的过滤器的好时机。

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

关于java - 将 servlet 类扩展为自定义类以获得更多自定义响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10531398/

相关文章:

c# - 基类中定义的静态对象对于子类应该是不同的

c++ - 在模板中使用派生类并将其存储到基类的 vector 中

java - 在一个 Controller 中使用多个 Spring JpaTransactionManager?

java - 将 Scala 条件转换为 Java 谓词

Java 索引 2 处路径中存在非法字符

Java Web 应用程序源文件

java - 全局 MySQL 连接还是每个请求一个连接?

java - java 9 中 javax.activation 包的替代品是什么?

java - 从 .NET 的角度来看,我需要了解不同版本的 Java 的哪些信息?

c++ - 如何在派生类构造函数中初始化基类成员变量?