• 使用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>
  • 相关阅读:
    Access, SQL Server, and Oracle数据类型的对应关系
    [转]SQL Server 2005 从差异备份还原数据库
    疲惫
    关于在cmd命令里的路径包含空格的问题
    导Excel时的科学计数法问题
    [转]SQL SERVER 2005 备份与恢复简介
    [转]用C#创建Windows Service
    [转] vb.net option
    [转]sql server profiler only TrueType fonts are supported. this is not a truetype font
    进程、线程、协程之概念理解[转帖]
  • 原文地址:https://www.cnblogs.com/xiejn/p/12686296.html
Copyright © 2020-2023  润新知