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 |
댓글