WEB-INF 폴더 내에서 마우스 우클릭-New-Spring-Spring Bean Configuration File로 생성한다. 앞서 <servlet-name>memberapp</servlet-name> 코드가 있으므로 파일명도 동일하게 시작한다.
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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-scanbase-package="com.member"/><!-- 등록 --><beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="WEB-INF/jsp/"></property><propertyname="suffix"value=".jsp"></property></bean><!-- db설정(ds정의) --><beanid="ds"class="org.springframework.jndi.JndiObjectFactoryBean"><propertyname="jndiName"><value>jdbc/spring</value></property><propertyname="resourceRef"value="true"></property></bean><!-- template 설정 --><beanid="template"class="org.springframework.jdbc.core.JdbcTemplate"><propertyname="dataSource"ref="ds"></property></bean></beans>
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><metacharset="UTF-8"><title>Insert title here</title></head><body><ahref="member_insert.me">[회원입력]</a><ahref="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><metacharset="UTF-8"><title>Insert title here</title></head><body><h2>회원가입</h2><formaction="member_insert.me"method="post"><table><tr><td>아이디</td><td><inputtype="text"name="id"id="id"></td></tr><tr><td>비밀번호</td><td><inputtype="password"name="pass"id="pass"></td></tr><tr><td>성명</td><td><inputtype="text"name="name"id="name"></td></tr><tr><td>주소</td><td><inputtype="text"name="addr"id="addr"></td></tr><tr><td>메모</td><td><textarearows="5"cols="25"name="memo"id="memo"></textarea></td></tr><tr><tdcolspan="2"align="center"><inputtype="submit"value="가입"><inputtype="reset"value="취소"></td></tr></table></form></body></html>
💡
insert되고 나면 "redirect:member_list.me"; 에 의해 회원 전체보기 jsp로 이동한다.
namespace 탭에서 context를 선택하고 다시 Source탭으로 가면 context가 잡혀있다. 찾을 폴더(패키지)를 등록해주고 jsp로 끝나는 파일들도 등록시켜준다.
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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-scanbase-package="com.test.controller"/><!-- person하위에 있는 패키지는 모두 어노테이션을 참조하게 됨.--><context:component-scanbase-package="com.person"/><!-- 등록 --><beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="WEB-INF/jsp/"></property><propertyname="suffix"value=".jsp"></property></bean><!-- db설정(ds정의) --><beanid="ds"class="org.springframework.jndi.JndiObjectFactoryBean"><propertyname="jndiName"><value>jdbc/spring</value></property><propertyname="resourceRef"value="true"></property></bean><!-- template 설정 --><beanid="template"class="org.springframework.jdbc.core.JdbcTemplate"><propertyname="dataSource"ref="ds"></property></bean></beans>
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><metacharset="UTF-8"><title>Insert title here</title></head><body>
어노테이션 사용 테스트 성공
</body></html>
index.jsp
💡
run on server 실행파일로 WebContent 폴더 내, WEB-INF 폴더 바깥에 생성한다.
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;
@RepositorypublicclassPersonDAOImplimplementsPersonDAO{
@Autowiredprivate JdbcTemplate template;
//추가publicvoidpersonInsert(Person p) {
String sql="insert into person values(?,?,?,?,?)";
Object[]param=newObject[] {
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>() {
@Overridepublic 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;
}
//수정하기publicvoidpersonUpdate(Person p) {
String sql="update person set job=?, gender=?, name=?, password=? where id=?";
Object[] param=newObject[] {
p.getJob(),p.getGender(),p.getName(),p.getPassword(),p.getId()
};
template.update(sql, param);
}
//삭제하기publicvoidpersonDelete(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>() {
@Overridepublic 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는 지난 시간과 거의 똑같다.
<!-- DB설정 --><beanid="ds"class="org.springframework.jndi.JndiObjectFactoryBean"><propertyname="jndiName"><value>jdbc/spring</value></property><propertyname="resourceRef"value="true"></property></bean><!-- spring template 설정 --><beanid="template"class="org.springframework.jdbc.core.JdbcTemplate"><propertyname="dataSource"ref="ds"></property></bean><!-- dao 설정 --><beanid="dao"class="com.person.model.PersonDAOImpl"><propertyname="template"ref="template"></property></bean><!-- 추가하기 --><beanname="/personInsert.sp"class="com.person.controller.PersonInsert"><propertyname="dao"ref="dao"></property></bean>
animals=["개", "고양이", "스컹크", "아나콘다", "코끼리", "하이에나"]
for animal in animals:
print(animal)
# range()# (숫자) 0~숫자-1까지for n inrange(3):
print(n)
#구구단 2단 출력for i inrange(1,10):
print("{}X{}={}".format(2,i,2*i))
#구구단 2단~9단 출력for i inrange(2,10):
for j inrange(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"notin a:
print("python")
elif"shirt"notin a:
print("shirt")
elif"need"in a:
print("need")
else:
print("none")
treeHit=0while treeHit<10:
treeHit+=1print(f"나무를 {treeHit}번 찍습니다")
if treeHit==10:
print("나무가 넘어갑니다.")
coffee=10whileTrue:
money=int(input("돈을 넣어 주세요: "))
if money==300:
print("커피를 줍니다.")
coffee=coffee-1elif money>300:
print("거스름돈 %d를 주고 커피를 줍니다." %(money -300))
coffee=coffee-1else:
print("돈을 다시 돌려주고 커피를 주지 않습니다.")
print("남은 커피의 양은 %d개 입니다." %coffee)
if coffee==0:
print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
break