www.notion.so/Service-a1ed1a6010b04c17a623fddded03b922

 

@Service 추가 간단한 주소록

스프링 프레임워크에서 Service 사용하기

www.notion.so

github.com/kkj0712/Spring/tree/master/03_SpringTest

 

kkj0712/Spring

Contribute to kkj0712/Spring development by creating an account on GitHub.

github.com

 

이제 정리 작업은 노션에서 하기로 했다..

그래서 여긴 링크만 남겨둔다.

'Learning > Spring' 카테고리의 다른 글

Maven (JDBC template 방식)  (0) 2020.10.13
Mybatis 회원가입  (0) 2020.10.08
간단한 회원가입 실습  (0) 2020.10.06
간단한 주소록 만들기 (스프링 컨테이너)  (0) 2020.10.06
스프링 설치 및 간단 주소록 만들기  (0) 2020.10.05

준비

 

💡
servlet-name: memberapp

 

  • 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>03_MemberTest</display-name>
  <servlet>
	<servlet-name>memberapp</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
	<servlet-name>memberapp</servlet-name>
	<url-pattern>*.me</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>

 


 

  • memberapp-servlet.xml
💡
WEB-INF 폴더 내에서 마우스 우클릭-New-Spring-Spring Bean Configuration File로 생성한다. 앞서 <servlet-name>memberapp</servlet-name> 코드가 있으므로 파일명도 동일하게 시작한다.

 

<?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:context="http://www.springframework.org/schema/context"
	xmlns:util="http://www.springframework.org/schema/util"
	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.member"/>

<!-- 등록 -->
<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>

 


 

  • META-INF 내의 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"
  />

 


SQL 디벨로퍼에서 테이블 생성

  • 테이블명: springmember
  • 컬럼명: id/pass/name/addr/memo/reg_date

 


 

컨트롤러 생성

 

💡
src내에 com.member.controller 패키지 생성하고 하위에 MemberController.java 클래스 파일 생성. @Controller 어노테이션과 @Autowired 어노테이션 포함.

 

  • MemberController.java
package com.member.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.member.model.MemberDAOImpl;
import com.member.model.MemberDTO;

@Controller
public class MemberController {
	@Autowired
	private MemberDAOImpl dao;
	
	//추가 폼으로 가기
	@RequestMapping(value="member_insert.me",method=RequestMethod.GET)
	public String insert() {
		return "memberForm";
	}
	
	//추가
	@RequestMapping(value="member_insert.me",method=RequestMethod.POST)
	public String insert(MemberDTO user) {
		dao.insert(user);
		return "redirect:member_list.me";
	}
	
	//전체보기
	@RequestMapping("member_list.me")
	public String memberList(Model model, String id) {
		List<MemberDTO> memberlist=dao.getMemberList();
		model.addAttribute("memberlist", memberlist);
		return "memberList";
	}
	
	//상세보기
	@RequestMapping("member_view.me")
	public String view (Model model, String id) {
		MemberDTO m=dao.findById(id);
		model.addAttribute("member",m);
		return "memberView";
	}
	
	//수정하기 폼으로 이동
	@RequestMapping(value="member_update.me", method=RequestMethod.GET)
	public String update(Model model, String id) {
		MemberDTO m=dao.findById(id);
		model.addAttribute("user",m);
		return "updateForm";
	}
	
	//수정하기
	@RequestMapping(value="member_update.me", method=RequestMethod.POST)
	public String update(MemberDTO user) {
		dao.update(user);
		return "redirect:member_list.me";
	}
	
	//삭제하기
	@RequestMapping("member_delete.me")
	public String delete(String id) {
		dao.delete(id);
		return "redirect:member_list.me";
	}
	
	
}

 


 

💡
com.member.model 패키지 내에 MemberDTO.java, MemberDAO인터페이스, MemberDAOImpl.java 클래스 파일 생성

 

  • MemberDTO.java

테이블의 컬럼명과 동일하게 객체들을 생성하고 getter, setter 구현

package com.member.model;

import org.springframework.stereotype.Component;

@Component
public class MemberDTO {
	private String id;
	private String pass;
	private String name;
	private String addr;
	private String memo;
	private String reg_date;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public String getMemo() {
		return memo;
	}
	public void setMemo(String memo) {
		this.memo = memo;
	}
	public String getReg_date() {
		return reg_date;
	}
	public void setReg_date(String reg_date) {
		this.reg_date = reg_date;
	}
}

 


 

  • MemberDAO.java
package com.member.model;

import java.util.List;

public interface MemberDAO {

	//추가
	public void insert(MemberDTO user);
	//전체보기
	public List<MemberDTO> getMemberList();
	//상세보기
	public MemberDTO findById(String id);
	//수정
	public void update(MemberDTO user);
	//삭제
	public void delete(String id);
}

 


 

  • MemberDAOImpl.java

db연동에 필요한 메소드 구현

package com.member.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 MemberDAOImpl implements MemberDAO{
	@Autowired
	private JdbcTemplate template;
	
	//추가
	public void insert(MemberDTO user) {
		String sql="insert into springmember values(?,?,?,?,?,sysdate)";
		Object[]param=new Object[] {
				user.getId(), user.getPass(), user.getName(), user.getAddr(), user.getMemo()
		};
		template.update(sql, param);
	}

	//전체보기
	public List<MemberDTO> getMemberList() {
		String sql="select * from springmember";
		List<MemberDTO> memberlist=template.query(sql, new RowMapper<MemberDTO>() {
			@Override
			public MemberDTO mapRow(ResultSet rs, int arg1) throws SQLException {
				MemberDTO m=new MemberDTO();
				m.setId(rs.getString("id"));
				m.setPass(rs.getString("pass"));
				m.setName(rs.getString("name"));
				m.setAddr(rs.getString("addr"));
				m.setMemo(rs.getString("memo"));
				m.setReg_date(rs.getString("reg_date"));
				return m;
			}
		});
		return memberlist;
	}

	//상세보기
	public MemberDTO findById(String id) {
		String sql="select * from springmember where id='"+id+"'";
		MemberDTO m=template.queryForObject(sql, new RowMapper<MemberDTO>() {
			@Override
			public MemberDTO mapRow(ResultSet rs, int arg1) throws SQLException {
				MemberDTO user=new MemberDTO();
				user.setAddr(rs.getString("addr"));
				user.setId(rs.getString("id"));
				user.setMemo(rs.getString("memo"));
				user.setName(rs.getString("name"));
				user.setPass(rs.getString("pass"));
				user.setReg_date(rs.getString("reg_date"));
				return user;
			}
		});
		return m;
	}

	
	//수정
	public void update(MemberDTO user) {
		String sql="update springmember set pass=?, name=?, addr=?, memo=? where id=?";
		Object[] param=new Object[] {
				user.getPass(), user.getName(), user.getAddr(), user.getMemo(), user.getId()
		};
		template.update(sql, param);
	}

	//삭제
	public void delete(String id) {
		String sql="delete from springmember where id='"+id+"'";
		template.update(sql);
	}

}

 


JSP 파일 생성

💡
index.jsp 실행 후 회원입력 링크 <a href="member_insert.me">를 누르면 회원가입 폼으로 이동한다.

 

  • index.jsp (WebContent 폴더 내에 생성)
<%@ 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="member_insert.me">[회원입력]</a>
<a href="member_list.me">[회원전체보기]</a>
</body>
</html>

 


 

💡
MemberController.java에 @RequestMapping 어노테이션으로 value=member_insert.me를 적고 method=RequestMethod.GET 혹은 method=RequestMethod.POST 방식으로 구분하여 단순히 폼으로 이동 memberForm 하는 건지 db에 회원정보가 입력 dao.insert(user)되도록 하는 건지 분리되어 있다.

 

  • memberForm.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>
<h2>회원가입</h2>
<form action="member_insert.me" method="post">
<table>
<tr>
	<td>아이디</td>
	<td><input type="text" name="id" id="id"></td>
</tr>
<tr>
	<td>비밀번호</td>
	<td><input type="password" name="pass" id="pass"></td>
</tr>
<tr>
	<td>성명</td>
	<td><input type="text" name="name" id="name"></td>
</tr>
<tr>
	<td>주소</td>
	<td><input type="text" name="addr" id="addr"></td>
</tr>
<tr>
	<td>메모</td>
	<td><textarea rows="5" cols="25" name="memo" id="memo"></textarea></td>
</tr>
<tr>
	<td colspan="2" align="center">
	<input type="submit" value="가입">
	<input type="reset" value="취소"></td>
</tr>
</table>
</form>
</body>
</html>

 

 


 

💡
insert되고 나면 "redirect:member_list.me"; 에 의해 회원 전체보기 jsp로 이동한다.

 

  • memberList.jsp (회원 전체보기)
<%@ 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="member_insert.me">추가하기</a>/전체보기<br/>
<c:forEach items="${memberlist}" var="member">
아이디: <a href="member_view.me?id=${member.id}">${member.id}</a><br/>
비밀번호: ${member.pass}<br/>
성명: ${member.name}<br/>
주소: ${member.addr}<br/>
메모: ${member.memo}<br/>
가입일: ${member.reg_date}<br/><br/>
</c:forEach>
</body>
</html>

 

 

 


 

💡
memberList.jsp에서 아이디에 링크를 걸어서 회원 정보 상세보기를 할 수 있다.

 

  • memberView.jsp
<%@ 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>
<h3>상세보기</h3>
아이디: ${member.id}<br/>
비밀번호: ${member.pass}<br/>
성명: ${member.name}<br/>
주소: ${member.addr}<br/>
메모: ${member.memo}<br/>
가입일: ${member.reg_date}<br/><br/>
<input type="button" value="수정" onclick="location.href='member_update.me?id=${member.id}'">
<input type="button" value="삭제" onclick="location.href='member_delete.me?id=${member.id}'">
</body>
</html>

 

 

 


 

💡
수정 버튼을 누르면 member_update.me 로 이동한다. 수정할 수 있는 (input type이 살아있는) 폼 양식으로 이동한다.

 

  • updateForm.jsp
<%@ 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>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
</head>
<body>
<h2>개인정보 수정</h2>
<form action="member_update.me" method="post">
<input type="hidden" name="id" id="id" value="${user.id}">
<table>
<tr>
	<td>아이디</td>
	<td>${user.id}</td>
</tr>
<tr>
	<td>비밀번호</td>
	<td><input type="password" name="pass" id="pass" value="${user.pass}"></td>
</tr>
<tr>
	<td>성명</td>
	<td><input type="text" name="name" id="name" value="${user.name}"></td>
</tr>
<tr>
	<td>주소</td>
	<td><input type="text" name="addr" id="addr" value="${user.addr}"></td>
</tr>
<tr>
	<td>메모</td>
	<td><textarea rows="5" cols="25" name="memo" id="memo" >${user.memo}</textarea></td>
</tr>
<tr>
	<td colspan="2" align="center">
	<input type="submit" value="확인">
	<input type="reset" value="취소"></td>
</tr>
</table>
</form>
</body>
</html>

 

💡
확인 submit을 누르면 member_update.me 로 이동한다. db에 회원정보가 변경되는 것이다. 변경된 후에는 회원 전체보기로 redirect한다.

 

 

 


 

 

 

 

스프링 컨테이너와 어노테이션 사용으로 서블릿보다 조금더 간단하게 설정하기

준비


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 작성
💡
namespace 탭에서 context를 선택하고 다시 Source탭으로 가면 context가 잡혀있다. 찾을 폴더(패키지)를 등록해주고 jsp로 끝나는 파일들도 등록시켜준다.

 

 

 

<?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";
	}
}

 

💡
src에 com.test.controller 패키지 생성 후 TestController.java 클래스 파일을 생성한다. 어노테이션 사용이 제대로 되는지 확인하기 위한 테스트용 클래스이다.
💡
@Controller 어노테이션을 적어주면 xml에서 알아서 찾아온다. @RequestMapping 어노테이션과 jsp를 돌려주는 String 형의 메소드를 적어준다. return "result"에 의해 result.jsp가 리턴된다.

 

 


 

  • result.jsp
💡
return 되어질 result.jsp 파일이다. 간단하게 어노테이션 테스트 성공이라고 body 태그 안에 적었다. (index.jsp를 실행하고 링크를 클릭하면 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

 

💡
run on server 실행파일로 WebContent 폴더 내, WEB-INF 폴더 바깥에 생성한다.

 

<%@ 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
💡
@Controller, @Autowired 어노테이션에 의해 스프링 컨테이너로 자동 등록된다. 이 클래스 파일을 통하여 db에 추가, 선택, 수정, 삭제가 실행된다.
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;
	}
}

 


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);
}

 


💡
Repository, Autowired 어노테이션을 통해 자동으로 springtest-servlet.xml과 연결된다.
💡
<지금까지의 스프링 컨테이너 이용 작업 순서> 1. springtest-servlet.xml에서 찾을 패키지 등록 2. com.person 하위에서 가장 먼저 controller이 찾아짐. PersonController의 상단에 있는 @Controller 어노테이션에 의해 스프링 컨테이너에 PersonController 객체가 들어감. 3. com.person 그 다음 하위인 model 패키지 내의 Person.java에는 @Component 어노테이션이 붙었음. (getter, setter는 어노테이션을 떼도 된다.) 4. Person.java의 객체들을 인식한뒤 PersonDAOImpl.java로 넘어가서 template을 자동으로 연결한다.
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

스프링 설치 및 환경설정

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 폴더 선택)

 

 


  • server.xml에서 port를 8888로 수정

<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 파일 생성하고 입력 폼 양식 채우기

 

 

  • 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 생성

 

  • 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 파일 내용 수정

 

  • 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) 

 

 

 

 


  • springapp-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"

     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 클래스 파일 생성

 

 

 

  • 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로 이동하도록 명령어를 써줘야함

 

  • springapp-serlvelt.xml에 다음과 같이 내용 추가

 

<bean name="/test.sp" class="com.test.controller.TestController"/>

 

src의 com.person.controller 패키지 내 TestController 클래스 파일이 실행됨. 그리고 result.jsp가 return됨.

 

 


 

  • index.jsp에서 person 추가하는 링크 설정

<a href="personForm.sp">Person 추가하기</a><br/>

 

  • personForm.jsp 에서 폼 액션 이동 경로 설정

 

<form action="personInsert.sp" method="post">

 

web.xml에 의해 .sp로 끝나는 파일들은 springapp-servlet.xml이 먼저 실행됨.

 

  • springapp-servlet.xml에 personForm.jsp 내용 추가

 

<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 생성

 

  • PersonDTO.java

 

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;

     }

     

}

 

  • PersonDAO.java 인터페이스 파일 생성

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;
     }
}

 

 


 

  • springapp-servlet.xml에 추가하기 내용을 추가

<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내용 추가하기

 

  • 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"

  />

 


 

  • springapp-servlet.xml에 내용 추가

 

<!-- 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>


 

  • dao 설정을 해줘야하므로 PersonDAOImpl.java에 내용 추가

 private JdbcTemplate template;

     

     //setter

     public void setTemplate(JdbcTemplate template) {

          this.template = template;

     }


 

  • PersonInsert.java에 내용 추가

 

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;

     }

}


 

전체보기

  • index.jsp에 전체보기 링크 추가 

 

<a href="personList.sp">Person 전체보기</a><br/>

 

  • springapp-server.xml에 전체보기 추가

<!-- 전체보기 -->

<bean name="/personList.sp" class="com.person.controller.PersonList">

     <property name="dao" ref="dao"/>

</bean>
  • PersonList.java

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;

     }

     

}

 

  • PersonDAOImpl.java에 전체보기 내용 수정

   

 //전체보기

     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;

     }
  • personList.jsp 생성후 내용 입력 (lib에 jstl이 있음)

<%@ 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>

 

  • 폼 양식 입력후 바로 전체보기 뜨도록 PersonInsert.java 내용 수정

 

return new ModelAndView("redirect:personList.sp");

 

상세보기가 가능하도록 전체보기 아이디에 링크를 걸기

 

  • personList.jsp

 

아이디: <a href="personView.sp?id=${user.id}">${user.id}</a><br/>

 

  • springapp-server.xml에 상세보기 추가

 

<!-- 상세보기 -->

<bean name="/personView.sp" class="com.person.controller.PersonView">

     <property name="dao" ref="dao"></property>

</bean>

 

  • PersonView.java 클래스 파일 생성

 

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;

     }

 

 

  • personView.jsp 내용 쓰기

<%@ 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>




 

 

 

삭제하기

  • springapp-server.xml에 삭제하기 내용 추가

 

<!-- 삭제하기 -->

<bean name="/personDelete.sp" class="com.person.controller.PersonDelete">

     <property name="dao" ref="dao"></property>

</bean>

 

  • com.person.controller 패키지에 PersonDelete.java 클래스 파일 생성

 

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;

     }

     

}





  • PersonDAOImpl.java에 삭제하기 내용 추가

//삭제하기

     public void personDelete(String id) {

          String sql="delete from person where id='"+id+"'";

          template.update(sql);

     }

 

 


수정하기

 

  • springapp-server.xml 에 내용 추가

 

<!-- 수정하기 -->

<bean name="/personUpdate.sp" class="com.person.controller.PersonUpdate">

     <property name="dao" ref="dao"></property>

</bean>

 

 

  • com.person.controller 패키지 내에 PersonUpdate.java 파일 생성

 

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");

     }

}

 

 

  • PersonDAOImpl.java에 수정하기 부분 수정

 

//수정하기
	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);
		
	}


 

'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.06

#전역변수와 지역변수

x=10 #전역변수

def foo():

    print(x)

foo()

print(x)



def foo1():

    y=10

    print(y)

foo1()

print(y)

 

 

foo1()에서 y는 지역변수. 함수 안에서 출력할 수 있지만 바깥에선 출력하지 못함

 

 


def spam():
    eggs=99
    bacon()
    print(eggs)

def bacon():
    ham=101
    eggs=0


spam()

 

 


 

에러처리 try/Exception

#에러처리 try/Exception
def div10(num):
    try:
        return 10/num
    except:
        print("에러발생")
print(div10(2))
print(div10(0)) #에러발생
print(div10(5))

 

 

'Learning > Python' 카테고리의 다른 글

파이썬 함수  (0) 2020.08.25
for 반복문  (0) 2020.08.25
if문과 while 반복문  (0) 2020.08.24
bool, 논리연산자  (0) 2020.08.24
문자열 f-string 포맷, 인덱스, 슬라이싱  (0) 2020.08.24

dir

#내장 함수

#dir: 객체가 가진 변수나 메소드를 보여줌

    print(dir('1'))

 

 


 

 

len()

#len(): 입력값의 길이를 돌려주는 함수

print(len([1,2,3]))

print(len(["1234"]))

 


 

 

max()

#max(): 인수로 반복 가능한 자료형을 입력받아 그 최댓값을 돌려주는 함수

print(max([1,2,3]))

print(max("python"))

 


 

 

sum()

#sum(): 합계

A=[70, 60, 50]

print(sum(A))

 

 

 


함수 작성

#함수 작성
def hello():
	print('하이!')
	print('안녕!')
	print('니 하오!')
hello()
hello()
hello()

 

 

 

 


매개변수가 있는 함수 작성

#매개변수가 있는 함수 작성
def hello(name):
	print('하이 '+name)
hello('길동')
hello('펭수')

 

 

 


 

매개변수와 리턴값이 있는 함수 작성

#매개변수와 리턴값이 있는 함수 작성
#print(len("문자열길이"))


def hello(name):
	print('하이 '+name)
	return len(name)
    
print(hello("길동"))
print(hello("안녕하세요"))

 

 


#예제 1

x=int(input("숫자입력:"))

def is_odd(x):

    if(x%2==0):

        return "짝수"

    else:

        return "홀수"

print(is_odd(x))

 


#예제 2

def avgNums(*num):

    return sum(num)/len(num)

print(avgNums(1,2,3))

print(avgNums(1,2,3,4,5,6,7,8,9,10))

 

'Learning > Python' 카테고리의 다른 글

전역변수 지역변수, 에러처리  (0) 2020.08.25
for 반복문  (0) 2020.08.25
if문과 while 반복문  (0) 2020.08.24
bool, 논리연산자  (0) 2020.08.24
문자열 f-string 포맷, 인덱스, 슬라이싱  (0) 2020.08.24

 

#for 반복문

for num in [1,2,3]:

    print(num)

 

 

 


for ch in '홍길동':

    print(ch)

 

 

 


animals=["개", "고양이", "스컹크", "아나콘다", "코끼리", "하이에나"]

for animal in animals:

    print(animal)

 

 


# range()
# (숫자) 0~숫자-1까지
for n in range(3):
	print(n)

 

 

 


 

#구구단 2단 출력
for i in range(1,10):
    print("{}X{}={}".format(2,i,2*i))

 

 

 


 

 

#구구단 2단~9단 출력
for i in range(2,10):
    for j in range(1,10):
        print('{}X{}={}'.format(i,j,i*j), end=" ")
    print(end='\n')

 

 

 

 


 

연습문제

#연습문제 1
a="Life is too short, you need python"
if "wife" in a:
    print("wife")
elif "python" in a and "you" not in a:
    print("python")
elif "shirt" not in a:
    print("shirt")
elif "need" in a:
    print("need")
else:
    print("none")

 

 


 

#2
i=1
isum=0
while(i<1001):
    i+=1
    if(i%3==0):
        isum+=i
print(isum)

 

 


#3
i=0
while(i<5):
    i+=1
    for j in range(i):
       print("*", end=" ")
    print()

 

 

 


#4
A=[70, 60, 55, 75, 95, 90, 80, 80, 85, 100]
sumi=0
for i in A:
    sumi+=i
print("학급평균:",(sumi/len(A)))

 

 

 


컴프리헨션

#컴프리헨션
list_num=[1,2,3,4,5,6,7,8,9,10]
홀수=[]
for num in list_num:
    if num%2==1:
        홀수.append(num)
print (홀수)

'Learning > Python' 카테고리의 다른 글

전역변수 지역변수, 에러처리  (0) 2020.08.25
파이썬 함수  (0) 2020.08.25
if문과 while 반복문  (0) 2020.08.24
bool, 논리연산자  (0) 2020.08.24
문자열 f-string 포맷, 인덱스, 슬라이싱  (0) 2020.08.24

if문

#if문
name='Alice'
if name=='Alice':
    print('반가워요, Alice.')
    print('종료')

 


 

if else문

#if else문
name='Bob'
if name=='Alice':
    print('당신이 Alice군요')
else:
    print('누구신가요?')

 

 

 


if else문

#if else문
name='Alice'
if name=='Alice':
    print('당신이 Alice군요')
    print('당신이 Alice군요')
    print('당신이 Alice군요')
    print('당신이 Alice군요')
    print('당신이 Alice군요')
else:
    print('누구신가요?')

 

 


 

if elif문

#if elif문
name='Bob'
if name=='Alice':
    print('당신이 Alice군요')
elif name=='Bob':
    print('당신이 Bob이군요')
else:
    print('누구신가요?')

 

 

만약 elif 문에 Bob이 아니라 bob이었다면 '누구신가요?' 가 출력된다. 대소문자 구분.

 

 


 

#예제
name2=input("이름: ")
if name2:
  print("당신의 이름은 {name2} 입니다.")
else:
  print("이름을 입력하지 않았군요!")

 

 

 

 

 


 

 

while 반복문

#while 반복문
count=0
while count<3:
    print('횟수: ',count)
    count+=1

 

 


treeHit=0
while treeHit<10:
    treeHit+=1
    print(f"나무를 {treeHit}번 찍습니다")
    if treeHit==10:
        print("나무가 넘어갑니다.")

 

 

 

 

 


 

coffee=10
while True:
money=int(input("돈을 넣어 주세요: "))
    if money==300:
        print("커피를 줍니다.")
        coffee=coffee-1
    elif money>300:
        print("거스름돈 %d를 주고 커피를 줍니다." %(money -300))
        coffee=coffee-1
    else:
        print("돈을 다시 돌려주고 커피를 주지 않습니다.")
        print("남은 커피의 양은 %d개 입니다." %coffee)
    if coffee==0:
        print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
        break

 

'Learning > Python' 카테고리의 다른 글

파이썬 함수  (0) 2020.08.25
for 반복문  (0) 2020.08.25
bool, 논리연산자  (0) 2020.08.24
문자열 f-string 포맷, 인덱스, 슬라이싱  (0) 2020.08.24
변수, 문자열str, 이스케이프 시퀀스  (0) 2020.08.24

bool(참, 거짓 형)

#bool(참, 거짓 형)
bool1=True
bool2=False
bool3=1<2
bool4=1==2
print(bool1,bool2,bool3,bool4)

 


x,y=1,2
print(x>y)
print(x==y)
print(x!=y)

 


불린타입 변환 bool()

#불린타입 변환 bool()
print(bool(1))
print(bool(0))
print(bool('True'))
print(bool('안녕'))

 


논리연산자

#논리연산자
#and: 둘다 true 일때
#or: 둘 중 하나가 true일때
#not: true면 false, false면 True
print(True and True)
print(True and False)
print(False and True)
print(False and False)
print("-------")


#or
print(True or True)
print(True or False)
print(False or True)
print(False or False)
print("-------")


#not
print(not True)
print(not False)
print("-------")

 

문자열 f-string 포맷

#f-string 문자열 포맷
name="홍길동"
age=20
print(f'안녕하세요 {name}님 나이가 {age} 이군요')

 

 


 

print("나는 도시락 %d개를 %s 먹었다." %(7,'배터지게'))

 

 

 


문자열.format() 함수 방법

#문자열.format() 함수 방법
number=20
welcome="환영합니다"
base='{}번 손님{}'
print('{}번 손님 {}'.format(number, welcome))

 

 


 

#예제 1
name="홍길동"
color="보라색"
print('안녕하세요. 제 이름은 {}이고 좋아하는 색상은 {}입니다.'.format(name, color))
print(f'안녕하세요. 제 이름은 {name}이고 좋아하는 색상은 {color}입니다.')

 

 

 


 

문자열 인덱스

#문자열 인덱스
string1='01234567'
print(string1[7])

 


문자열 슬라이싱

#문자열 슬라이싱 [시작:끝-1]
string1='01234567'

print(string1[1:5]) #[1부터 5-1까지 출력]
print(string1[0:3])
print(string1[:3]) #[0부터 3-1까지 출력]
print(string1[3:]) #[3부터 끝까지 출력]
print("-------")

#[시작:끝:증감]
print(string1[::2]) #[처음부터 끝까지 2씩 증감]
print(string1[::-1]) #[끝부터 처음까지 거꾸로]
print(string1[::-2]) #[끝부터 처음까지 거꾸로]
print("-------")


string2='god'
print(string2[::-1])

 

 


 

#예제
rainbow=["빨", "주", "노", "초", "파", "남", "보"]
red_colors=rainbow[:3]
print("red_colors의 값: {}".format(red_colors))


blue_colors=rainbow[4:]
print("blue_colors의 값: {}".format(blue_colors))

 


#문자열의 변경불가 (Immuntability)
string1='123'
string1[0]='9'
print(string1[0])

'Learning > Python' 카테고리의 다른 글

for 반복문  (0) 2020.08.25
if문과 while 반복문  (0) 2020.08.24
bool, 논리연산자  (0) 2020.08.24
변수, 문자열str, 이스케이프 시퀀스  (0) 2020.08.24
파이썬 실행, 데이터 타입, 숫자 연산자  (0) 2020.08.24

+ Recent posts