2017년 7월 9일 일요일

스프링프레임워크 무료 동영상강좌 - inflearn.com

강좌에 대한 요약은 여기 http://mj-documents.readthedocs.io/ko/latest/JAVA%20(%20Spring%20)/Spring%20%ED%95%84%EA%B8%B0/

강좌의 소스에 대한 이해는 대충.
spring_11_2_ex1_springex
--------------------------------------------
1. web.xml 의 <servlet> 설정에서 <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 읽음
2. 콘트롤러 파일을 찾기 위해서 <context:component-scan base-package="com.javalec.ex" /> 지정
3. 화면 표시용 view 가 있는 리소스 위치를 지정하기 위해서 prefix,suffix 값을 지정
4. context root,그러니까 http:localhost:8080/ex 이렇게 뜨는 거는 Server 의 Tomcat v7.0.... 으로 추가한 서버를 더블클릭하고 server.xml 파일의 context path 를 변경하면됨.
5. 프로젝트 에서도 Properties>Web Project Settings 에서도 context root 를 변경
6. HomeController 자바 파일에서는 @Requestmapping 으로 넘어온 value 주소에 대해서만 실행함.
7. model.addAttribute("serverTime", formattedDate ); 로 화면에 출력할 변수를 만들어서 "home" 뷰에 전달함.
8. /WEB-INF/views/ + "home" + jsp 파일에서는 ${serverTime} 값을 출력함

spring_11_3_ex1_springex
--------------------------------------------
spring_11_2_ex1_springex 와 같은 소스 다만
<resources mapping="/resources/**" location="/resources/" /> 로 지정안된 폴더에서 이미지 가져오려 하면, 가져올수 없다는 것을 확인


spring_12_1_ex1_springex
--------------------------------------------
spring_11_2_ex1_springex 와 같은 소스 다만
콘트롤러에서
@RequestMapping("/board/view")
@RequestMapping("/board/content")...
로 했을때의 별도의 메소드에서 처리됨을 확인.
각 메소드에서는 return "뷰값"을 하여
해당 파일(/WEB-INF/views/ + "뷰값" + jsp)이 있으면 그걸 화면 출력한다.


spring_12_4_ex1_springex
--------------------------------------------
spring_11_2_ex1_springex 와 같은 소스 다만
콘트롤러에서 클래스에
@RequestMapping("/board") 를 추가하고
메소드에
@RequestMapping("/")
@RequestMapping("/write")...
로 했을때 웹상에서의 주소접근이
http://localhost:8080/board/
http://localhost:8080/board/write
로 되는 것을 확인- 한참 헤멨네...


spring_13_1_ex1_springex
--------------------------------------------
@RequestMapping("board/confirmId")
public String confirmId(HttpServletRequest httpServletRequest, Model model) {
에서는  httpServletRequest.getParameter("id") 등과 같이 http 로 넘어오는 값을 받아서 처리하는 예제

@RequestMapping("board/checkId")
public String checkId(@RequestParam("id") String id, @RequestParam("pw") int pw, Model model) {
에서는  @RequestParam 어노테이션을 이용하여 request 된 데이터 취득.



spring_13_4_ex1_springex
--------------------------------------------
@RequestMapping("/student/{studentId}")
public String getStudent(@PathVariable String studentId, Model model) {
주소라인에 SEO 방식의 주소로 할수 있도록 하는 예제. 즉 http://localhost:8080/student/아빠/ 라는 식으로 http 주소를 받아서 '아빠' 이름에 해당하는 변수를 활용할수있다. get,post 도 필요없이 주소라인에서 직접 변수를 전달하는 방식, 이렇게 링크를 하는 이유는 검색엔진에서 주소라인의 문구가 검색 결과로 잡하기 때문에...
@RequestMapping("/student/{studentId}/{nickname}")
public String getStudent(
@PathVariable("studentId") Optional<String>  studentId,
@PathVariable("nickname") Optional<String>  nickname,
Model model
) {
머..이런식도 가능.



spring_14_1_ex1_springex
--------------------------------------------
콘트롤러에서 지정한
http://localhost:8080/ex/index 화면에서 전송을 누르면
전송 폼이 나타나고 값을 입력후 전송하면.
@RequestMapping(method = RequestMethod.POST, value = "/student") 또는
@RequestMapping(method = RequestMethod.GET, value = "/student") 가
적절히 실행된다.
get 을 확인하려면
http://localhost:8080/ex/student?id=1234 하면됨.


spring_14_2_ex1_springex
--------------------------------------------
spring_13_4_ex1_springex 랑 비교하면 좋음.
폼정보가 있는 index.jsp 에서 전송을 하면,
콘트롤러에서
@RequestMapping("/studentView")
public String studentView(@ModelAttribute("studentInfo") StudentInformation studentInformation){
메소드를 실행하는데, 이때 넘어온 폼의 정보를 한번에 StudentInformation 클래스에 setter 한다.
물론 form 의 input 이름과 클래스변수의 이름이 같고 seter 가 있는 변수에 한해서만이다.
ModelAttribute("studentInfo") 여기의 "studentInfo" 가 view 에서 변수명이 된다.

***중요한 거는 StudentInformation.java 클래스에 자동으로 담겨주는 거.폼의 인풋 정보랑 modelAttribute 에서 지정한 클래스 정보랑


spring_14_3_ex1_springex
--------------------------------------------
리다이렉트 redirect: 예제들.


spring_15_1_ex1_springex
--------------------------------------------
StudentController 에서  @RequestMapping("/student/create") 주소로 폼 내용이 넘어올때,
public String studentCreate(@ModelAttribute("student") Student student, BindingResult result) {
이름의 인풋값들중에 student 객체에 있는 변수는 할당을 한다.
student 객체에 입력된 값으로 StudentValidator 의 검증 메소드를 실행한다. 이때 에러가 발생하면, crete 페이지로 가고 아니면  done 페이지로 간다.
폼주소  http://localhost:8080/spring_15_1_ex1_srpingex/studentForm


spring_15_2_ex1_springex
--------------------------------------------
spring_15_1_ex1_springex 과 같은 내용, 밸리데이터만 수정


spring_15_3_ex1_springex
--------------------------------------------
spring_15_1_ex1_springex 과 같은 내용, 밸리데이터만 수정
@InitBinder 확인.?


spring_16_1_ex1_springex
--------------------------------------------
BController.java
이 화일에서는 각 요청 주소 에 따른 @RequestMapping("...") 을 한다.
command 패턴을 사용해서 각 코맨드에 맞는 클래스,메소드를 실행한다.(좋음)
com.javalec.spring_16_1_ex1_srpingex.command 패키지에는 각 커맨드에 맞는 클래스가 있다.
Dao 를 썼지만 , 예전 방식으로 접속함.(예제니까..)


spring_21_1_ex1_springex
--------------------------------------------
servelet-context.xml 에서
<beans:bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
....
</beans:bean>
JDBC 이용한거만 좀 다름..




spring_22_1_ex1_springex
--------------------------------------------
servelet-context.xml 에서
<beans:bean name="dao" class="com.javalec.spring_pjt_ex.dao.TicketDao" >
로 빈 지정하고.
HomeController 에서
@Autowired
public void setDao(TicketDao dao) {
Autowired 처리되어 dao 변수는 com.javalec.spring_pjt_ex.dao.TicketDao 할당됨





spring_22_2_ex1_springex
--------------------------------------------
servelet-context.xml 에서
<beans:bean name="dao" class="com.javalec.spring_pjt_ex.dao.TicketDao" >
로 빈 지정하고.
HomeController 에서
@Autowired
public void setDao(TicketDao dao) {
Autowired 처리되어 dao 변수는 com.javalec.spring_pjt_ex.dao.TicketDao 할당됨
아직 트랜잭션 처리되지 안음.


spring_22_2_ex2_springex
--------------------------------------------
spring_22_2_ex1_springex 동일.
스프링에서 지원하는 TransactionDefinition 으로 간단히 트랜잭션 지정.


spring_23_1_ex1_springex
--------------------------------------------
spring_22_2_ex2_springex 동일.
좀더 간단히 TransactionTemplate 을 이용
설정에 추가됨
<beans:bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<beans:property name="dataSource" ref="dataSource" />
</beans:bean>

<beans:bean name="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<beans:property name="transactionManager" ref="transactionManager"></beans:property>
</beans:bean>





spring_23_2_ex1_springex
--------------------------------------------
spring_23_2_ex2_springex 동일.
좀더 간단히 TransactionTemplate 을 이용
설정에 추가됨
<beans:bean name="ticketCommand" class="com.javalec.spring_pjt_ex.command.TicketCommand" >
빈에 연결
@Autowired
public void setTicketCommand(ITicketCommand ticketCommand) {
this.ticketCommand = ticketCommand;
}
빈에 연결시에 인터페이스와 implement 구형제가 한세트라서, 자동으로 구현클라스에 할당됨
트랜잭션의 전파 속성 별도로 학습 필요






spring_25_1_ex1_springex
--------------------------------------------
보안관련, 한글처리



spring_26_1_ex1_springex
--------------------------------------------
보안관련, 한글처리

spring_26_2_ex1_springex
--------------------------------------------
보안관련, 한글처리

spring_27_1_ex1_springex
--------------------------------------------
보안관련, 한글처리





spring_28_1_ex1_springex
--------------------------------------------
JDBC 방식임.




spring_29_1_ex1_springex
--------------------------------------------
마이바티스 를 사용하기 위해서는

<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource"></beans:property>
<beans:property name="mapperLocations" value="classpath:com/javalec/spring_mybatis/dao/mapper/*.xml"></beans:property>
</beans:bean>

<beans:bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<beans:constructor-arg index="0" ref="sqlSessionFactory"></beans:constructor-arg>
</beans:bean>
추가해야함.
value="classpath:com/javalec/spring_mybatis/dao/mapper/*.xml" 는 프로젝트 마다 다름.

스트링에서 마이바티스를 이용하면
mapper 폴더의 xml 과 인터페이스 를 1:1 로 연결함.
즉 mapper/OOO.xml 에는
<mapper namespace="com.javalec.spring_mybatis.dao.IDao">
와 같이
com.javalec.spring_mybatis.dao.IDao 인터페이스에 연결한다.

이는
즉 mapper/OOO.xml 에는 에는
<mapper> 밑으로
<select id="listDao" resultType="com.javalec.spring_mybatis.dto.ContentDto">
SELECT * FROM BOARD ORDER BY MID DESC
</select>
로 선언됨.

이를 가지고 콘트롤러에서
IDao dao = sqlSession.getMapper(IDao.class); Idao 에는 현재 xml 파일이 매핑되어 있음.
model.addAttribute("list", dao.listDao) 매핑된 xml 속성(쿼리element) 중에 id 가 listdao 인 놈만 가져와서 list (모델속성)에 할당해서 화면에 뿌릴수 있게됨.
화면에 뿌릴때는 list.db필드명 식으로딤.





spring_30_1_ex1_springex
--------------------------------------------
xml 이용한 연습.
xml 에 인자 는 #{param1} #{param2} 식으로.

0 comments:

댓글 쓰기