URL参数的替代,用于决定调用哪个方法

时间:2012-10-06 01:27:11

标签: java jsp url design-patterns servlets

现在,根据URL参数中的站点名称,我们决定在Java(标准Jsp / Servlet Web应用程序)中采取的相应操作(方法调用等)。例如,请求类似于www.oursite.com?site=Ohio 想知道在不提供URL参数的情况下做什么的替代方案。

3 个答案:

答案 0 :(得分:4)

您可以使用 POST 代替 GET

GET 将请求参数附加到URL的末尾。

POST 使用表单发送编码数据。

答案 1 :(得分:1)

为什么不把它编码到路径中?

www.oursite.com/Ohio

如果你只是使用直接的servlet api,你可以做一些这种性质的事情:

String path = request.getPathInfo();
String site = path.split("/")[0];

话虽如此,大多数Web框架都有一些支持来帮助解决这个问题。 例如,在spring mvc:

@RequestMapping(value="/{site}/blah/blah", method=RequestMethod.GET)
public ModelAndView blahBlah(HttpServletRequest req,
                             HttpServletResponse resp,
                             @PathVariable("site") String site) {
   // do stuff here
}

当然,如果您的所有方法都需要这种映射,那么您也可以在控制器级别执行此操作:

@Controller
@RequestMapping(value="/{site}")
public class MyController {
  @RequestMapping(value="/blah/blah", method=RequestMethod.GET)
  public ModelAndView blahBlah(HttpServletRequest req,
                             HttpServletResponse resp,
                             @PathVariable("site") String site) {
     // do stuff here
  }
}

我相信这比查询参数更清晰,尽管它仍会显示在您的网址中。还有其他更复杂的方法,比如使用apache的反向代理和虚拟主机功能来根据站点名称进行切换。您可以在登录时执行某些操作,并将该站点存储在会话中。这一切都取决于您的要求。

答案 2 :(得分:1)

您可以使用替代网址,例如ohio.oursite.com。您的服务器响应* .oursite.com可以自动执行此过程。我可能会设置一个过滤器来查看子域是什么,并将其与预定义的允许站点列表进行比较。如果它不存在,您可以重定向回主(www)站点。如果是这样,您可以设置一个请求属性,您可以使用与当前使用请求参数类似的方式。