使用filter代替jsp获取参数
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>