국비지원

22/05/24 수업정리

야생늑대 2022. 5. 24. 19:42
반응형

스프링은 처음에 설정하는 과정이 어려움

 

학원에서 수업 중 사용 할 스프링레거시프로젝트는 3버전까지만있다.

이후에는 부트전용으로바뀌었다.

그래서 사용하려면 헬프 -> 마켓플레이스에서 3버전(Add-on)인스톨해야함

스프링부트는 서버도 내장되어있어서 톰캣 설치안해도됨

 

XML 확장된 마크업랭귀지   = 태그로 (이루어진)쓰여진 문서

 

@Controller  어노테이션이 붙어있으면  서블릿을 상속한다는 뜻?, 컨트롤러로 사용할 수 있다.

@service 등도 사용가능   ;     

역할을 지정해주는 어노테이션?

객체도 자동으로 만들어준다.

 

@RequestMapping  어노테이션

value와 요청해온 주소가 일치하면 메소드를 실행

※ 추가매핑조건설정 -> method = RequestMethod.GET     Get방식 일 경우 실행

 

URL 요청이들어오면 조건에 맞는 메소드를 찾아주는 역할

어떤 메소드가 실행할지 결정하는 역할

 

 

 

스프링은 데이터를 주고받을 떄 Model 타입의 객체를 사용

 

※ String타입 메소드

medel.addAttribute(" ", 변수);         // 데이터저장

return "home";                  //포워딩      

 

	@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 );
			
		
		int boardCount = tdao.getBoardCount();
		
		System.out.println("boardCount : " + boardCount);
		
		ArrayList<BoardDto> boardList = tdao.getBoardList();
		
		System.out.println(boardList);
		return "home";  		
		}

※ 학원에서는 String타입이 아닌 ModelAndView  타입 메소드사용

▶ 포워딩할 경로지정과 데이터를 담는 역할 모두 수행가능.

ModelAndView mav = new ModelAndView();

mav.setViewName("home");     // 포워딩

mav.addObject("testData", "테스트 데이터 1");  // 데이터저장

 

※ jsp에서 Run As 실행할수 없음. 

  WEB-INF폴더는 숨김처리된 파일이기 때문에 외부에서는 볼 수 없음(제한되어있다.)

  그런데 jsp 파일은 WEB-INF의 하위폴더인 views폴더에서 사용하기때문에 직접적으로 사용할 수 없다.

 프로젝트에서부터 시작해서 서블릿을 거쳐야 실행가능하다. 그래서 프로젝트폴더에서 Run As 실행

 

 

pom.xml  

라이브러리 프레임워크 오브젝트 들이 들어가있음

<dependencies>  의존성  주입 사용

태그안에 추가하고자는 것(라이브러리 등)을 작성  스프링에서 확인하고 다운받아서 담아주는 역할

Maven Tool(아파치에서 만든것) - 디펜더시에서 어떤(라이브러리)주소로 접근해야되는지  확인하고 다운받아

담아주는 역할

 

Maven Repository 사이트에서 필요한 라이브러리 복사해오기

https://mvnrepository.com/

 

Maven Repository: Search/Browse/Explore

Fastjson is a JSON processor (JSON parser + JSON generator) written in Java Last Release on May 21, 2022

mvnrepository.com


Maven Compiler Plugin

프로젝트에서 소스 컴파일에 사용하는 컴파일플러그인

더보기

 

pom.xml 의 밑쪽에  <build> 태그의 <plugins> 태그 안에있다.  복사한 코드로 대체한다.

<version> 태그안의 버전만 변경해도 된다.

 

<source> 태그와  <target> 태그도  1.8 버전으로 바꿔준다.

 

ojdbc8 추가

더보기

DB연결을 위한 ojdbc8 라이브러리 추가

 

pom.xml 의 <dependencies> 태그안에 추가

 

 추가가 되었는지 Maven Dependencies 폴더에서 확인


 mybatis  

SQL mapper framework.   

객체지향프로그램에서 관계형 데이터베이스(SQL)를 더 쉽게 사용할 수 있도록하는 프레임워크이다.

어노테이션을 통해 DB와 연결해서, 데이터 처리(저장,수정,삭제,출력)를 자동으로 해준다.


mybatis-spring

mybatis sql mapping framework를 위한 사용하기 쉬운 Spring bridge.

mybatis와 Spring을 쉽게 연결해주는 프레임워크

 

 

 


spring-jdbc

ojdbc와 스프링을 연결해주는 프레임워크

RELEASE 버전이 정식버전이고 나머지는 베타버전같은 것이니 정식버전으로 사용


spring -tx

Spring 에서 Transaction(COMMIT, ROLLBACK)  처리를 도와주는 프레임워크

 


 

※ pom.xml 파일에 위의 5가지 라이브러리, 프레임워크 추가하고 확인

 


 

pom.xml 자바 서블릿 API 변경하기

 

더보기

 

<!-- Servlet --> 에서 첫번째 에있는 디펜던시와 바꾼다   코드가 살짝 다르기때문에 아예 바꿔준다.

서블릿API 버전을 바꾸고 나서 web.xml 을 열면

cvc-elt.1.a cannot find the declaration of element 'web-app'

빨간줄(에러메세지)가 뜨는데  web.xmp 헤더에 작성되어있는 버전정보와 pom.xml 서블릿API의 버전이 달라서

그런다.  버전에 맞게 변경해준다.


각 servlet 버전별 web.xml 스키마 헤더 

1. servlet 4.0



              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
              version="4.0">

2. servlet 3.1



               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           
               xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
               version="3.1">
</web-app>

3. servlet 3.0

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

4. servlet 2.5

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="servlet-2_5" 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 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>

5. servlet 2.4

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="servlet-2_4" version="2.4"
              xmlns="http://java.sun.com/xml/ns/j2ee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>

6. servlet 2.3

<?xml version="1.0" encoding="UTF-8"?>
http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
</web-app>

7. servlet 2.2

<?xml version="1.0" encoding="UTF-8"?>
http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
</web-app>

** 2.4 부터는 DTD(Document Type Definition)를 사용하지 않고 xsd(XML Schema Definition)로 변경되었네요

출처 : https://fliedcat.tistory.com/65


자바서블릿 JSP API 추가하기

더보기

jsp-api 검색해서 첫번째 API 의  최선버전선택

 

pon.xml <!-- Servlet --> 의  두번째 디펜던시 를 바꿔준다. 이것도 코드가 살짝다르니 아예 바꿔준다

 


 

▶ 파일이나 폴더아이콘 오른쪽위에 S 자가 붙어있으면 스프링이 실시간으로 관리하고있다는 표시

 

 

 

 

 

*서블릿컨텍스트  

스프링에서 관리하는 웹에 관련된 처리  

<?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="com.TestProject01.controller" />
	
	
	
</beans:beans>

 

 

root-context.xml

기본포워딩방식  디스패처

prefix 경로

확장자

스프링에 관련된 내부사용되는 내용

DB주소, 계정명 

db처리를할때만 실행

 

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

	 <property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
 	<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></property>	 
 	<property name="username" value="CAROL01"></property>
 	<property name="password" value="1111"></property>
</bean>


<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
</bean>
	
    <mybatis-spring:scan base-package="com.TestProject01.dao"/>

Namespaces 탭에서 beans, jdbc, mybatis-spring  3가지가 선택되어있어야 db와 연결해서 실행 처리가능

 

 

 

어떤위치에서 접속하는지 스캔하고  그걸 통해서 

접속에 관련된내용을 통해 

 

<mybatis-spring:scan base-package=""/>
라이브러리를  prom.xml 에 추가하고   루트컨텍스트의 네임스스페이스의 마이바티스-스프링 라이브러리를 체크해야 사용가능하다.  요청이있을때만 사용해야되도록  dao 패키지의 클래스나 인터페이스에서   마이바티스 호출이있으면

지정된 컨트롤러패키지에서 마이바티스에관련된 내용이있느지 확인하고 위에작성한 내용을 토대로 접속하기위한 설정값)   <bean>태그안의 작업을 시행하기위한 시작점

 해당하는요청이 어느위치에서 발생할껀지 스캔하는작업

 

@Autowired

자동으로 줄을 이어준다는 뜻  바로연결

 

생성자로 객체를 만들어주지 않아도  스프링이 관리하고 있는 클래스는 @Autowired 어노테이션을 통해 호출해서 사용가능하다.         

 타입 객체 = new.참조클래스  -->      타입 객체;

	@Autowired
	TestDao tdao;

위 코드처럼 생성자 없이도 TestDao 클래스의 객체를 생성해서 사용할 수 있다. 

 

-----------------

 

public interface TestDao {

@Select("SELECT COUNT(*) FROM BOARDS")
int getBoardCount();
}

public interface TestDao {

	@Select("SELECT COUNT(*) FROM BOARDS")
	int getBoardCount();

	@Select("SELECT * FROM BOARDS")
	ArrayList<BoardDto> getBoardList();
	
}

@Insert 어노테이션나 @Select 어노테이션을 사용하면 기능이없는 메소드를  mybatis가 대신  지정한 작업을 해준다.

※ 인터페이스라는건   형태를잡는  리턴타입이 어떻게되고 메소드이름은 어떻게되고   메소드가 호출됐을때 사용할 매개변수는 무엇인가라는  정의를 해서 사용

 


Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of its dependencies could not be resolved 에러 발생


@RequestMapping  사용하기

	//inputTest
@RequestMapping(value= "/inputTest")
public String inputTest(@RequestParam("tdata1")String td1, @RequestParam("tdata2")String td2, @RequestParam (value = "tdata100", defaultValue = "100") String td100) {
						//매핑된 value의 요청이 왔을때 넘어오는 parameter를 String타입의 td1, td2 변수로 저장 해서 메소드안에서 사용
						//값이 없으면  기본값을 사용 해서 저장 , 값이있으면 그냥 그 값을저장
	
	System.out.println("/inputTest");  //매핑되었는지 확인
	System.out.println("td1 : " + td1);
	System.out.println("td2 : " + td2);
	System.out.println("td100 : " + td100);
	return null;	
}

매핑된 value의 요청이 왔을때 넘어오는 parameter를 String타입의 td1, td2 변수로 저장 해서 메소드안에서 사용
▶ @RequestParam (value = "tdata100", defaultValue = "100") String td100)

    넘어온 파라메터(tdata100)가 없으면  기본값(defaultValue ="100")을  td100에 저장 , 값이 있으면 그냥

     그 값을 td100에 저장하도록한다


▶ 파라메터 값과 매개변수가 이름이 같다면 파라메터를 생략하고 값을 저장해 사용할 수 있다.

  ※ 메소드블록내부에서 다른이름으로 사용되어야한다면 위의 코드처럼 파라메터값까지 작성해서 저장해줘야 한다.

@RequestMapping(value = "/inputTest2")
public String inputTest2(String tdata3, String tdata4, String tdata5) {
	System.out.println("/inputTest2 호출");
	System.out.println("tdata3 : " + tdata3);
	System.out.println("tdata4 : " + tdata4);
	System.out.println("tdata5 : " + tdata5);
	//파라메터값과 매개변수 이름이 같으면 파라메터 생략가능
	// 메소드안에서 다른이름으로 사용되어야한다면 inputTest 메소드처럼 파라메터값을 작성해서 사용
	return null;
}

▶ 회원가입 form 처럼 파라메터 값이 여러개일 경우에는 일일히 다 적어주면 작성하기도 힘들다.

    그럴 때 파라메터값들이 dto의 필드들과 관계된 값들일 경우 dto 타입의 객체로 한번에 담아서 받을 수 있다.

    메소드 블록내부에서 사용할 때도 서비스 클래스로 바로 넘길 수도 있다.

 

home.jsp

<form action="memberJoin" method="get">
아이디 : <input type="text" name="mid">
<br>
비밀번호 : <input type="text" name="mpw">
<br>
이름 : <input type="text" name="mname">
<br>
전화번호 : <input type="text" name="mtel">
<br>
<input type = "submit" value="회원가입">
</form>

MemberDto.java

package com.TestProject01.dto;

public class MemberDto {

	private String mid;
	private String mpw;
	private String mname;
	private String mtel;
	public String getMid() {
		return mid;
	}
	public void setMid(String mid) {
		this.mid = mid;
	}
	public String getMpw() {
		return mpw;
	}
	public void setMpw(String mpw) {
		this.mpw = mpw;
	}
	public String getMname() {
		return mname;
	}
	public void setMname(String mname) {
		this.mname = mname;
	}
	public String getMtel() {
		return mtel;
	}
	public void setMtel(String mtel) {
		this.mtel = mtel;
	}
	@Override
	public String toString() {
		return "MemberDto [mid=" + mid + ", mpw=" + mpw + ", mname=" + mname + ", mtel=" + mtel + "]";
	}
		
}

HomeController.java

@RequestMapping(value = "/memberJoin")
public String inputTest2(MemberDto memberInfo ) {
	System.out.println("/memberJoin 호출");
	//회원가입처럼 받는 파라메터 값이 받으면 소괄호안에 다 적기에 많다.
	//dto 클래스를 이용해서 한번에 담아서 처리할 수 있다.
	//그대로 Service 클래스로 넘길수도있다.
	System.out.println(memberInfo);	
	return null;
}

톰캣 멀티플에러

Could not publish server configuration for Tomcat v9.0 Server at localhost.
Multiple Contexts have a path of "/controller".

 

반응형

'국비지원' 카테고리의 다른 글

22/05/30 수업정리  (0) 2022.05.30
22/05/25 수업정리  (0) 2022.05.25
스프링 다운받고 설정하기  (0) 2022.05.20
22/05/18 수업정리  (0) 2022.05.18
22/05/12 수업정리  (0) 2022.05.12