• 阶段总结(2014-07-23)


    一、spring拦截器

    网上找到拦截器分为传统的和基于注解的两种,此处使用了基于注解的方式(简单易懂又看上去高大上→_→)

    xml里的配置:

    <mvc:interceptors>
            <mvc:interceptor>
                <mvc:mapping path="/ma/*" />
                <mvc:mapping path="/ma/interface/**" />
                <mvc:mapping path="/ma/application/**" />
                <mvc:mapping path="/ma/user/**" />
                <mvc:mapping path="/ma/org/**" />
                <mvc:mapping path="/ma/orgRole/**" />
                <mvc:mapping path="/ma/appRoleManage/**" />
                <bean class="org.wpapp.webapp.ma.interceptor.AdminInterceptor" />
            </mvc:interceptor>
        </mvc:interceptors>

    当初的要求是要写一个验证登录的拦截器,假如用户未登录而直接进入管理页面,则会跳转到登录页面。
    /ma为项目的自定义根目录,通常不被拦截器验证的部分写在/op下(主管说的-0-),现在的方法每添加一条路径就要添加一个<mvc:mapping>,不知道有木有反过来添加排除的路径。/*的作用范围是当前目录下的文件不包括文件夹,/**包括文件夹。

    解决:

    <mvc:interceptors>
            <mvc:interceptor>
                <mvc:mapping path="/ma/**" />
                <mvc:exclude-mapping path="/ma/op/*"/> 
            <bean class="org.wpapp.webapp.ma.interceptor.AdminInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>

    配置xsi:schemaLocation="http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"

    3.0不支持exclude-mapping

    登录检查拦截器类

    package org.wpapp.webapp.ma.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    import org.wpapp.webapp.ma.base.Constants;
    
    public class AdminInterceptor implements HandlerInterceptor {
    
        public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        response.setContentType("text/html; charset=utf-8");
        HttpSession session = request.getSession();
        System.out.println(session.getId());
        String key = (String) session.getAttribute(session.getId());
        if(key!=null && key.equals(Constants.admin_key))
            ;
        else
        {
            response.sendRedirect(request.getContextPath()+"/ma/op/index");
        }
            return true;
        }
    
        public void postHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            // TODO Auto-generated method stub
    
        }
    
        public void afterCompletion(HttpServletRequest request,
                HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            // TODO Auto-generated method stub
    
        }
    
    }


    二、加载静态资源

    刚写完后台,导入jsp的时候出现了css,js和图片无法载入的情况,一开始以为路径错了,F12看了半天,没见错哪里,后来才发现spring mvc默认不加载静态资源(真是坑死新手- -)

    简单点的方法:

    <!-- 注册静态资源 -->
        <mvc:default-servlet-handler/> 

    该方法会加载所有静态资源,假如只想加载部分资源,则:

    <mvc:resources mapping="/images/**" location="/images/" />

    将本地的资源文件夹映射到对应的URL地址
    或是写在web.xml中,例如:

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>  

    三、Controller

    (1)Controller返回jsp页面的方法有两种:

    a、利用ModelAndView

    该方法适用于要传递动态数据的时候

    @RequestMapping("/list")//方法对应的URL地址
     public ModelAndView list(){
    
      //jsp文件本地路径
      ModelAndView mv = new ModelAndView("interface/management_interface");
    
      //添加参数
      mv.addObject("index", 5);
      return mv;
     }

    注意到没,这是个相对地址,而且没有.jsp,原因在这:

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/" />
            <property name="suffix" value=".jsp"></property>
    </bean>

    b、直接返回页面

    @RequestMapping("/showApiAuth")
        public String showApiAuth() {
            return "interface/apiAuth";
    }


    (2)和ajax交互的方法需要加上@ResponseBody,返回值为object,list套map的写法可以直接用json接收数据

    @RequestMapping("/update")
    @ResponseBody
    public Object update(int apiId,int state){
        AppApiDetail apiDetail = interfaceService.load(apiId);
        apiDetail.setApiState(state);
        interfaceService.update(apiDetail);
        return showList();
    }
    
    public List<Object> showList(){
        List<AppApiDetail> apiList = null;
        List<Object> list = new ArrayList<Object>();
        apiList = interfaceService.loadAll();
        Iterator<AppApiDetail> iterator = apiList.iterator();
        while(iterator.hasNext()){
            AppApiDetail api = iterator.next();
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("api", api);
            list.add(map);
        }
        return list;
    }


    四、ajax处理form请求

    要上传文件一般是在form后加上enctype="multipart/form-data"属性,使用"file"上传。

    要获取form提交后的返回值一般用ajax,将form序列化。

    但当要同时做这两件事的时候问题就来了,传统的ajax方式不支持文件上传,后台获取的文件或变成null。

    解决方法是使用jquery.form.js,此js需要jquery的支持

    function doUpLoad() {
    
        function callback(data) {
            $(".top_yygl img:eq(0)").attr("src", "ma/t/fileopen?att_id="+data[0].big);
            $(".top_yygl img:eq(1)").attr("src", "ma/t/fileopen?att_id="+data[0].mid);
            $(".top_yygl img:eq(2)").attr("src", "ma/t/fileopen?att_id="+data[0].small);
            $("#big_attr_id").val(data[0].big);
            $("#mid_attr_id").val(data[0].mid);
            $("#small_attr_id").val(data[0].small);
        }
        
        var options = {
            url: "ma/application/uploadImg/",
            success : callback,
            type : 'post',
            dataType : 'json',
            clearForm : true
        };
        $("#uploadForm").ajaxSubmit(options);
    }


    五、atrDialog

     一个美观的弹出框插件,简化了部分代码

    确认删除功能:

    function del(appId) {
    
        art.dialog.confirm("确定要删除吗?", function() {
            location = "javascript:update(" + appId + ",2)";
        });
    }

    载入一个页面

    function showAddApp(id) {
        dialogApp = art.dialog.load('ma/application/showAddApp', {
            lock : true,
            top : '10%',
            padding : 0
        });
    }

    配置参数:
    http://www.planeart.cn/demo/artDialog/_doc/API.html#options

  • 相关阅读:
    Executing a system tool
    arcengine帮助http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/what_s_new_for_developers_at_10_/0001000002zp000000/
    Arcgis10.2中复制后粘贴图标是灰色的,无法粘贴,编辑也打开了,如何解决?
    VB.net X86设置
    elasticsearch5.5.2安装
    破解极验(geetest)验证码
    solidity代码
    2017年保荐代表人胜任能力考试辅导教材 投资银行业务
    投资银行业务过关必做1500题
    《一站到底》题库及答案
  • 原文地址:https://www.cnblogs.com/raikouissen/p/3862890.html
Copyright © 2020-2023  润新知