본문 바로가기
SPRING

[SPRING]09/06

by KhyeonS 2022. 9. 6.

log4.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>
	
	<!-- Application Loggers -->
	<logger name="test2.kahn.edu">
		<level value="info" />
	</logger>
	
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.beans">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.context">
		<level value="info" />
	</logger>

	<logger name="org.springframework.web">
		<level value="info" />
	</logger>

	<!-- Root Logger -->
	<root>
		<priority value="warn" />
		<appender-ref ref="console" />
	</root>
	
</log4j:configuration>

homeController.xml 수정

package test2.kahn.edu1;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	public static final String VIEW_PATH="/WEB_INF/views/";
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return VIEW_PATH+"home.jsp";
	}
	
}

servletcontext.xml 수정

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/resources/**" location="/resources/" />

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<!--  
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean> -->
	
	<context:component-scan base-package="test2.kahn.edu1" />
	
	
	
</beans:beans>

views 폴더에 test 폴더 만들고 test.jsp  생성

<%@ 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>
	 <p> Test 페이지로 접근합니다</p>
	 <p>나라별 인사말</p>  // 추가!!!	
	<ul>
		<c:forEach var="m" items="${ msg }">
		  <li>${ m }</li>
		</c:forEach>			
	</ul>
	 
</body>
</html>

TestController.java 수정

package test2.kahn.edu1;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {
	// 실행 경로를 참조할 상수를 지정
	public static final String VIEW_PATH = "/WEB-INF/views/test/";
	public  TestController() {
		// Model 인터페이스는 Servlet과 Controller의 중간 매개체 역할을 한
		System.out.println("--TestController 생성자호출");

	}
	@RequestMapping("/test.do")
	public String test(Model model){
		// 나라별 인사말 배열
		String[] msg = {   "안녕하세요", 
							"hello", 
							"ありがとう", 
							"你好" };
		model.addAttribute("msg", msg); // model을 통해 배열을 바인딩 한다.
		return VIEW_PATH + "test.jsp"; // WEB-INF/views/test.jsp에 포워딩

	}

}

뒤에 test.do 를 추가해주면 이렇게 뜬다!!


사용자의 ip주소 가져오기

TestController.java 수정

package test2.kahn.edu1;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {
	// 실행 경로를 참조할 상수를 지정
	public static final String VIEW_PATH = "/WEB-INF/views/test/";
	public  TestController() {
		// Model 인터페이스는 Servlet과 Controller의 중간 매개체 역할을 한
		System.out.println("--TestController 생성자호출");

	}
	@RequestMapping("/test.do")
	public String test(Model model, HttpServletRequest request){
		// 나라별 인사말 배열
		String[] msg = {   "안녕하세요", 
							"hello", 
							"ありがとう", 
							"你好" };
		String ip =request.getRemoteAddr();
		model.addAttribute("msg", msg); // model을 통해 배열을 바인딩 한다.
		request.setAttribute("ip", ip);
		return VIEW_PATH + "test.jsp"; // WEB-INF/views/test.jsp에 포워딩

	}
	
	

}

test.jsp 수정

<%@ 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>
	 <p> Test 페이지로 접근합니다</p>
	 <p>[${ip}]님이 요청한 나라별 인사말</p>  
	<ul>
		<c:forEach var="m" items="${ msg }">
		  <li>${ m }</li>
		</c:forEach>			
	</ul>
	 
</body>
</html>

 


사용자의 ip주소 가져오기

TestController 수정 

package test2.kahn.edu1;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class TestController {
	// 실행 경로를 참조할 상수를 지정
	public static final String VIEW_PATH = "/WEB-INF/views/test/";
	public  TestController() {
		// Model 인터페이스는 Servlet과 Controller의 중간 매개체 역할을 한
		System.out.println("--TestController 생성자호출");

	}
	@RequestMapping("/test.do")
	public String test(Model model, HttpServletRequest request){
		// 나라별 인사말 배열
		String[] msg = {   "안녕하세요", 
							"hello", 
							"ありがとう", 
							"你好" };
		String ip =request.getRemoteAddr();
		model.addAttribute("msg", msg); // model을 통해 배열을 바인딩 한다.
		request.setAttribute("ip", ip);
		return VIEW_PATH + "test.jsp"; // WEB-INF/views/test.jsp에 포워딩

	}
	@RequestMapping("/test2.do")
	public ModelAndView test2(HttpServletRequest request) {
		ModelAndView mv = new ModelAndView();
		String ip =request.getRemoteAddr();
		// 나라별 인사말 배열을 ModelAndView 형태로 전달해보자.
				String[] msg = { 
						"안녕하세요", 
						"hello", 
						"ありがとう", 
						"你好" };
				// mv에 데이터를 담는다.
				mv.addObject("msg", msg);
				mv.addObject("method", "test2() 메서드를 호출함");
				mv.addObject("ip", ip);
				// mv에 뷰 정보를 담는다.
				mv.setViewName(VIEW_PATH + "test2.jsp");
				return mv;

		
	}
	
	

}

test 폴더 안에 test2.jsp 생성

<%@ 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>
<p>test2 페이지로 접근합니다.</p>
	<p> ${ method } </p>
	<p>[ ${ ip } ]님이 요청한 나라별 인사말</p>
	<ul>
		<c:forEach var="m" items="${ msg }">
		<li>${ m }</li>
		</c:forEach>		
	</ul>

</body>
</html>

위에 localhost를 아이피 주소로 입력후 test2.do 접속

 


Parameter 처리 방법

Spring lagacy project  Spring_para 생성

 

test.kahn.edu3 아래 ParaController 클래스 생성

package test.kahn.edu3;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ParaController {
	public static final String VIEW_PATH = "/WEB-INF/views/person/";
	@RequestMapping("/insert_form.do")
	public String insert_form() {
		return VIEW_PATH + "insert_form.jsp";
	}

}

views 폴더 아래 person 폴더 생성 후 insert_form.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>
<script type="text/javascript">		
		function send1( f ) {
			var name = f.name.value;			
			var tel = f.tel.value;
			var age = f.age.value;
			var num_pattern = /^[0-9]{1,3}$/;
			if ( !num_pattern.test( age ) ) {
				alert("나이는 정수로 입력하세요");
				f.age.focus();
				return;
			}
			if ( age == '' ) {
				alert('나이를 입력하세요');
				f.age.focus();
				return;
			}
			if ( name == '' ) {
				alert('이름을 입력하세요');
				f.name.focus();
				return;
			}
			if ( tel == '' ) {
				alert('전화번호를 입력하세요');
				f.tel.focus();
				return;
			}
			f.action = "insert1.do";
			f.submit();
		} // send1()
		function send2( f ) {
			var name = f.name.value;			
			var tel = f.tel.value;
			var age = f.age.value;
			var num_pattern = /^[0-9]{1,3}$/;
			if ( !num_pattern.test( age ) ) {
				alert("나이는 정수로 입력하세요");
				f.age.focus();
				return;
			}
			if ( age == '' ) {
				alert('나이를 입력하세요');
				f.age.focus();
				return;
			}
			if ( name == '' ) {
				alert('이름을 입력하세요');
				f.name.focus();
				return;
			}
			if ( tel == '' ) {
				alert('전화번호를 입력하세요');
				f.tel.focus();
				return;
			}
			f.action = "insert2.do";
			f.submit();
		} // send2()
	</script>
</head>
<body>
<form>
		<table border="1" align="center">
			<caption>::::개인정보 입력::::</caption>			
			<tr>
				<th>이름</th>
				<td> <input name="name"> </td>
			</tr>
			<tr>
				<th>나이</th>
				<td> <input name="age"> </td>
			</tr>
			<tr>
				<th>전화</th>
				<td> <input name="tel"> </td>
			</tr>
			<tr>
				<td colspan="2" align="center">
					<input type="button" value="낱개로 받기" 
							onclick="send1(this.form);">
					<input type="button" value="객체로 받기" 
							onclick="send2(this.form);">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>


source/main/java 아래에 vo 패키지 만들고 PersonVO 클래스 생성

package vo;

public class PersonVO {
	private String name;
	private int age;
	private String tel;
	public PersonVO() {
		
	}
	public PersonVO(String name, int age, String tel) {
		this.name= name;
		this.age= age;
		this.tel= tel;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
}

ParaController 수정

package test.kahn.edu3;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import vo.PersonVO;

@Controller
public class ParaController {
	public static final String VIEW_PATH = "/WEB-INF/views/person/";
	@RequestMapping("/insert_form.do")
	public String insert_form() {
		return VIEW_PATH + "insert_form.jsp";
	}
	// 이제 send1()에 대한 처리
	// param/insert1.do?name=홍길동&age=20&tel=010-111-1111
	@RequestMapping( "/insert1.do" )
	public String insert1( Model model, 
			@RequestParam("name") String name1, 
			@RequestParam("age") int age,
			@RequestParam("tel") String tel ) {		
		// name1, age, tel이 파라미터로 자동으로 넘어온다 (심지어 int는 형변환도 해서 넘어온다 )!!!
		// 받은 값을 model을 통해 바인딩
		PersonVO vo = new PersonVO( name1, age, tel );
		model.addAttribute("vo", vo);
		// 입력된 결과를 insert_result.jsp로 포워딩!!
		return VIEW_PATH + "insert_result.jsp";
		// @RequestParam(“name”) String name1 형태는 잘 안쓴다. 
		} // insert1()

}

web.xml 수정

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<filter>
        <filter-name>encodingFilter</filter-name>      
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
	

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

</web-app>

person 폴더 안에 insert_result.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>
<p>이름 : ${ vo.name }</p>
	<p>나이 : ${ vo.age }</p>
	<p>전화 : ${ vo.tel }</p>
	<a href="insert_form.do">돌아가기</a>

</body>
</html>

낱개로 받기


객체로 받기 

ParaController 수정

package test.kahn.edu3;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import vo.PersonVO;

@Controller
public class ParaController {
	public static final String VIEW_PATH = "/WEB-INF/views/person/";
	@RequestMapping("/insert_form.do")
	public String insert_form() {
		return VIEW_PATH + "insert_form.jsp";
	}
	// 이제 send1()에 대한 처리
	// param/insert1.do?name=홍길동&age=20&tel=010-111-1111
	@RequestMapping( "/insert1.do" )
	public String insert1( Model model, 
			@RequestParam("name") String name1, 
			@RequestParam("age") int age,
			@RequestParam("tel") String tel ) {		
		// name1, age, tel이 파라미터로 자동으로 넘어온다 (심지어 int는 형변환도 해서 넘어온다 )!!!
		// 받은 값을 model을 통해 바인딩
		PersonVO vo = new PersonVO( name1, age, tel );
		model.addAttribute("vo", vo);
		// 입력된 결과를 insert_result.jsp로 포워딩!!
		return VIEW_PATH + "insert_result.jsp";
		// @RequestParam(“name”) String name1 형태는 잘 안쓴다. 
		} // insert1()
	
	@RequestMapping("/insert2.do")
	public String insert2( Model model, PersonVO vo ) {
	// 파라미터로 넘어온 값을 vo에 속성이 일치하는 변수에 자동으로 추가해줌.
	// 바인딩
		model.addAttribute("vo", vo);
		return VIEW_PATH + "insert_result.jsp"; // 결과 포워딩
	// public String insert2( Model model, PersonVO vo, String name ) {  }식으로       // vo에 이미 있는 변수를 파라미터로 또 받으면 실행할 때 오류난다. 주의하자.
	} //insert2()

}


 

'SPRING' 카테고리의 다른 글

[SPRING] 09/13 글쓰기 기능, 수정 추가  (0) 2022.09.13
[SPRING] 09/08  (0) 2022.09.08
[SPRING] 09/07  (0) 2022.09.07
[Spring]09/02  (1) 2022.09.02
[SPRING] 09/01  (0) 2022.09.01

댓글