1、编写一个filter
package core.filter;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 过滤所有HTML请求
*
*
*
*/
public class HTML implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
req.setCharacterEncoding("UTF-8");
res.setCharacterEncoding("UTF-8");
res.setHeader( "Access-Control-Allow-Origin", "*" );
String uri = backslashToSingle( req.getRequestURI() );
String context = req.getContextPath();
Enumeration enu = request.getParameterNames();
StringBuffer params = new StringBuffer();
while(enu.hasMoreElements()){
String paraName = (String)enu.nextElement();
params.append("&"+paraName+"="+request.getParameter(paraName));
}
//重定向
if(uri.indexOf(".") != -1) {
res.sendRedirect(context + "/html/go?pagepath=" + uri.substring(context.length()+1,uri.indexOf(".")) + params);
return;
}
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
public void destroy() {
}
/**
* 将路径中的连续斜杠转成单个的
* @param strURL
* @return
*/
public static String backslashToSingle(String strURL){
while ( strURL.indexOf( "//" ) != -1 ) {
strURL = strURL.replace( "//", "/" );
}
if( strURL.indexOf( ":" ) != -1 ) {
strURL = strURL.replace( ":", ":/" );
}
return strURL;
}
}
2.在web.xml中配置该过滤器:
<!-- html -->
<filter>
<filter-name>html</filter-name>
<filter-class>core.filter.HTML</filter-class>
</filter>
<filter-mapping>
<filter-name>html</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
3、创建controller处理该请求:
package module.api.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import core.common.springmvc.BasicController;
/**
* 往html界面中注入常用el属性
*
*/
@Controller
@RequestMapping("/html")
public class HTMLController extends BasicController {
@RequestMapping("/go")
@ResponseBody
public ModelAndView go(HttpServletRequest request, String pagepath, String parameter) {
ModelAndView modelAndView = new ModelAndView();
String rootPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
String basePath = rootPath + request.getContextPath() + "/";
rootPath += "/";
String title = request.getParameter("name");
modelAndView.setViewName(pagepath);
modelAndView.addObject("rootPath", rootPath);
modelAndView.addObject("basePath", basePath);
Object object = null;
try {
object = JSON.parse(parameter);
if (!(object instanceof JSONObject)) {
parameter = "{}";
}
} catch (Exception e) {
parameter = "{}";
}
modelAndView.addObject("parameter", parameter);
modelAndView.addObject("title", title == null ? "" : title);
return modelAndView;
}
@RequestMapping("/readdata/go")
@ResponseBody
public ModelAndView readDataGo(HttpServletRequest request, String pagepath, String parameter, String interfacepath,
String interfaceparameter) {
ModelAndView modelAndView = new ModelAndView();
String rootPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
String basePath = rootPath + request.getContextPath() + "/";
rootPath += "/";
String title = request.getParameter("name");
modelAndView.setViewName(pagepath);
modelAndView.addObject("rootPath", rootPath);
modelAndView.addObject("basePath", basePath);
Object object = null;
try {
object = JSON.parse(parameter);
if (!(object instanceof JSONObject)) {
parameter = "{}";
}
} catch (Exception e) {
parameter = "{}";
}
modelAndView.addObject("parameter", parameter);
modelAndView.addObject("title", title == null ? "" : title);
return modelAndView;
}
}
4、在页面中使用:
<!DOCTYPE html>
<html lang="en" allowtransparency="true">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>vcn</title>
<link rel="stylesheet" href="${basePath}/static/css/reset.css" />
<link rel="stylesheet" href="${basePath}/pages/vcn/css/vcn.css" />
</head>
<body>
<div class="to_video2 _one">
<iframe src="${basePath}/pages/vcn/vcnbutton.html?parameter={num:0}" frameBorder="0" marginHeight="0" marginWidth="0">good</iframe>
</div>
<div class="to_video2 _two">
<iframe src="${basePath}/pages/vcn/vcnbutton.html?parameter={num:1}" frameBorder="0" marginHeight="0" marginWidth="0">good</iframe>
</div>
<div class="videoroad-box2" >
<object id="vcnocx" width="100%" height="100%" CLASSID="CLSID:3556A474-8B23-496F-9E5D-38F7B74654F4"></object>
</div>
</body>
<script type="text/javascript">
var basePath = '${basePath}';
var rootPath = '${rootPath}';
var parameter = ${ parameter };
var page = {
"init": function () {
loginVCN(vcn2road);
}
};
</script>
<script src='${basePath}/plugins/jquery/jquery-3.3.1.min.js'></script>
<script src="${rootPath}/libs/resafety/build/resafety-1.19.5.js"></script>
<script src="${basePath}/pages/vcn/js/vcn.js"></script>
</html>