스프링 컨테이너와 어노테이션 사용으로 서블릿보다 조금더 간단하게 설정하기
준비
new-Other-Dynamic Web Project로 02_SpringTest 생성
간략한 작업순서
index.jsp 실행하여 전체보기를 클릭 personList.go ⇒ Controller (@RequestMapping("personList.go")) ⇒PersonDAOImpl(dao) personList(){} ⇒ select sql문으로 가져온 결과값을 List형태에 담음⇒ModelAndView 객체에 저장⇒전체보기 jsp에서 뿌려줌
- web.xml 코드 추가
<servlet>
<servlet-name>springtest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springtest</servlet-name>
<url-pattern>*.go</url-pattern>
</servlet-mapping>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- context.xml 에 코드 추가
<Resource name="jdbc/spring" auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:xe"
username="scott" password="1234"
maxTotal="20" maxIdle="20"
maxWaitMillis="-1"
/>
- springtest-servlet.xml 작성
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 찾을 폴더(패키지) 등록 -->
<context:component-scan base-package="com.test.controller"/>
<!-- person하위에 있는 패키지는 모두 어노테이션을 참조하게 됨.-->
<context:component-scan base-package="com.person"/>
<!-- 등록 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- db설정(ds정의) -->
<bean id="ds" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>jdbc/spring</value>
</property>
<property name="resourceRef" value="true"></property>
</bean>
<!-- template 설정 -->
<bean id="template" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"></property>
</bean>
</beans>
테스트하기
- TestController.java
package com.test.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TestController {
@RequestMapping("test.go")
public String test() {
return "result";
}
@RequestMapping("test22.go")
public String test22() {
return "result22";
}
}
- result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
어노테이션 사용 테스트 성공
</body>
</html>
- index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="test.go">테스트</a>
<a href="test22.go">테스트22</a>
<hr/>
<a href="personInsert.go">person 추가하기</a>
<a href="personList.go">전체보기</a>
</body>
</html>
테스트용 TestController.java 외에도 전체보기, 추가하기, 수정, 삭제 실행에 필요한 패키지와 클래스 파일들을 생성한다.
- PersonController.java
package com.person.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.person.model.Person;
import com.person.model.PersonDAOImpl;
@Controller
public class PersonController {
@Autowired
private PersonDAOImpl dao;
//추가폼
@RequestMapping(value="personInsert.go",method=RequestMethod.GET)
public String insert() {
return "personForm";
}
//추가
@RequestMapping(value="personInsert.go",method=RequestMethod.POST)
public String insert(Person p) {
dao.personInsert(p);
return "redirect:personList.go";
}
//전체보기
@RequestMapping("personList.go")
public ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception {
ModelAndView mv=new ModelAndView();
List<Person> userlist=dao.personList();
mv.addObject("userlist", userlist);
mv.setViewName("personList");
return mv;
}
//상세보기
@RequestMapping("personView.go")
protected ModelAndView view (String id) {
ModelAndView mv=new ModelAndView();
Person p=dao.personView(id);
mv.addObject("user", p);
mv.setViewName("personView");
return mv;
}
//수정하기 폼으로 가기
@RequestMapping(value="update.go",method=RequestMethod.GET)
public String personUpdate(Model model, String id) {
Person p=dao.personView(id);
model.addAttribute("user", p);
return "updateForm";
}
//수정하기
@RequestMapping(value="update.go",method=RequestMethod.POST)
public String personUpdate(Person p) {
dao.personUpdate(p);
return "redirect:personList.go";
}
//삭제하기
@RequestMapping("personDelete.go")
public String personDelete(String id) {
dao.personDelete(id);
return "redirect:personList.go";
}
}
객체와 db 연결에 필요한 com.person.model 패키지 하위의 클래스 파일들
- Person.java
package com.person.model;
import org.springframework.stereotype.Component;
public class Person {
//getter, setter
private String id;
private String name;
private String gender;
private String password;
private String job;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
}
- PersonDAO.java (인터페이스 파일)
package com.person.model;
import java.util.List;
public interface PersonDAO {
//추가
public void personInsert(Person p);
//전체보기
public List<Person> personList();
//수정
public void personUpdate(Person p);
//삭제
public void personDelete(String id);
//상세보기
public Person personView(String id);
}
package com.person.model;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
@Repository
public class PersonDAOImpl implements PersonDAO{
@Autowired
private JdbcTemplate template;
//추가
public void personInsert(Person p) {
String sql="insert into person values(?,?,?,?,?)";
Object[]param=new Object[] {
p.getId(),p.getName(),p.getPassword(),p.getGender(),p.getJob()
};
template.update(sql, param);
}
//전체보기
public List<Person> personList() {
String sql="select * from person";
List<Person> personlist=template.query(sql, new RowMapper<Person>() {
@Override
public Person mapRow(ResultSet rs, int arg1) throws SQLException {
Person p=new Person();
p.setGender(rs.getString("gender"));
p.setId(rs.getString("id"));
p.setJob(rs.getString("job"));
p.setName(rs.getString("name"));
p.setPassword(rs.getString("password"));
return p;
}
});
return personlist;
}
//수정하기
public void personUpdate(Person p) {
String sql="update person set job=?, gender=?, name=?, password=? where id=?";
Object[] param=new Object[] {
p.getJob(),p.getGender(),p.getName(),p.getPassword(),p.getId()
};
template.update(sql, param);
}
//삭제하기
public void personDelete(String id) {
String sql="delete from person where id='"+id+"'";
template.update(sql);
}
//상세보기
public Person personView(String id) {
String sql="select * from person where id='"+id+"'";
Person p=template.queryForObject(sql, new RowMapper<Person>() {
@Override
public Person mapRow(ResultSet rs, int arg1) throws SQLException {
Person user=new Person();
user.setGender(rs.getString("gender"));
user.setId(rs.getString("id"));
user.setJob(rs.getString("job"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
return user;
}
});
return p;
}
}
그 외 personForm.jsp, personList.jsp, personView.jsp, updateForm.jsp는 지난 시간과 거의 똑같다.
'Learning > Spring' 카테고리의 다른 글
Maven (JDBC template 방식) (0) | 2020.10.13 |
---|---|
Mybatis 회원가입 (0) | 2020.10.08 |
@Service 추가 간단한 주소록 (0) | 2020.10.08 |
간단한 회원가입 실습 (0) | 2020.10.06 |
스프링 설치 및 간단 주소록 만들기 (0) | 2020.10.05 |