我正在制作一个带有登录系统和后台页面的网页。问题是,两者都使用"doPost“方法(登录用于身份验证,后台用于在数据库中插入数据)。我如何才能同时使用一个servlet呢?我问这个是因为两者都使用doPost,所以我做了两个servlet。
发布于 2014-05-17 22:41:11
如果您想使用单个servlet,则应该实现Front Controller Pattern。为此,您将解析请求URL并决定应该执行哪个操作:
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,因此没有必要重新发明轮子,除非是为了学习目的(否则,您应该使用已经实现此模式的库)。
发布于 2014-05-17 22:37:45
您可以在post方法中添加额外的参数(例如action
从隐藏的表单字段检索的
,则使用简单的&action='value'添加到请求中。
并根据其值执行适当的操作:
if (action.equals("auth"))
{
// authenticate
}
else if (action.equals("backoffice"))
{
// db update
}发布于 2014-05-18 05:16:43
您可以根据您路由请求的方式从request对象获取pathInfo。
https://stackoverflow.com/questions/23712510
复制相似问题