一、spring拦截器

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

xml里的配置:


当初的要求是要写一个验证登录的拦截器,假如用户未登录而直接进入管理页面,则会跳转到登录页面。
/ma为项目的自定义根目录,通常不被拦截器验证的部分写在/op下(主管说的-0-),现在的方法每添加一条路径就要添加一个

解决:


配置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默认不加载静态资源(真是坑死新手- -)

简单点的方法:


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


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

default*.jpgdefault*.jsdefault*.css

三、Controller

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

a、利用ModelAndView

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

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

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


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 ListshowList(){
    ListapiList = null;
    Listlist = new ArrayList();
    apiList = interfaceService.loadAll();
    Iteratoriterator = apiList.iterator();
    while(iterator.hasNext()){
        AppApiDetail api = iterator.next();
        Mapmap = new HashMap();
        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
    });
}

artDialog详细介绍请看:这里

赞助本站,网站的持续发展离不开你们的支持!一分也是爱ヾ(◍°∇°◍)ノ゙
 本文链接: ,花了好多脑细胞写的,转载请注明链接喔~~
登陆
      正在加载评论