728x90

pom.xml 추가

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

Data

package kr.bit.beans;

public class Data {

    private String num1;
    private int num2;
    private double num3;
    private boolean num4;

    public Data(String num1, int num2, double num3, boolean num4) {
        this.num1 = num1;
        this.num2 = num2;
        this.num3 = num3;
        this.num4 = num4;
    }

    public String getNum1() {
        return num1;
    }

    public void setNum1(String num1) {
        this.num1 = num1;
    }

    public int getNum2() {
        return num2;
    }

    public void setNum2(int num2) {
        this.num2 = num2;
    }

    public double getNum3() {
        return num3;
    }

    public void setNum3(double num3) {
        this.num3 = num3;
    }

    public boolean isNum4() {
        return num4;
    }

    public void setNum4(boolean num4) {
        this.num4 = num4;
    }
}

 

 

index

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <a href="t1">test1</a>
    <a href="t2">test2</a>
</body>
</html>

test1

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>

</body>
</html>

RestController ( @RestController 를 하려면 클래스 명이랑 같으면 안된다.. 충돌남..)

package kr.bit.controller;


import kr.bit.beans.Data;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;

@RestController
public class RestTestController {

    @GetMapping("/t2")
    public ResponseEntity<ArrayList<Data>> t2(){
        Data d1 = new Data("spring",100,1.1,false);
        Data d2 = new Data("spring",200,2.2,false);
        Data d3 = new Data("spring",300,3.3,false);

        ArrayList<Data> li = new ArrayList<>();
        li.add(d1);
        li.add(d2);
        li.add(d3);

        ResponseEntity<ArrayList<Data>> en = new ResponseEntity<ArrayList<Data>>(li, HttpStatus.OK);
        return en;
    }
}

 

test1

test2

클릭시 json 형태로 출력

 

728x90

'Frameworks > Spring' 카테고리의 다른 글

[Spring] Board CRUD (use Bootstrap)  (2) 2024.05.13
[Spring] MVC (MyBatis with XML)  (0) 2024.05.13
[Spring] MVC (DB Setting with MyBatis)  (2) 2024.05.12
[Spring] MVC (Interceptor)  (0) 2024.05.12
[Spring] Validator Customizing  (0) 2024.05.10
728x90

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>


<a href="input_test">input_test</a><br>
<a href="read_test">read_test</a>



</body>

</html>

ServeletAppContext.java

package kr.bit.config;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperFactoryBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import kr.bit.database.MapperInterface;


@Configuration
@EnableWebMvc
@ComponentScan("kr.bit.controller")
@PropertySource("/WEB-INF/properties/db.properties")

public class ServletAppContext implements WebMvcConfigurer{ //servlet-context.xml 과 역할이 같다.
	
	@Value("${db.classname}")
	private String db_classname;
	
	@Value("${db.url}")
	private String db_url;
	
	@Value("${db.username}")
	private String db_username;
	
	@Value("${db.password}")
	private String db_password;
	
	
	
	
	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		WebMvcConfigurer.super.configureViewResolvers(registry);
		registry.jsp("/WEB-INF/views/", ".jsp");
	}

	
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		WebMvcConfigurer.super.addResourceHandlers(registry);
		registry.addResourceHandler("/**").addResourceLocations("/resources/");
	}
	
	//mybatis setting
	
	@Bean
	public BasicDataSource dataSource() {
		BasicDataSource source = new BasicDataSource();
		source.setDriverClassName(db_classname);
		 //주소를 직접 치지않고, 위에서 주입받은 값 그대로!
		source.setUrl(db_url);
		source.setUsername(db_username);
		source.setPassword(db_password);
		
		return source;
	}
	
	@Bean
	public SqlSessionFactory factory(BasicDataSource source) throws Exception {
		SqlSessionFactoryBean fac = new SqlSessionFactoryBean();
		fac.setDataSource(source);
		SqlSessionFactory factory = fac.getObject();
		
		return factory;
	}
	
	@Bean
	public MapperFactoryBean<MapperInterface> test_mapper(SqlSessionFactory factory) throws Exception {
		
		MapperFactoryBean<MapperInterface> fac =
				new MapperFactoryBean<MapperInterface>(MapperInterface.class);
		
		fac.setSqlSessionFactory(factory);
		return fac;
		
		
	}
	
/*	//Properties파일을 jsp화면에 가져가기 위해 등록해야함
	@Bean(name = "messageSource")
	public ReloadableResourceBundleMessageSource source() {
		ReloadableResourceBundleMessageSource res =
				new ReloadableResourceBundleMessageSource();
		
		//res.setBasename(null);
		res.setBasename("/WEB-INF/properties/error");
		
		return res;*/
	}

 

Controller

package kr.bit.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import kr.bit.beans.Data;
import kr.bit.database.MapperInterface;


@Controller  //bean으로 등록.
public class SpringController {
	
	@Autowired
	MapperInterface mapper;
	
	
  @GetMapping("/input_test")
  public String input_test(Data data) {
	  return "input_test";

  }
  @PostMapping("/input_proc")
  public String input_proc(Data data) {
	  mapper.insert_data(data); //db에 저장 num1,num2,num3
	  return "input_proc";
 
  }
  
  @GetMapping("/read_test")
  public String read_test(Model model) {
	  List<Data> li = mapper.select_data();
	  model.addAttribute("li", li);
	  return "read_test";

  
}
}

 

input_test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

   <form action = "input_proc" method = "post">
   <!-- num 1,2,3에 입력한 값을 Data클래스 필드에 넣기 -->
   num1 : <input type="text" name="num1"><br> 
   num2 : <input type="text" name="num2"><br>
   num3 : <input type="text" name="num3"><br>
   
   <button type = "submit">check</button>
   
   </form>
</body>
</html>

 

input_proc.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

저장끝

</body>
</html>

 

MySql DB

DB에 저장 완료!

 

 

 

완료된것들을 read_test를 통해서 출력해보면

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<c:forEach var="obj" items="${li}">
       ${obj.num1}
       ${obj.num2}
       ${obj.num3}<br>
 </c:forEach>


<%-- ${li.get(0).num1}<br>
${li.get(0).num2}<br>
${li.get(0).num3}
 --%>
 
</body>
</html>

 

 

728x90

'Frameworks > Spring' 카테고리의 다른 글

[Spring] MVC (MyBatis with XML)  (0) 2024.05.13
[Spring] MVC (Restcontroller)  (2) 2024.05.13
[Spring] MVC (Interceptor)  (0) 2024.05.12
[Spring] Validator Customizing  (0) 2024.05.10
[Spring] Type of JSR Annotations  (0) 2024.05.10
728x90

Interceptor

인터셉터는 클라이언트로부터 서버로 들어온 요청(request) 객체를 컨트롤러(controller)의 핸들러(handler)로 도달하기 전에 가로채는 기능을 수행한다.

이를 통해 원하는 추가 작업이나 로직을 수행한 후 핸들러로 요청을 보낼 수 있도록 해주는 모듈이다.

일반적으로 핸들러(주로 @Controller로 표시됨)가 실행되기 전에 인터셉터가 먼저 실행되고 인터셉터를 통해 요청에 대해 원하는 작업이나 로직을 수행한 후 컨트롤러로 요청 객체를 전달한다.

 

인터셉터는 로그인, 권한 체크, 헤더나 로그인 세션 검증, API 토큰 검증 등의 작업에 사용된다.

cf) 로그인을 한 사용자가 아닌 상태에서 '개인정보페이지'를 요청하면 개인정보 페이지 대신 로그인 페이지 등으로 이동하도록 처리할 수 있다.

 

Intercpetor 1~8 

(내용이 중복되므로 2~8 생략)

서버 실행시 콘솔에 나타나는 log
test1 을 눌렀을때 나타나는 log

package kr.bit.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class Inter1 implements HandlerInterceptor{
    //요청 발생 시 호출되는 메서드 코드가 중복되는 부분이 있을 때 인터셉터를 통해 처리한다
    //로그인여부 확인, 등급별 서비스 권한, 관리자/회원 작업처리에서 많이 사용

    //controller 메서드가 호출되기 전에 호출됨
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

        System.out.println("pre-inter1");
        return true;
    }

    //controller 메서드가 호출된 이후에 호출됨(view처리 수행 전에 호출됨)
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {

        System.out.println("post-inter1");
    }
    //view처리 끝나고 응답결과가 브라우저로 전달되기 전에 호출됨
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                                Exception ex) throws Exception {

        System.out.println("afterCompletion-inter1");
    }
}

 

ServletAppContext

package kr.bit.config;

import kr.bit.interceptor.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.config.annotation.*;

@Configuration
@EnableWebMvc
@ComponentScan("kr.bit.controller")
public class ServletAppContext implements WebMvcConfigurer {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
       WebMvcConfigurer.super.configureViewResolvers(registry);
       registry.jsp("/WEB-INF/views/", ".jsp");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
       WebMvcConfigurer.super.addResourceHandlers(registry);
       registry.addResourceHandler("/**").addResourceLocations("/resources/");
    }

    @Bean(name = "messageSource")
    public ReloadableResourceBundleMessageSource messageSource() {
       ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource();
       res.setBasename("/WEB-INF/properties/error");
       return res;
    }

    //인터셉터 등록- 경로와 인터셉터를 설정하기 위해
    public void addInterceptors(InterceptorRegistry reg) {

       WebMvcConfigurer.super.addInterceptors(reg);

       Inter1 i1=new Inter1();
       Inter2 i2=new Inter2();
       Inter3 i3=new Inter3();
       Inter4 i4=new Inter4();
       Inter5 i5=new Inter5();
       Inter6 i6=new Inter6();
       Inter7 i7=new Inter7();
       Inter8 i8=new Inter8();


       InterceptorRegistration r1= reg.addInterceptor(i1);
       InterceptorRegistration r2= reg.addInterceptor(i2);
       InterceptorRegistration r3= reg.addInterceptor(i3);
       InterceptorRegistration r4= reg.addInterceptor(i4);
       InterceptorRegistration r5= reg.addInterceptor(i5);
       InterceptorRegistration r6= reg.addInterceptor(i6);
       InterceptorRegistration r7= reg.addInterceptor(i7);
       InterceptorRegistration r8= reg.addInterceptor(i8);


       r1.addPathPatterns("/t1");//interceptor가 가로채 갈 주소를 등록
       r2.addPathPatterns("/t1");
       r3.addPathPatterns("/t2");
       r4.addPathPatterns("/t1","/t2");

       r5.addPathPatterns("/s1/t3", "/s1/t4");

       r6.addPathPatterns("/*"); //t1,/t2
       r7.addPathPatterns("/s1/*"); //s1을 시작되어지는 하나의 경로 /s1/t3, /s1/t4
       r8.addPathPatterns("/**"); // /s1/t3, /s1/t4
       r8.excludePathPatterns("/*");//interceptor가 가로채가지 않을 주소를 등록 (/t1,/t2)


    }

}

test2를 눌렀을 떄 출력되는 log


test3을 눌렀을 때 출력되는 log


test4 를 눌렀을때 출력되는 log

728x90
728x90

test1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<body>
<form:form modelAttribute="data" method="post" action="test_proc"> <!-- 앞글자는 소문자 -->

    num1 : <form:input path="num1" type="text"/><br>
    <form:errors path="num1"/><br>

    num2 : <form:input path="num2" type="text"/><br>
    <form:errors path="num2"/><br>

    num3 : <form:input path="num3" type="text"/><br>
    <form:errors path="num3"/><br>

<form:button type="submit">Check</form:button>

</form:form>
</body>
</html>

Data

package kr.bit.beans;

import javax.validation.constraints.*;

public class Data {

    @Size(min=4, max=10)
    private String num1;

    private String num2;
    private String num3;

    public String getNum1() {
        return num1;
    }

    public void setNum1(String num1) {
        this.num1 = num1;
    }

    public String getNum2() {
        return num2;
    }

    public void setNum2(String num2) {
        this.num2 = num2;
    }

    public String getNum3() {
        return num3;
    }

    public void setNum3(String num3) {
        this.num3 = num3;
    }
}

1. DataValidator

package kr.bit.validator;

import kr.bit.beans.Data;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
//1. Validator 인터페이스 구현


public class DataValidator implements Validator {
    //<validator 커스터마이징>
    //1. Validator 인터페이스 구현
    //2. 컨트롤러에 인터페이스 등록

    @Override
    public boolean supports(Class<?> clazz) {
        //유효성 검사할 데이터를 가지고 있는 객체가 유효성 검사가 가능한지 확인
        return Data.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        //유효성 검사하는 메소드
        ValidationUtils.rejectIfEmpty(errors, "num2", "error2");
        // num2가 empty면 에러 이름은 error2로 설정함
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "num3", "error3");

        Data d=(Data)target;

        String str1=d.getNum2();
        String str2=d.getNum3();

        if(str1.length()>5) {
            errors.rejectValue("num2", "error4"); // num2길이가 5자리 넘어가면 error4라는 이름으로 error 정의함
        }
        if(str2.contains("-")==false) {
            errors.rejectValue("num3","error5");
        }
    }
}

2. Controller

package kr.bit.controller;

import kr.bit.beans.Data;
import kr.bit.validator.DataValidator;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PostMapping;
import javax.validation.Valid;


@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1(Data data) {
        return "test1";
    }

    @PostMapping("/test_proc") // 입력한 값 유효성 검사 - > 유효성 검사에 대한 결과값
    public String test_proc(@Valid Data data, BindingResult result){

        if(result.hasErrors()) {
            return "test1";
        }
        return "test2";
    }
    @InitBinder
    public void initBinder(WebDataBinder binder) { //    //2. 컨트롤러에 인터페이스 등록
        DataValidator validator = new DataValidator();

//        binder.setValidator(validator); 단수인 경우
        binder.addValidators(validator); // 복수인 경우
    }
}

error.properties

Size.data.num1=Must be 4 to 10 characters long
error2.data.num2=Must be greater than 0 in length
error4.data.num2=Should not exceed 5 characters in length
error3.data.num3=Should be greater than 0 after removing spaces
error5.data.num3=num3 must include a "-" symbol
728x90
728x90

JSR-303

Data

package kr.bit.beans;

import javax.validation.constraints.*;

public class Data {

    @AssertTrue // True가 아닌 값이 들어오면 오류
    private boolean num1;

    @AssertFalse // False가 아닌 값이 들어오면 오류
    private boolean num2;

    @Max(200)
    @Min(20)
    private String num3;

    @Null // 값이 들어오면 오류
    private String num4;

    @NotNull // 값이 들어오지 않으면 오류
    private String num5;

    @Digits(integer =3, fraction = 2) // 정수, 실수
    private String num6;

    @Size(min=2, max=10) // 지정된 글자수보다 짧거나 길면 오류
    private String num7;

    @Pattern(regexp = "[a-zA-Z]*") // 주어진 정규식에 위배되면 오류
    private String num8;

    public Data() {
        this.num1=true;
        this.num2=false;
        this.num3="10";
        this.num4=null;
        this.num5="spring";
        this.num6="222.22";
        this.num7="java";
    }

    public boolean isNum1() {
        return num1;
    }

    public void setNum1(boolean num1) {
        this.num1 = num1;
    }

    public boolean isNum2() {
        return num2;
    }

    public void setNum2(boolean num2) {
        this.num2 = num2;
    }

    public String getNum3() {
        return num3;
    }

    public void setNum3(String num3) {
        this.num3 = num3;
    }

    public String getNum4() {
        return num4;
    }

    public void setNum4(String num4) {
        this.num4 = num4;
    }

    public String getNum5() {
        return num5;
    }

    public void setNum5(String num5) {
        this.num5 = num5;
    }

    public String getNum6() {
        return num6;
    }

    public void setNum6(String num6) {
        this.num6 = num6;
    }

    public String getNum7() {
        return num7;
    }

    public void setNum7(String num7) {
        this.num7 = num7;
    }

    public String getNum8() {
        return num8;
    }

    public void setNum8(String num8) {
        this.num8 = num8;
    }
}

Controller

package kr.bit.controller;

import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.validation.Valid;


@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1(Data data) {
        return "test1";
    }

    @PostMapping("/test_proc") // 입력한 값 유효성 검사 - > 유효성 검사에 대한 결과값
    public String test_proc(@Valid Data data, BindingResult result){

        if(result.hasErrors()) {
            return "test1";
        }
        return "test2";
    }
}

test1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<body>
<form:form modelAttribute="data" method="post" action="test_proc"> <!-- 앞글자는 소문자 -->

    num1 : <form:radiobutton path="num1" value="true"/>true
    <form:radiobutton path="num1" value="false"/>false<br>
    <form:errors path="num1"/><br> <!-- default error message 출력됨 -->

    num2 : <form:radiobutton path="num2" value="true"/>true
    <form:radiobutton path="num2" value="false"/>false<br>
    <form:errors path="num2"/><br>

    num3 : <form:input path="num3" type="text"/><br>
    <form:errors path="num3"/><br>

    num4 : <form:checkbox path="num4" value="check1"/>check1<br>
    <form:errors path="num4"/><br>

    num5 : <form:checkbox path="num5" value="check2"/>check2<br>
    <form:errors path="num5"/><br>

    num6 : <form:input path="num6" type="text"/><br>
    <form:errors path="num6"/><br>

    num7 : <form:input path="num7" type="text"/><br>
    <form:errors path="num7"/><br>

    num8 : <form:input path="num8" type="text"/><br>
    <form:errors path="num8"/><br>

    <form:button type="submit">체크</form:button>

</form:form>
</body>
</html>

test2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
Success!
</body>
</html>

error.properties

AssertTrue.data.num1 = num1 is not true
AssertFalse.data.num2 = num2 is not false
Max.data.num3 = num3 must be 200 or equal to 200
Min.data.num3 = num3 have to be at least 20
Null.data.num4 = num4 does not have to insert a value
NotNull.data.num5 = num5 has to insert a value
Digits.data.num6 = num6 is an integer with 3 digits and 2 fractions
Size.data.num7 = num7 can use StringSize from 2 to 10
Pattern.data.num8 = regexp is an illegal pattern

 

 

 

 


JSR-380

 

 

Data

package kr.bit.beans;

import javax.validation.constraints.*;

public class Data {

    @NotEmpty // 값이 길이가 0이면 에러발생(공백도 글자로 인식)
    private String num1;

    @NotBlank // 공백제거하고 길이가 0이면 에러발생
    private String num2;

    @Positive // 양수가 아니면 에러
    private int num3;

    @PositiveOrZero
    private int num4;

    @Negative // 음수가 아니면 에러
    private int num5;

    @Email // @기호가 있어야함 (이메일형식)
    private String num6;

    public Data() {

        this.num1 = "레알마드리드";
        this.num2 = "도르트문트";
        this.num3 = 7;
        this.num4 = 10;
        this.num5 = -3;
    }

    public String getNum1() {
        return num1;
    }

    public void setNum1(String num1) {
        this.num1 = num1;
    }

    public String getNum2() {
        return num2;
    }

    public void setNum2(String num2) {
        this.num2 = num2;
    }

    public int getNum3() {
        return num3;
    }

    public void setNum3(int num3) {
        this.num3 = num3;
    }

    public int getNum4() {
        return num4;
    }

    public void setNum4(int num4) {
        this.num4 = num4;
    }

    public int getNum5() {
        return num5;
    }

    public void setNum5(int num5) {
        this.num5 = num5;
    }

    public String getNum6() {
        return num6;
    }

    public void setNum6(String num6) {
        this.num6 = num6;
    }
}

Controller

package kr.bit.controller;

import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.validation.Valid;


@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1(Data data) {
        return "test1";
    }

    @PostMapping("/test_proc") // 입력한 값 유효성 검사 - > 유효성 검사에 대한 결과값
    public String test_proc(@Valid Data data, BindingResult result){

        if(result.hasErrors()) {
            return "test1";
        }
        return "test2";
    }
}

test1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<body>
<form:form modelAttribute="data" method="post" action="test_proc"> <!-- 앞글자는 소문자 -->

    num1 : <form:input path="num1" type="text"/>
    <form:errors path="num1"/><br>

    num2 : <form:input path="num2" type="text"/>
    <form:errors path="num2"/><br>

    num3 : <form:input path="num3" type="text"/>
    <form:errors path="num3"/><br>

    num4 : <form:input path="num4" type="text"/>
    <form:errors path="num4"/><br>

    num5 : <form:input path="num5" type="text"/>
    <form:errors path="num5"/><br>

    num6 : <form:input path="num6" type="text"/>
    <form:errors path="num6"/><br>

<form:button type="submit">Check</form:button>

</form:form>
</body>
</html>

error.properties

NotEmpty.data.num1 = Length must be greater than 0
NotBlank.data.num2 = Length must be greater than 0 after trimming blanks
Positive.data.num3 = Must be a positive number
PositiveOrZero.data.num4 = Must be 0 or a positive number
Negative.data.num5 = Must be a negative number
Email.data.num6 = Must be in email format

 


 

728x90
728x90

index

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <a href='t1'>test1</a>
</body>
</html>

controller

package kr.bit.controller;

import kr.bit.beans.Data;
import kr.bit.beans.Data2;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.ArrayList;

@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1(Data data, Model model) {
       data.setS1("d2");
       data.setS2("d2");
       data.setS3("d2");
       data.setS4("d2");

       String [] str = {"d1", "d3"};
       data.setS5(str);
       data.setS6(str);
       data.setS7(str);
       data.setS8(str);

       data.setS9("d2");
       data.setS10("d2");
       data.setS11("d2");
       data.setS12("d2");
       //////////////////////////////  ↑↑↑ 배열에 담음 ////////////////////////
       String str2[]={"d1","d2","d3"};
       model.addAttribute("li1",str2); //문자 배열을 li1이라는 문자열에 담음

       ArrayList<String> li2 = new ArrayList<String>();
       li2.add("d1");
       li2.add("d2");
       li2.add("d3");
       model.addAttribute("li2",li2);

       Data2 b1 = new Data2();
       Data2 b2 = new Data2();
       Data2 b3 = new Data2();

       b1.setS1("one");
       b1.setS2("d1");

       b2.setS1("two");
       b2.setS2("d2");

       b3.setS1("three");
       b3.setS2("d3");

       ArrayList<Data2> li3= new ArrayList<Data2>();
       li3.add(b1);
       li3.add(b2);
       li3.add(b3);

       model.addAttribute("li3",li3);
/////////////////////////// ↑↑↑ ArrayList에 담음 ////////////////////////////////
       return "test1";
    }


}

test1

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<body>
<form:form modelAttribute="data">
    <form:select path="s1">
        <form:option value="d1">one</form:option>
        <form:option value="d2">two</form:option>
        <form:option value="d3">three</form:option>
    </form:select>

    <form:select path="s2">
            <form:options items="${requestScope.li1}"/>
    </form:select>

    <form:select path="s3">
        <form:options items="${requestScope.li2}"/>
    </form:select>

    <form:select path="s4">
        <form:options items="${requestScope.li3}" itemLabel="s1" itemValue="s2"/>
    </form:select>

    <!-- --------------------------------------------------------------- -->
    <form:checkbox path="s5" value="d1"/>one
    <form:checkbox path="s5" value="d2"/>two
    <form:checkbox path="s5" value="d3"/>three<br>

    <form:checkboxes items="${requestScope.li1}" path="s6"/><br>
    <form:checkboxes items="${requestScope.li2}" path="s7"/><br>
    <form:checkboxes items="${requestScope.li3}" path="s8" itemLabel="s1" itemValue="s2"/><br>

    <form:radiobutton path="s9" value="d1"/>one
    <form:radiobutton path="s9" value="d2"/>two
    <form:radiobutton path="s9" value="d3"/>three<br>

    <form:radiobuttons items="${requestScope.li1}" path="s10"/><br>
    <form:radiobuttons items="${requestScope.li2}" path="s11"/><br>
    <form:radiobuttons items="${requestScope.li3}" path="s12" itemLabel="s1" itemValue="s2"/><br>

</form:form>
</body>
</html>

 

728x90

+ Recent posts