码迷,mamicode.com
首页 > 其他好文 > 详细

阶段总结(2014-07-23)

时间:2014-07-23 15:38:49      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   java   color   使用   

一、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>,不知道有木有反过来添加排除的路径。

登录检查拦截器类

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地址
或是写在ewb.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

阶段总结(2014-07-23),布布扣,bubuko.com

阶段总结(2014-07-23)

标签:style   blog   http   java   color   使用   

原文地址:http://www.cnblogs.com/raikouissen/p/3862890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!