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