现在,根据URL参数中的站点名称,我们决定在Java(标准Jsp / Servlet Web应用程序)中采取的相应操作(方法调用等)。例如,请求类似于www.oursite.com?site=Ohio
想知道在不提供URL参数的情况下做什么的替代方案。
答案 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)站点。如果是这样,您可以设置一个请求属性,您可以使用与当前使用请求参数类似的方式。