SpringMVC 의 고급 특성 (03)

18424 단어 javaEE
1. 데이터 변환:
        예 를 들 어 프론트 jsp 페이지 에서 전 달 된 날 짜 는 문자열 형식 이 고 문자열 을 Date 형식 으로 바 꾸 는 방법 입 니 다.
        방식 1: Spring 이 지원 하 는 변환기: Convert 인터페이스, 구체 적 인 실현 방식 은 이미 이전 블 로그 에 구현 되 었 습 니 다.이런 방식 은 임의의 유형의 데이터 변환 을 실현 할 수 있다.
        방식 2: Fomatter 인터페이스, String 과 임의의 대상 간 의 전환 만 가능 합 니 다.
       방식 3: 포맷 공장 주석, AnnotationFormatterFactory 사용 데 이 터 를 포맷 하 다.그 중 에는 두 가지 중요 한 주석 이 포함 되 어 있 습 니 다: @ DateTimeFormat: 날짜 시간 형식 입 니 다. @NumberFormat: 숫자 유형 은 화폐, 정상 숫자, 백분 수 유형 을 포함한다.주 해 는 pojo 의 속성 에 작용 합 니 다.페이지 가 전달 하 는 String 을 해당 하 는 포맷 데이터 로 변환 합 니 다.주: 개발 중 에 이런 방식 을 사용 하 는 것 을 강력 히 건의 합 니 다.
package com.gxzj.mobile.vo.json.productinfo;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;

import java.io.Serializable;
import java.util.Date;


/**
 * @author Liqingchao
 * @version $Rev$
 * @time 2018/4/11 0011 11:12
 * @desc                   String * @updateAuthor $Author$
 * @updateData $Date$
 * @updateDesc ${TODO}
 */
public class User implements Serializable {

    //    
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    //      
    @NumberFormat(style = NumberFormat.Style.NUMBER,pattern = "#,###")
    private int total;
    //     
    @NumberFormat(style = NumberFormat.Style.PERCENT)
    private double discount;
    //    
    @NumberFormat(style = NumberFormat.Style.CURRENCY)
    private double money;
}

2. 데이터 검사:
        입력 검 사 는 클 라 이언 트 검사 와 서버 검사 로 나 뉘 는데 클 라 이언 트 검 사 는 주로 정상 적 인 사용자 의 오 류 를 걸 러 내 고 보통 JS 를 통 해 이 루어 집 니 다.서버 검사 란 전체 응용 프로그램 이 불법 데 이 터 를 막 는 마지막 방어선 으로 주로 응용 프로그램 에서 프로 그래 밍 을 통 해 이 루어 진다.사용자 의 악성 행위 클 라 이언 트 검 사 는 어 쩔 수 없 을 것 입 니 다. 반드시 서버 검 사 를 통 해 클 라 이언 트 검 사 는 사용자 가 잘못 작 동 하 는 불법 입력 을 클 라 이언 트 에 막 고 서버 의 부하 압력 을 줄 일 수 있 습 니 다.따라서 클 라 이언 트 와 서버 가 동시에 검 사 를 해 야 합 니 다.
        SpringMVC 는 1. Spring 자체 의 Validation 검사 프레임 워 크 를 제공 합 니 다.2. JSR 303 검사.
      (1), Spring 자체 의 Validation 검사 프레임 워 크 는 하 드 코딩 으로 인해 실제 개발 에 있어 서 번 거 로 워 보이 기 때문에 현재 개발 은 JSR 303 을 사용 하 는 것 을 더욱 추천 합 니 다.
      (2) JSR 303 검사: 이런 방식 을 더욱 추천 합 니 다.
package com.gxzj.mobile.service.impl.biz.shopping;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.Range;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;

/**
 * @author Liqingchao
 * @version $Rev$
 * @time 2018/4/11 0011 14:22
 * @desc   JSR303       
 * @updateAuthor $Author$
 * @updateData $Date$
 * @updateDesc ${TODO}
 */
public class User implements Serializable {

    @NotBlank(message = "       ")
    private String loginname;

    @NotBlank(message = "      ")
    @Length(min = 6,max = 8,message = "       6 8   ")
    private String password;

    @NotBlank(message = "       ")
    private String username;

    @Range(min = 15,max = 60,message = "     15 60   ")
    private int age;

    @Email(message = "          ")
    private String email;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Past(message = "            ")
    private Date birthday;

    @Pattern(regexp = "[1][3,8][3,6,9][0-9]{8}",message = "       ")
    private String phone;
}

3. 파일 업로드 와 다운로드
        1. 파일 업로드: 이미지 업로드: MultipartFile file 클래스.Springmvc 핵심 프로필 에서 업로드 그림 의 크기 를 제한 할 수 있 습 니 다.
        2. 파일 다운로드: 브 라 우 저 에 게 attachment (다운로드 방식) 으로 그림 을 열 라 고 알 립 니 다.
4. 차단기 (사용자 권한 인증 진행)
public class Interceptor1 implements HandlerInterceptor {    //실행 시기: controller 가 실행 되 었 습 니 다. modelAndview 가 되 돌 아 왔 습 니 다.    //사용 장면: 조작 로 그 를 기록 하고 로그 인 사용자 의 ip, 시간 등 을 기록 합 니 다.    @Override    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)            throws Exception {        System.out.println("======Interceptor1=======afterCompletion========");    }    //실행 시기: Controller 방법 이 실행 되 었 습 니 다. ModelAndView 가 되 돌아 오지 않 았 습 니 다.    //장면 사용: 이 방법 에서 전역 데이터 처리 업 무 를 설정 할 수 있 습 니 다.    @Override    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)            throws Exception {        System.out.println("======Interceptor1=======postHandle========");    }    //불 값 되 돌리 기: true 를 되 돌려 놓 으 면 false 로 돌아 가면 차단 되 어 있 습 니 다.    //실행 시기: controller 방법 이 실행 되 지 않 았 고 Model AndView 가 되 돌아 오지 않 았 습 니 다.    //필드 사용: 권한 검증    @Override    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {        System.out.println("======Interceptor1=======preHandle========");        return true;    }
}
로그 인 권한 인증:
public class LoginInterceptor implements HandlerInterceptor {    @Override    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)            throws Exception {        // TODO Auto-generated method stub    }    @Override    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)            throws Exception {        // TODO Auto-generated method stub    }    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {        //현재 접근 경로 가 로그 인 경로 인지 여 부 를 판단 합 니 다.        if(request.getRequestURI().indexOf("/login") > 0){            return true;        }        //session 에 로그 인 정보 가 있 는 지 판단 하고 없 으 면 로그 인 페이지 로 이동 하고 있 으 면 놓 습 니 다.        HttpSession session = request.getSession();        if(session.getAttribute("username") != null){            return true;        }          request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);        return false;    }
}
Springmvc 핵심 프로필 에 차단 기 를 설정 합 니 다:
                                                                                                                                                
전역 이상 프로세서
/ / 전역 이상 처리 public class 사용자 정의 CustomGlobalExceptionResolver 구현 HandlerExceptionResolver {    @Override    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response,             Object arg2, Exception exc) {        //이상 정보 저장        String msg = "";                //판단 이상 유형        if(exc instanceof CustomException){            //처리 업무 수준 이상            msg = ((CustomException)exc).getMessage();        } else {            //실행 중 이상 처리            msg = "시스템 이상, 친, 미안합니다. 관리자 에 게 즉시 연락 하 세 요!"        }                ModelAndView modelAndView = new ModelAndView();        modelAndView.addObject("msg", msg);        modelAndView.setViewName("error");        return modelAndView;    }}
Springmvc 핵심 프로필 에 전역 이상 처리 기 설정
 
6. POST 요청 오류 해결:
        웹. xml 파일 에 다음 과 같이 설정 합 니 다.
          CharacterEncodingFilter        org.springframework.web.filter.CharacterEncodingFilter                    encoding            utf-8                        CharacterEncodingFilter        /*

좋은 웹페이지 즐겨찾기