58. Spring MVC

hanahana·2022년 9월 5일
0

Spring 학원수강

목록 보기
4/45
post-thumbnail
  1. Spring MVC 프로젝트 생성
  2. pom.xml에 ojdbc6, mybatis, mybatis-spring, spring-jdbc, common-dbcp 추가
  3. ojdbc6할때에 repositories - repository 추가 후 dependency 작성

만들기전에 해야할것!

  1. 스프링 프로젝트 만들기

  2. MVC패턴으로 패키지 생성하기

  3. pom.XML에 ojdbc6, mybatis, mybatis-spring, spring-jdbc, common-dbcp 추가 추가하기

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.kh</groupId>
    	<artifactId>junspring</artifactId>
    	<name>04_springMVC</name>
    	<packaging>war</packaging>
    	<version>1.0.0-BUILD-SNAPSHOT</version>
    	<properties>
    		<java-version>1.8</java-version>
    		<org.springframework-version>5.2.18.RELEASE</org.springframework-version>
    		<org.aspectj-version>1.6.10</org.aspectj-version>
    		<org.slf4j-version>1.6.6</org.slf4j-version>
    	</properties>
    	<repositories>
    		<repository>
    			<id>oracle</id>
    			<url>http://www.datanucleus.org/downloads/maven2/</url>
    		</repository>
    	</repositories>
    	<dependencies>
    
    		<!-- Test -->
    
    		<!-- 마이바티스를 이용하기위한 자바파일 -->
    		<!-- 1.ojdbc63.jar, 2.mybatis, 3.spring-mybatis, 4.spring-jdbc, 5. common-dbcp -->
    
    		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    
    		<!-- 커넥션 풀 기능을 사용하기 위한 라이브러리 -->
    		<!-- 데이터베이스 커넥션 풀이란? (DBCP) DB연결이 필요할 때마다 생성하여 접속하는것이 아니라 Connection Pool에 
    			연결을 생성하여 놓고 재사용하는 방식 -->
    
    		<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6 -->
    		
    		<dependency>
    			<groupId>oracle</groupId>
    			<artifactId>ojdbc6</artifactId>
    			<version>11.2.0.3</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis</artifactId>
    			<version>3.5.6</version>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis-spring</artifactId>
    			<version>1.3.2</version>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>5.3.18</version>
    		</dependency>
    		
    		<!-- spring jdbc -->
    			<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>
    		
    
    		<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
    		<dependency>
    			<groupId>commons-dbcp</groupId>
    			<artifactId>commons-dbcp</artifactId>
    			<version>1.4</version>
    		</dependency>
    
    		<dependency>
    			<!-- spring -->
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.7</version>
    			<scope>test</scope>
    		</dependency>
    
    		<!-- Spring -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    			<version>${org.springframework-version}</version>
    			<exclusions>
    				<!-- Exclude Commons Logging in favor of SLF4j -->
    				<exclusion>
    					<groupId>commons-logging</groupId>
    					<artifactId>commons-logging</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>
    
    		<!-- AspectJ -->
    		<dependency>
    			<groupId>org.aspectj</groupId>
    			<artifactId>aspectjrt</artifactId>
    			<version>${org.aspectj-version}</version>
    		</dependency>
    
    		<!-- Logging -->
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-api</artifactId>
    			<version>${org.slf4j-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>jcl-over-slf4j</artifactId>
    			<version>${org.slf4j-version}</version>
    			<scope>runtime</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-log4j12</artifactId>
    			<version>${org.slf4j-version}</version>
    			<scope>runtime</scope>
    		</dependency>
    		<dependency>
    			<groupId>log4j</groupId>
    			<artifactId>log4j</artifactId>
    			<version>1.2.15</version>
    			<exclusions>
    				<exclusion>
    					<groupId>javax.mail</groupId>
    					<artifactId>mail</artifactId>
    				</exclusion>
    				<exclusion>
    					<groupId>javax.jms</groupId>
    					<artifactId>jms</artifactId>
    				</exclusion>
    				<exclusion>
    					<groupId>com.sun.jdmk</groupId>
    					<artifactId>jmxtools</artifactId>
    				</exclusion>
    				<exclusion>
    					<groupId>com.sun.jmx</groupId>
    					<artifactId>jmxri</artifactId>
    				</exclusion>
    			</exclusions>
    			<scope>runtime</scope>
    		</dependency>
    
    		<!-- @Inject -->
    		<dependency>
    			<groupId>javax.inject</groupId>
    			<artifactId>javax.inject</artifactId>
    			<version>1</version>
    		</dependency>
    
    		<!-- Servlet -->
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>servlet-api</artifactId>
    			<version>2.5</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet.jsp</groupId>
    			<artifactId>jsp-api</artifactId>
    			<version>2.1</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>jstl</artifactId>
    			<version>1.2</version>
    		</dependency>
    
    	</dependencies>
    	<build>
    		<plugins>
    			<plugin>
    				<artifactId>maven-eclipse-plugin</artifactId>
    				<version>2.9</version>
    				<configuration>
    					<additionalProjectnatures>
    						<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
    					</additionalProjectnatures>
    					<additionalBuildcommands>
    						<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
    					</additionalBuildcommands>
    					<downloadSources>true</downloadSources>
    					<downloadJavadocs>true</downloadJavadocs>
    				</configuration>
    			</plugin>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>2.5.1</version>
    				<configuration>
    					<source>1.8</source>
    					<target>1.8</target>
    					<compilerArgument>-Xlint:all</compilerArgument>
    					<showWarnings>true</showWarnings>
    					<showDeprecation>true</showDeprecation>
    				</configuration>
    			</plugin>
    			<plugin>
    				<groupId>org.codehaus.mojo</groupId>
    				<artifactId>exec-maven-plugin</artifactId>
    				<version>1.2.1</version>
    				<configuration>
    					<mainClass>org.test.int1.Main</mainClass>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    </project>

스프링으로 회원가입 만들기

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
</head>
<body>
	<h1 align="center">회원가입</h1>
	<div class="">
		<form action="/member/register.kh" method="post">
			<table>
				<tr>
					<td>* 아이디</td>
					<td><input type="text" id="memberId" name="memberId">
					</td>
				</tr>
				<tr>
					<td>* 비밀번호</td>
					<td><input type="password" name="memberPwd"></td>
				</tr>
				<tr>
					<td>* 이름</td>
					<td><input type="text" name="memberName"></td>
				</tr>

				<tr>
					<td>* 이메일</td>
					<td><input type="text" name="memberEmail"></td>
				</tr>
				<tr>
					<td>* 전화번호</td>
					<td><input type="text" name="memberPhone"></td>
				</tr>
				<tr>
					<td>* 우편번호</td>
					<td><input type="text" name="post"></td>
				</tr>
				<tr>
					<td>* 주소</td>
					<td><input type="text" name="address"></td>
				</tr>
				<tr>
				<td colspan="2" align="center">
			<input type="submit" value="전송">
				
				</td>
				</tr>
			</table>
			
		</form>
	</div>

</body>
</html>
  • 회원가입용 jsp를 만들었다.
  • 이 jsp는 views폴더 밑에 있기때문에 주소로는 접속할수없다.

접속할수있는 Controller를 구성한다.

@Controller
public class MemberController {
	
	
	@RequestMapping(value="/member/joinView.kh", method=RequestMethod.GET)
	public String memberJoinView() {
		
		return "member/join";
		//이름.jsp의 이름을 reutrn으로 만든다
		//이름의 주소를 파악하여 연결한다.
		//WEB-INF/views/member/join.jsp
	}
  • @Controller를 class명 위에 적어줘야 스프링이 controller로 인식하게 된다.
  • @RequestMapping(value="/member/joinView.kh", method=RequestMethod.GET)
    • 메소드명 위에도 이렇게 적어줘야 서블릿과 같은 형식으로 인식한다.
    • value="/member/joinView.kh 메소드를 접속할 주소
    • method=RequestMethod.GET 겟방식으로 접속한다는 뜻
    • WEB-INF/spring/appServlet/servlet-context.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/" />
      
      <!--1-->
      	<!-- 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="com.kh.junspring" />
      	
      	
      	
      </beans:beans>
      1. 이 bean태그에 의해 return한 값의

        "/WEB-INF/views/ [리턴값] .jsp" 경로로 이동하도록 만들어져있다.

        그렇기때문에 컨트롤러에서 join이라고 리턴했다면

        "/WEB-INF/views/join.jsp" 으로 자동연결되는 것이다.

폼에서 값을 입력받고 그 값을 post형식으로 controller로 보낸다

@RequestMapping(value = "/member/register.kh", method=RequestMethod.POST)
	public String memberJoin(
			@RequestParam("memberId") String memberId,
			@RequestParam("memberPwd") String memberPwd,
			@RequestParam("memberName") String memberName,
			@RequestParam("memberEmail") String memberEmail,
			@RequestParam("memberPhone") String memberPhone,
			@RequestParam("post") String post,
			@RequestParam("address") String memberAddress){
		
		Member member = new Member(memberId,memberPwd,memberName,memberEmail,memberPhone,post+" , "+memberAddress);
		
		int result = mService.registerMember(member);
		if(result>0){
			
			return "redirect:/home.kh";
			
		}else {
			
		}
		
	
		return"";
	}
  • 방금 controller처럼 @RequestMapping(value = "/member/register.kh", method=RequestMethod.POST) 를 이용해 이동할 주소와 방식을 메소드위에 부여한다.
  • public 반환값 메소드명() : 이 괄호안에 입력받은 값과 저장할 변수명을 넣어준다.
  • 아래에 Member 변수에 넣은 값은
    public class Member {
    
    	private String memberId;
    	private String memberPw;
    	private String memberName;
    	private String memberEmail;
    	private String memberPhone;
    	private String memberAddress;
    	private Date endrollDate;
    	private Date updateDate;
    	private String status;
    	
     
    
    	public Member(String memberId, String memberPw, String memberName, String memberEmail, String memberPhone, String memberAddress) {
    		super();
    		this.memberId = memberId;
    		this.memberPw = memberPw;
    		this.memberName = memberName;
    		this.memberEmail = memberEmail;
    		this.memberPhone = memberPhone;
    		this.memberAddress = memberAddress;
    	}
    }
  • 이런식으로 메소드를 오버라이드 해서 만든것이다, (게터세터 생략함 실제로는 있음)
  • post변수가 없기때문에 post는 post+" , "+memberAddress 이런식으로 문자열을 더해서 memberAddress에 더하였다.

이제 service와 store클래스로 가서 값을 저장하자

@Autowired
	private MemberService mService;
  • service클래스로 이동하기전에 controller클래스에서 다음과 같이 service클래스를 정의하였다.
  • @Autowired 를 해주어보내면 Logic클래스와 연결하지 않아도 결합을 약하게 하여 메소드로 값을 전송하는것이 가능하다.

ServiceImpl

@Service
public class MemberServicImpl implements MemberService{
	
	@Autowired
	private SqlSessionTemplate session;
	@Autowired
	private MemberStore mStore;
	

	@Override
	public int registerMember(Member member) {
		
		int result=mStore.insertMember(session, member);
		
		return result;
	}
}
  • 클래스 명 위에 반드시 @Service를 넣어줘야 정상적으로 impl 클래스에서 실행된다.
  • SqlSessionTemplate와 Store클래스를 @Autowired 를 해준뒤 변수로 선언한다.

StoreLogic

@Repository //반드시 해줘야함
public class MemberStoreLogic implements MemberStore {

	@Override
	public int insertMember(SqlSession session, Member member) {
		int result = session.insert("MemberMapper.insertMember",member);
		return result;
	}
  • 이제 Mapper안에 있는 쿼리문의 값을 받아 database에 전송하고 성공/실패 반환값을 받으면된다.

Mapper

  • src/main/resources폴더에 mapper폴더를 만들고 member-mapper라는 xml을 생성하였다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="MemberMapper">
<insert id="insertMember">

insert into member_tbl values(#{memberId}, #{memberPw},#{memberName}, #{memberEmail}, #{memberPhone}, #{memberAddress},default,default,default )

</insert> 
</mapper>
  • 규칙은 이전과 동일하다. 오타를 많이 내서 제법 틀렸다… 페이지 상단에 !DOCTYPE mapper값을 꼭 붙여넣어준다

SqlSession설정하기

  • 데이터베이스와 연결할수있는 세션을 구성해야 한다! 아니면 연결이 안된다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- Root Context: defines shared resources visible to all other web components -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" 	value="oracle.jdbc.driver.OracleDriver"></property>
		<property name="url" 				value="jdbc:oracle:thin:@localhost:1521:xe"></property>
		<property name="username" 			value="SPRING"></property>
		<property name="password" 			value="SPRING"></property>

	</bean>
	
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sqlSession"></constructor-arg>
	</bean>
	
</beans>
  • src/main/WEB-INF/spring에 있는 root-context.xml이다
  • 이 파일을 수정하여 sql세션으로 만든다
  • 연결을 관리하기때문에 하나라도 오타가나면 연결이 안된다

마이바티스를 이용하여 mapper연결하기

  • src/main/resources/에 있는 Mybatis-config.xml이다
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<mapper resource="mappers/member-mapper.xml"></mapper>
</mappers>
</configuration>
  • 이 파일이 mappers와 mapper태그를 이용하여 mamber-mapper에 접속하도록 경로를 안내한다.
profile
hello world

0개의 댓글