0

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

4

3 回答 3

4

您可以使用POST而不是GET

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

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

于 2012-10-06T01:43:05.047 回答
1

为什么不直接将其编码到路径中?

www.oursite.com/俄亥俄州

如果你只是使用直接的 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
  }
}

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

于 2012-10-06T01:55:57.240 回答
1

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

于 2012-10-06T01:57:51.977 回答