首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅使用一个servlet

问仅使用一个servlet
EN

Stack Overflow用户
提问于 2014-05-17 22:33:24
回答 3查看 867关注 0票数 1

我正在制作一个带有登录系统和后台页面的网页。问题是,两者都使用"doPost“方法(登录用于身份验证,后台用于在数据库中插入数据)。我如何才能同时使用一个servlet呢?我问这个是因为两者都使用doPost,所以我做了两个servlet。

EN

回答 3

Stack Overflow用户

发布于 2014-05-17 22:41:11

如果您想使用单个servlet,则应该实现Front Controller Pattern。为此,您将解析请求URL并决定应该执行哪个操作:

代码语言:javascript
复制
public class MySingleServlet extends Servlet {
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException {
        String url = request.getPathInfo();
        //returns the action to handle
        Action action = ActionFactory.getAction(url);
        action.process(request, response);
    }
}

这涉及到一个Action接口/抽象类和一个ActionFactory,它将解析URL并返回正确的实现来处理要做的操作。

另一个更简单、更难维护的实现是发送一个action参数。这可能是一个问题,因为攻击者可能会使用代理并在将请求发送到action之前更改URL参数。如果这是一个被识别的有效action,并且攻击者知道要发送什么,那么您就有麻烦了。

请注意,有一些MVC框架已经实现了Front Controller模式,如Spring MVC和JSF,因此没有必要重新发明轮子,除非是为了学习目的(否则,您应该使用已经实现此模式的库)。

票数 3
EN

Stack Overflow用户

发布于 2014-05-17 22:37:45

您可以在post方法中添加额外的参数(例如action

从隐藏的表单字段检索的

  • ;如果使用的是表单,则从隐藏的表单字段中检索;如果使用的是xml

,则使用简单的&action='value'添加到请求中。

并根据其值执行适当的操作:

代码语言:javascript
复制
if (action.equals("auth"))
{
     // authenticate
}
else if (action.equals("backoffice"))
{
    // db update
}
票数 0
EN

Stack Overflow用户

发布于 2014-05-18 05:16:43

您可以根据您路由请求的方式从request对象获取pathInfo。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23712510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档