스프링 설치 및 환경설정
spring.io/tools
Spring Tools 4 is the next generation of Spring tooling
Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, or Theia IDE.
spring.io
알집프로그램 삭제 후!!
jar 파일 더블클릭 -exe 파일 설치
이클립스 내 Eclipse Marketplace에서 sts 검색하고 다운로드
이클립스에서 환경설정하기
window -> preferences -> server -> Runtime Environment에서 Add 하여 톰캣 추가
Compiler에 JDK를 1.8로 수정
General 탭-Web Browser-Chorme으로 설정하면 크롬 새창에서 결과물 확인 가능
Package explorer 에서 마우스 우클릭 properties - Server 검색해서 Tomcat 선택
Java Build Path-Libraries-Add Library-Apache Tomcat v9.0 추가
Project Facets의 Java 버전을 1.8로 수정
(만약 explorer에서 1.8버전으로 안나오면 programm files-Java에 있는 라이브러리를 추가해줘야함. properties-Java Build Path-Library탭-Add Library-Instatlled JREs-Search-C:\Program Files\Java\jdk1.8.0_251 폴더 선택)
< Connector connectionTimeout = "20000" port = "8888" protocol = "HTTP/1.1" redirectPort = "8443" />
폼, 클래스, 서버 등 각종 파일 연결흐름
New-Web Dynamic Project로 01_SpringTest 생성
필요한 라이브러리들을 WEB-INF - lib에 복사
WEB-INF 밑에 jsp 폴더 생성
jsp 폴더 내에 personForm.jsp 파일 생성하고 입력 폼 양식 채우기
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>개인 정보 입력</h1>
<table>
<tr>
<td>이름:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>아이디:</td>
<td><input type="text" name="userid" id="userid"></td>
</tr>
<tr>
<td>패스워드:</td>
<td><input type="password" name="pwd" id="pwd"></td>
</tr>
<tr>
<td>성별</td>
<td>남<input type="radio" name="gender" value="man" checked="checked">
여<input type="radio" name="gender" value="woman">
</td>
</tr>
<tr>
<td>직업:</td>
<td><select name="job">
<option value="">직업선택</option>
<option value="학생">학생</option>
<option value="회사원">회사원</option>
<option value="기타">기타</option>
</select></td>
</tr>
</table>
<button type="button" id="ok">확인</button>
<button type="reset" id="clear">취소</button>
</body>
</html>
WebContent 폴더 내 (WEB-INF 폴더 바깥)에 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.sp">테스트</a>
<br/>
Person 추가하기 <br/>
Person 전체보기 <br/>
</body>
</html>
web.xml 파일 내용 수정
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>01_SpringTest</display-name>
<servlet>
<servlet-name>springapp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>*.sp</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>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
WEB-INF 폴더 내에 springapp-servlet.xml 생성 (New-Other-Spring-Sring Bean Configuration file)
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
</beans>
src에 패키지 생성 (com.test.controller)
TestController.java 클래스 파일 생성
package com.test.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class TestController extends AbstractController{
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception {
// TODO Auto-generated method stub
return new ModelAndView("WEB-INF/jsp/result.jsp");
}
}
실행순서: index.jsp를 실행-web.xml이 실행-springapp이 실행됨-springapp-servlet.xml이 실행-test.sp를 만나면 TestController로 이동하도록 명령어를 써줘야함
<bean name="/test.sp" class="com.test.controller.TestController"/>
src의 com.person.controller 패키지 내 TestController 클래스 파일이 실행됨. 그리고 result.jsp가 return됨.
<a href="personForm.sp">Person 추가하기</a><br/>
<form action="personInsert.sp" method="post">
web.xml에 의해 .sp로 끝나는 파일들은 springapp-servlet.xml이 먼저 실행됨.
<bean name="/personForm.sp" class="com.person.controller.PersonForm"/>
src의 com.person.controller 패키지 생성 후 PersonForm.java 클래스 파일 생성하기. 이 클래스 파일이 실행됨. 그리고 personForm.jsp가 return됨.
sql디벨로퍼에서 scott 계정 접속-새 테이블 생성
src에 com.person.controller 패키지 생성 후 PersonDTO.java 클래스 파일 생성
getter, setter 생성
package com.person.model;
public class PersonDTO {
//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;
}
}
package com.person.model;
import java.util.List;
public interface PersonDAO {
//추가
public void personInsert(PersonDTO person);
//전체보기
public List<PersonDTO> findAll();
//수정하기
public void personUpdate(PersonDTO person);
//삭제하기
public void personDelete(String id);
//상세보기
public PersonDTO findById(String id);
}
PersonDAOImpl.java 클래스 파일 생성 하고 PersonDAO를 implements함
package com.person.model;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
public class PersonDAOImpl implements PersonDAO{
//추가하기
public void personInsert(PersonDTO person) {
String sql="insert into person values(?,?,?,?,?)";
Object[] param=new Object[] {
person.getId(),person.getName(),person.getPassword(),person.getGender(),
person.getJob()
};
template.update(sql,param);
}
//전체보기
public List<PersonDTO> findAll() {
// TODO Auto-generated method stub
return null;
}
//수정하기
public void personUpdate(PersonDTO person) {
// TODO Auto-generated method stub
}
//삭제하기
public void personDelete(String id) {
// TODO Auto-generated method stub
}
//상세보기
public PersonDTO findById(String id) {
// TODO Auto-generated method stub
return null;
}
}
<bean name="personInsert.sp" class="com.person.controller.PersonInsert"><property name="dao" ref="dao"></property></bean>
com.person.controller에 PersonInsert.java 클래스 파일 추가
Servers의 context.xml을 META-INF에 붙여넣기. Resource내용 추가하기
<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"
/>
<!-- DB설정 -->
<bean id="ds" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>jdbc/spring</value>
</property>
<property name="resourceRef" value="true"></property>
</bean>
<!-- spring template 설정 -->
<bean id="template" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"></property>
</bean>
<!-- dao 설정 -->
<bean id="dao" class="com.person.model.PersonDAOImpl">
<property name="template" ref="template"></property>
</bean>
<!-- 추가하기 -->
<bean name="/personInsert.sp" class="com.person.controller.PersonInsert">
<property name="dao" ref="dao"></property>
</bean>
private JdbcTemplate template;
//setter
public void setTemplate(JdbcTemplate template) {
this.template = template;
}
package com.person.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import com.person.model.PersonDAOImpl;
import com.person.model.PersonDTO;
public class PersonInsert extends AbstractController{
private PersonDAOImpl dao;
//setter
public void setDao(PersonDAOImpl dao) {
this.dao = dao;
}
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception {
PersonDTO person=new PersonDTO();
person.setGender(req.getParameter("gender"));
person.setId(req.getParameter("id"));
person.setJob(req.getParameter("job"));
person.setName(req.getParameter("name"));
person.setPassword(req.getParameter("password"));
dao.personInsert(person);
return null;
}
}
전체보기
<a href="personList.sp">Person 전체보기</a><br/>
<!-- 전체보기 -->
<bean name="/personList.sp" class="com.person.controller.PersonList">
<property name="dao" ref="dao"/>
</bean>
package com.person.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import com.person.model.PersonDAOImpl;
import com.person.model.PersonDTO;
public class PersonList extends AbstractController{
private PersonDAOImpl dao;
//setter
public void setDao(PersonDAOImpl dao) {
this.dao = dao;
}
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception {
// TODO Auto-generated method stub
ModelAndView mv=new ModelAndView();
List<PersonDTO> userlist=dao.findAll();
mv.addObject("userlist",userlist);
mv.setViewName("WEB-INF/jsp/personList.jsp");
return mv;
}
}
//전체보기
public List<PersonDTO> findAll() {
String sql="select * from person";
List<PersonDTO> personlist=template.query(sql, new RowMapper<PersonDTO>() {
@Override
public PersonDTO mapRow(ResultSet rs, int arg1) throws SQLException {
PersonDTO user=new PersonDTO();
user.setGender(rs.getString("id"));
user.setId(rs.getString("id"));
user.setJob(rs.getString("job"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
return user;
}
});
return personlist;
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="personForm.sp">추가하기</a>/전체보기<br/>
<c:forEach items="${userlist}" var="user">
이름: ${user.name}<br/>
아이디: ${user.id}<br/>
성별: ${user.gender}<br/>
직업: ${user.job}<br/><br/>
</c:forEach>
</body>
</html>
return new ModelAndView("redirect:personList.sp");
상세보기가 가능하도록 전체보기 아이디에 링크를 걸기
아이디: <a href="personView.sp?id=${user.id}">${user.id}</a><br/>
<!-- 상세보기 -->
<bean name="/personView.sp" class="com.person.controller.PersonView">
<property name="dao" ref="dao"></property>
</bean>
package com.person.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import com.person.model.PersonDAOImpl;
import com.person.model.PersonDTO;
public class PersonView extends AbstractController{
private PersonDAOImpl dao;
//setter
public void setDao(PersonDAOImpl dao) {
this.dao = dao;
}
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception {
String id=req.getParameter("id");
PersonDTO person=dao.findById(id);
ModelAndView mv=new ModelAndView();
mv.addObject("user",person);
mv.setViewName("WEB-INF/jsp/personView.jsp");
return mv;
}
}
PersonDAOImpl.java에 상세보기 내용 추가
//상세보기
public PersonDTO findById(String id) {
String sql="select * from person where id='"+id+"'";
PersonDTO person=template.queryForObject(sql, new RowMapper<PersonDTO>() {
@Override
public PersonDTO mapRow(ResultSet rs, int arg1) throws SQLException {
PersonDTO user=new PersonDTO();
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 person;
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
이름: ${user.name}<br/>
아이디: ${user.id}<br/>
성별: ${user.gender}<br/>
직업: ${user.job}<br/><br/>
<input type="button" value="수정" onclick="location.href='updateForm.sp?id=${user.id}'">
<input type="button" value="삭제" onclick="location.href='personDelete.sp?id=${user.id}'">
</body>
</html>
삭제하기
<!-- 삭제하기 -->
<bean name="/personDelete.sp" class="com.person.controller.PersonDelete">
<property name="dao" ref="dao"></property>
</bean>
package com.person.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import com.person.model.PersonDAOImpl;
import com.person.model.PersonDTO;
public class PersonList extends AbstractController{
private PersonDAOImpl dao;
//setter
public void setDao(PersonDAOImpl dao) {
this.dao = dao;
}
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception {
// TODO Auto-generated method stub
ModelAndView mv=new ModelAndView();
List<PersonDTO> userlist=dao.findAll();
mv.addObject("userlist",userlist);
mv.setViewName("WEB-INF/jsp/personList.jsp");
return mv;
}
}
//삭제하기
public void personDelete(String id) {
String sql="delete from person where id='"+id+"'";
template.update(sql);
}
수정하기
<!-- 수정하기 -->
<bean name="/personUpdate.sp" class="com.person.controller.PersonUpdate">
<property name="dao" ref="dao"></property>
</bean>
package com.person.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import com.person.model.PersonDAOImpl;
import com.person.model.PersonDTO;
public class PersonUpdate extends AbstractController{
private PersonDAOImpl dao;
//setter
public void setDao(PersonDAOImpl dao) {
this.dao = dao;
}
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception {
PersonDTO person=new PersonDTO();
person.setGender(req.getParameter("gender"));
person.setJob(req.getParameter("job"));
person.setName(req.getParameter("name"));
person.setPassword(req.getParameter("password"));
person.setId(req.getParameter("id"));
dao.personUpdate(person);
return new ModelAndView("redirect:personList.sp");
}
}
//수정하기
public void personUpdate(PersonDTO person) {
String sql="update person set job=?, gender=?, name=?, password=? where id=?";
Object[] param=new Object[] {
person.getJob(),person.getGender(),person.getName(),person.getPassword(),person.getId()
};
template.update(sql, param);
}