home
자바
home
2️⃣

spring

root-context
<?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 --> <!-- * root-context.xml 문서는 서버 구동시 web.xml을 거쳐서 바로 로딩 되는 문서 (pre-loading 되는 설정 파일) 따라서 서버 스타트와 동시에 바로 셋팅(빈으로 등록) 해야되는 내용들을 작성하는 설정파일 주로 DB연결 설정, 트랜잭션 처리, AOP관련, 내 외부 모듈연동 등등 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/> <property name="username" value="spring"/> <property name="password" value="spring"/> </bean> <!-- BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver"); dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe"); dataSource.setUsername("spring"); dataSource.setPassword("spring"); --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml"/> <property name="dataSource" ref="dataSource"/> </bean> <!-- SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean(); sqlSessionFactory.setConfigLocation("classpath:mybatis-config.xml"); sqlSessionFactory.setDataSource(dataSource); --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sqlSessionFactory" /> </bean> <!-- SqlSessionTemplate sqlSession = new SqlSessionTemplate(sqlSessionFactory); --> </beans>
XML
복사
root-context.xml
bean
<!-- 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.spring" /> <!-- * 사용자가 어떤 url로 서비스 요청시 이 문서가 읽혀진다고 보면됨! HandlerMapping을 통해서 어떤 url로 요청시 어떤 Controller를 실행시킬건지 알아내야됨 => 해당 Controller가 실행되도록 1. 그때마다 실행할 Controller 클래스들이 빈으로 등록되어있어야됨 2. 어떤 url로 요청시 어떤 Controller를 구동시킬건지 매핑시키는 HandlerMapping 관련한 클래스도 빈으로 등록되어있어야됨 --> <!-- xml방식 <beans:bean id="loginController" class="com.kh.spring.member.controller.loginController"/> <beans:bean id="logoutController" class="com.kh.spring.member.controller.logoutController"/> <beans:bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <beans:property name="mapping"> <beans:props> <beans:prop key="login.me">loginController</beans:prop> <beans:prop key="logout.me">logoutController</beans:prop> </beans:props> </beans:property> </beans:bean> --> <!-- 위의 방식이 xml방식 => 각 url 요청때마다 실행시킬 controller클래스들을 따로따로 만들어야됨 > 장점 : 등록된 bean들을 한 xml문서내에서 한 눈에 볼 수 있어서 관리의 편의성은 높을 수 있음 > 단점 : 하지만 bean 개수가 많아지면 오히려 관리하기 어려움 / 여러 개발자가 같은 xml설정 파일을 수정하면서 충돌이 발생되기 쉽다. -->
XML
복사
servlet-context.xml
Controller단(서비스단,vo객체클래스 등 Mapping하는거 잊지말기!!!)
// * 파라미터(요청시 전달값)을 받는 방법 (요청시 전달되는 값들 처리방법) /* * 1. HttpServletRequest를 통해 전달받기 (기존의 jsp/servlet 때의 방식) * 해당 메소드의 매개변수로 HttpServletRequest를 추가해두면 * 스프링컨테이너가 해당 메소드 호출시(실행시) 자동으로 해당 객체를 인자로 주입해 줌 */ @RequestMapping("login.me") public String loginMember(HttpServletRequest request) { String userId = request.getParameter("id") String userPwd = request.getParameter("pwd"); System.out.println("ID : " + userId); System.out.println("PWD : " + userPwd); return "main"; // main.jsp 응답 }
Java
복사
/* * 2. @RequestParam 어노테이션 방식 * 스프링에서 조금 더 간단하게 파라미터를 받아올 수 있는 방법 제공 * request.getParameter("키"):"밸류"의 역할을 대신해주는 어노테이션 * * - 기본적으로 자주 안쓰이지만 default값을 세팅해 놓을 때 쓰임 */ @RequestMapping("login.me") public String loginMember(@RequestParam(value="id", defaultValue="aaa") String userId, @RequestParam(value="pwd") String userPwd) { System.out.println("ID : " + userId); System.out.println("PWD : " + userPwd); return "main"; }
Java
복사
/* * 3. @RequestParam 어노테이션을 생략하는 방법 * 위의 어노테이션을 생략해도 파라미터 값을 가져와서 기록할 수 있음 * ** 단, 매개변수명을 name값(키값)과 동일하게 세팅해둬야 자동으로 값이 주입된다. */ @RequestMapping("login.me") public String loginMember(String userId, String userPwd) { System.out.println("ID : " + userId); System.out.println("PWD : " + userPwd); Member m = new Member(); m.setUserId(userId); m.setUserPwd(userPwd); return "main"; }
Java
복사
/* * 4. 커맨드 객체 방식 * 매개변수로 요청시 전달값들을 담고자 하는 vo클래스 타입을 셋팅한 후 * 요청시 전달값의 키값(name값)을 vo클래스에 담고자하는 필드명으로 작성 * * 스프링컨테이너가 해당 객체를 기본생성자로 생성 후 setter메소드 찾아서 * 요청시 전달값을 해당 필드에 담아줌 * * *** 반드시 name 속성값과 담고자하는 필드명이 동일해야함!! */ @RequestMapping("login.me") public String loginMember(Member m) { Member loginUser = mService.loginMember(m); if(loginUser == null) { // 로그인 실패 => 에러페이지 System.out.println("로그인 실패"); }else { // 로그인 성공 => 메인페이지 System.out.println("로그인 성공"); } return "main"; // main.jsp 응답 }
Java
복사
// * 요청 처리 후 응답페이지로 포워딩 또는 url재요청, 응답데이터 담는 방법 /* * 1. Model객체를 사용하는 방법 * 응답 뷰로 전달하고자 하는 데이터를 맵 형식(key-value)로 담을 수 있음 * scope는 request이다. * 단, setAttribute가 아닌 addAttribute메소드 이용 */ @RequestMapping("login.me") public String loginMember(Member m, Model model, HttpSession session) { Member loginUser = mService.loginMember(m); if(loginUser == null) { // 로그인 실패 => 에러페이지 model.addAttribute("errorMsg", "로그인 실패!"); // return "/WEB-INF/views/common/errorPage.jsp"; // servlet-context.xml에 빈 등록되어있음 prefix, suffix return "common/errorPage"; }else { // 로그인 성공 => 메인페이지 session.setAttribute("loginUser", loginUser); return "redirect:/"; // redirect : url재요청 } }
Java
복사
/* * 2. ModelAndView 객체를 사용하는 방법 * Model은 데이터를 맵형식으로 담을 수 있는 공간이라고 한다면 * View는 응답뷰에 대한 정보를 담을 수 있는 공간 * * ModelAndView는 두개를 합쳐놓은 객체 */ @RequestMapping("login.me") public ModelAndView loginMember(Member m, Model model, HttpSession session, ModelAndView mv) { Member loginUser = mService.loginMember(m); if(loginUser == null) { // 로그인 실패 => 에러페이지 mv.addObject("errorMsg", "로그인 실패!"); mv.setViewName("common/errorPage"); }else { // 로그인 성공 => 메인페이지 session.setAttribute("loginUser", loginUser); mv.setViewName("redirect:/"); } return mv; }
Java
복사