【问题标题】:more servlets vs more objects [duplicate]更多 servlet 与更多对象 [重复]
【发布时间】:2017-05-17 04:07:57
【问题描述】:

我想了解,如果请求必须通过多个函数处理-

  1. 通过多个 Servlet 转发好还是
  2. 作为对象方法实现

例子

      req.getRequestDispatcher("LoadSession").forward(req, resp); 
      req.getRequestDispatcher("AuthoriseRoles").forward(req, resp); 
      req.getRequestDispatcher("Boot").forward(req, resp); 

     sessionLoader.loadSession(req,res); 
     authoriseService.authoriseRoles(req,res); 
     bootService.boot(req, res);

【问题讨论】:

  • 我不认为这个问题有一个确定的和一个正确的答案。我想你会用时间和经验自己决定并站在你这边。
  • 在 99.99% 的情况下,第二个,但已修改。通常,servlet 应该处理从请求中获取内容,并将内容写入响应。其余的应该委托给类和方法,而不是处理请求和响应,而是处理类型化的对象。

标签: java servlets jakarta-ee


【解决方案1】:

我假设您正处于设计 API 的阶段。根据REST design principles,url 应该反映被处理或请求的资源,HTTP 方法应该反映需要对资源采取的操作。

因此,而不是 /LoadSession 并将会话 ID 作为 Http 请求中的查询参数,它应该是 GET /session/{id} 例如 GET /session/e841092fa2194340bc40(我假设 LoadSession 是返回现有会话的请求)

您可能会问自己,遵循这种设计有什么好处。就是有几个库和框架能够解析传入的 HTTP 请求并为您处理路由(例如,Jersey 是参考 JAX-RS 实现,JAX-RS 是 JavaEE 的 REST 标准)。因此,不是像您提到的那样编写 servlet,而是编写表示根据 HTTP 方法触发的资源和方法的类。你用注释把它们联系在一起:

@Path("/session")
import javax.ws.rs.*;
import javax.ws.rs.core.*;

@Produces({MediaType.APPLICATION_JSON})
public class SessionHandler
{
    @Context
    private HttpServletRequest httpRequest;
    @Context
    private HttpServletResponse httpResponse;

    @GET
    @Path("{id}")
    public Session load(@PathParam("id") String id) {
    ...

【讨论】:

  • 这根本不能回答问题。
  • 由于问题属于“基于意见”的问题,IMO 的答案应该有一些余地
猜你喜欢
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多