zoukankan      html  css  js  c++  java
  • 使用ModelAndView和过滤器实现获取HTML请求的参数

    需求:获取HTML的请求参数

    类似:

    实现思路:

    1、利用过滤器拦截所有HTML请求

    2、利用ModelAndView把参数保存起来

    3、在HTML页面使用${key}把参数获取到

    一、利用过滤器拦截所有HTML请求

    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>

    过滤器:

    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;
        }
    }

    HTML的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);
    //        modelAndView.addObject("basePath", "http://183.203.223.224:82/taiyuan/");
            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); 
    //        modelAndView.addObject("basePath", "http://183.203.223.224:82/taiyuan/");
            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;
        }
    }

    父类BasicController:

    package core.common.springmvc;
    
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.web.bind.WebDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    import util.ResponseUtil;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    
    public abstract class BasicController {
    
        protected Map<String, Object> result = new HashMap<String, Object>();
        protected boolean flag = false;
        protected String msg = "";
        protected String businessCode="";
    
    
        public String basePath() {
            HttpServletRequest request = request();
            String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
            return basePath;
        }
    
        public String rootPath() {
            HttpServletRequest request = request();
            String rootPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
            return rootPath;
        }
    
        public String cdnPath() {
            HttpServletRequest request = request();
            String cdnPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/cdn";
            return cdnPath;
        }
    
        
        public void write(Integer total,List list,HttpServletResponse response) throws Exception{
            JSONObject result = new JSONObject();
            JSONArray jsonArray = new JSONArray( list );
            result.put("rows", jsonArray);
            result.put("total", total);
            ResponseUtil.write(response, result);
        }
    
        @InitBinder   
        public void initBinder(WebDataBinder binder) {
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");   
            dateFormat.setLenient(true);
            binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
        }
    
        public String findSessionId() {
            HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
            String contextPath = request.getContextPath();
            return contextPath+request.getSession().getId();
        }
    
        public HttpServletRequest request() {
            HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();  
            return request;
        }
    }

    二、利用ModelAndView把参数保存起来

    三、在HTML页面使用${key}把参数获取到

        var basePath = '${basePath}';
        var rootPath = '${rootPath}';
        var parameter = ${ parameter };

    实现获取参数:

    参考文章:

    https://www.cnblogs.com/Sunnor/p/6130380.html

    https://blog.csdn.net/ITBigGod/article/details/79685610

    https://blog.csdn.net/qq_29569183/article/details/79282673

    https://blog.csdn.net/qq_39592670/article/details/82466907

    https://blog.csdn.net/qq_41995919/article/details/102944960

  • 相关阅读:
    Chrome开发者工具中Elements(元素)断点的用途
    最简单的SAP云平台开发教程
    Java实现 LeetCode 495 提莫攻击
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 492 构造矩形
  • 原文地址:https://www.cnblogs.com/xiejn/p/11997306.html
Copyright © 2011-2022 走看看