论坛首页 Java企业应用论坛

tomcat部署的项目如何实现301跳转

浏览 9978 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-19  
现在想在远程的centos 的 tomcat ROOT下的应用实现
如:
在浏览器中输入 test.com
301跳转到
http://www.test.com怎么做,tomcat貌似不能直接放.htaccess
   发表时间:2012-05-20  
前端放nginx或apache,将jsp代理至tomcat上。
在nginx或apache中实现301.
0 请登录后投票
   发表时间:2012-05-23  

刚好最近做了这个功能。

前提是系统是用Tomcat直接对外的,前面没有Apache或者Nginx,否则请参考 hunkguo 兄的建议。

我的实现方式是用Filter来实现的,Tomcat没有这个配置301重定向的。

 

附上Filter的核心代码,希望对你有帮助:

public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain filterChain) throws IOException, ServletException {
		String hostName = "http://"+req.getServerName();
		if(hostName.startsWith("http://test.com")) {
			HttpServletResponse response = (HttpServletResponse) resp;
			HttpServletRequest httpRequest = (HttpServletRequest)req;
			String queryString = (httpRequest.getQueryString() == null ? "" : "?"+httpRequest.getQueryString());
			response.setStatus(301);
			String requestUrl = httpRequest.getRequestURL().toString();
			requestUrl = requestUrl.replace("http://test.com", "http://www.test.com");
			
		     response.setHeader( "Location", requestUrl + queryString);
		     response.setHeader( "Connection", "close" );
		}else {
			filterChain.doFilter(req, resp);
		}
		
	}
 

0 请登录后投票
   发表时间:2012-05-24  
Tony_Qiu 写道

 

刚好最近做了这个功能。

前提是系统是用Tomcat直接对外的,前面没有Apache或者Nginx,否则请参考 hunkguo 兄的建议。

我的实现方式是用Filter来实现的,Tomcat没有这个配置301重定向的。

 

附上Filter的核心代码,希望对你有帮助:

 

public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain filterChain) throws IOException, ServletException {
		String hostName = "http://"+req.getServerName();
		if(hostName.startsWith("http://test.com")) {
			HttpServletResponse response = (HttpServletResponse) resp;
			HttpServletRequest httpRequest = (HttpServletRequest)req;
			String queryString = (httpRequest.getQueryString() == null ? "" : "?"+httpRequest.getQueryString());
			response.setStatus(301);
			String requestUrl = httpRequest.getRequestURL().toString();
			requestUrl = requestUrl.replace("http://test.com", "http://www.test.com");
			
		     response.setHeader( "Location", requestUrl + queryString);
		     response.setHeader( "Connection", "close" );
		}else {
			filterChain.doFilter(req, resp);
		}
		
	}
 

 

 

不大推荐这么做,容器的层次host-context-wrapper, 使用filter其实是在wrapper层完成的,但是上述跳转需求在host层就已经能决定了。可以看一下我的博客。

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics