스프링은 처음에 설정하는 과정이 어려움
학원에서 수업 중 사용 할 스프링레거시프로젝트는 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 사이트에서 필요한 라이브러리 복사해오기
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
프로젝트에서 소스 컴파일에 사용하는 컴파일플러그인
![](https://blog.kakaocdn.net/dn/HQpez/btrC2KFILmD/o7LNdPtqU2xudhxvjkpXO0/img.png)
![](https://blog.kakaocdn.net/dn/2foxD/btrC2hD1cYl/ATUdZtLL2zKvbTixKr1HfK/img.png)
![](https://blog.kakaocdn.net/dn/lb0tA/btrC3ezLgvw/VhQsaQ7dYaqHMjAKBnQcb1/img.png)
![](https://blog.kakaocdn.net/dn/dCIIoT/btrC0MLwOKs/pWJOQrTZlkLdhrAbrgatn0/img.png)
pom.xml 의 밑쪽에 <build> 태그의 <plugins> 태그 안에있다. 복사한 코드로 대체한다.
<version> 태그안의 버전만 변경해도 된다.
<source> 태그와 <target> 태그도 1.8 버전으로 바꿔준다.
ojdbc8 추가
DB연결을 위한 ojdbc8 라이브러리 추가
![](https://blog.kakaocdn.net/dn/biZDSs/btrCW305dO2/0ZoDwNSE6M1J9QTA5oQkRk/img.png)
![](https://blog.kakaocdn.net/dn/ck2AS0/btrCXx8Ffdg/yNNLD1dhdLf0SVdWh5dF21/img.png)
![](https://blog.kakaocdn.net/dn/bm19gH/btrCW37Nhx6/zkAUr34TKkIe1VfruA2lv1/img.png)
![](https://blog.kakaocdn.net/dn/bK8mfo/btrC3elZn9s/SkvwtQG5URf4sYn57i0u11/img.png)
pom.xml 의 <dependencies> 태그안에 추가
![](https://blog.kakaocdn.net/dn/bKlSSf/btrC2KSXfaH/EeYGckHqDEbv1PanRZokhk/img.png)
추가가 되었는지 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 변경하기
![](https://blog.kakaocdn.net/dn/oBJ19/btrC2LLcs4B/EBXLEjUWm1akbpUAAF7eu0/img.png)
![](https://blog.kakaocdn.net/dn/bEUgzS/btrC2hKCeT8/F7TniWCygTYU8IAkrELp11/img.png)
![](https://blog.kakaocdn.net/dn/bgEid3/btrCY5YSk05/CYKh7t16LcknjGNK5YFdQ1/img.png)
![](https://blog.kakaocdn.net/dn/Wi8CU/btrC2v3U6yl/hAKT0oAgeCy33NFYiI62Ck/img.png)
<!-- 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)로 변경되었네요
자바서블릿 JSP API 추가하기
![](https://blog.kakaocdn.net/dn/xkt46/btrC2MqOrw0/AtQ8QkLuKLUqIm7KvKgxNK/img.png)
jsp-api 검색해서 첫번째 API 의 최선버전선택
![](https://blog.kakaocdn.net/dn/bd9M6y/btrC2wBLumK/CdAGtrdiTKSiGuzP9mGPiK/img.png)
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 |