// servlet-context
<!-- 인터셉터 설정
-LoginInterceptor 클래스를 빈으로 정의한다.
** 생성한 클래스는 해당 위치에 존재해야합니다. (패키지 구조에 맞는 형태로 ::: 없으면 에러남)
-->
<beans:bean id="loginInterceptor"
class="kr.or.ddit.controller.intercept.loginInterceptor"></beans:bean>
<interceptors>
<interceptor>
<mapping path="/intercept/login"/>
<beans:ref bean="loginInterceptor"/>
</interceptor>
</interceptors>
// LoginController
package kr.or.ddit.controller.intercept;
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 kr.or.ddit.vo.crud.CrudMember;
@Controller
@RequestMapping("/intercept")
public class LoginController {
@RequestMapping(value="/login", method = RequestMethod.GET)
public String loginForm() {
return "login/loginForm";
}
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(String userId, String userPw, Model model) {
CrudMember member = new CrudMember();
member.setUserId(userId);
member.setUserPw(userPw);
member.setUserName("홍길동");
model.addAttribute("user", member);
return "login/success";
}
}
//LoginInerceptor
public class LoginInterceptor extends HandlerInterceptorAdapter{
private static final String USER_INFO = "userInfo";
// 쓰고 alt +Shift + s -> 오버라이드 / 인플리먼트 메소드누르면
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
super.afterCompletion(request, response, handler, ex);
}
//이렇게 세개의 메소드 생김
//pom.xml
<!-- Tiles 라이브러리 의존관계 등록 시작 -->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.8</version>
</dependency>
<!-- Tiles 라이브러리 의존관계 등록 끝 -->
메이븐 -> 프로젝트 업데이트
kr.or.ddit.controller.tiles 패키지 만든후 TilesSettingsController 클래스
만듬
/*
============= 부트 스트랩을 이용한 CRUD를 진행해봅시다 ! ================
# 페이지 모듈화를 위한 Tiles를 함께 사용하여 CRUD를 진행합니다.
1. Tiles란?
- 어떤 jsp를 템플릿으로 사용하고 템플릿의 각 영역을 어떤 내용으로 채울지에 대한 정보를 설정한다.
- 하나의 화면들을 만들다보면 공통적이고 반복적으로 생성해야하는 header, footer와 같은 영역들이 존재한다.
우리는 그러한 공통부들을 분리하여 반복적으로 컴포넌트들을 사용하는게 아닌 공통적인 부분은 한번만 가져다 쓰고
변화하는 부분에 대해서만 동적으로 변환해 페이지를 관리할수 있어야할것입니다.
이렇게 , header/footer/menu등 공통적인 소스를 분리하여 한 화면에서 동적으로 레이아웃을 한곳에 배치하여 설정하고
관리 할 수 있도록 도와주는 페이지 모듈화를 돕는 프레임워크이다.
- 아래 jsp를 이용하여 페이지 모듈화 진행
template.jsp
> header.jsp
> content source
> footer.jsp
** 그외 다양한 영역의 페이지는 구현하고자 하는 시나리오를 바탕으로 페이지가 구성될 때 추가적으로 레이아웃 영역을 분리하여
작성하면 됩니다
2. Tiles Layout 구현 설정
1) Tiles 의존 관계 등록
-titles-core
- titles-servlet
- titles-extras
- titles-jsp
**의존 관계 등록 후 Maven > Update Projects
*
*2) servlet-content.xml 수정
*- ViewResolver order 순서 2 순위로 지정
*- titlesViewResolver Bean 등록
*
*3) titles 설정위한 xml설정
* /WEB-INF/spring/tiles-config.xml
4)tiles xml 에 설정한 layout 설정대로 페이지생성(jsp)
*/
그다음
<!-- Tiles bean 등록 진행 : Tiles를 이용한 페이지 모듈화 -->
<beans:bean id="tilesViewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<beans:property name="viewClass"
value="org.springframework.web.servlet.view.tiles3.TilesView"/>
<beans:property name="order" value="1"/>
</beans:bean>
<beans:bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<beans:property name="definitions">
<beans:list>
<beans:value>/WEB-INF/spring/tiles-config.xml</beans:value>
</beans:list>
</beans:property>
</beans:bean>
<!-- Tiles를 이용한 페이지 설정 끝 -->
추가 해준다
tiles-config.xml에 저 한줄을 복붙하면 <tiles만 쳐도 태그 자동완성할수 있다.
create table notice( bo_no number(8) not null, bo_title varchar2(300) not null, bo_content varchar2(4000) not null, bo_writer varchar2(150) not null, bo_date date not null, bo_hit number(8) default 0 null, constraint pk_notice primary key(bo_no) );
create sequence seq_notice increment by 1 start with 1 nocache;
create table noticemember( mem_no number(8) not null, mem_id varchar2(100) not null, mem_pw VARCHAR2(100) not null, mem_name VARCHAR2(100) not null, mem_gender VARCHAR2(30) not null, mem_email VARCHAR2(150) not null, mem_phone VARCHAR2(150) not null, mem_postcode VARCHAR2(30) not null, mem_address1 VARCHAR2(300) not null, mem_address2 VARCHAR2(300) not null, mem_agree VARCHAR2(30) not null, mem_profileimg VARCHAR2(500) not null, mem_regdate date not null, enabled VARCHAR2(2) not null, CONSTRAINT pk_noticemember primary key(mem_no) );
create sequence seq_noticemember increment by 1 start with 1 nocache;
create table noticemember_auth( mem_no number(8) not null, auth varchar2(50) not null, constraint fk_noticemember_auth_mem_no foreign key(mem_no) references noticemember(mem_no) );
-- noticefile 테이블 만들기 create table noticefile( file_no number(8) not null, bo_no number(8) not null, file_name varchar2(500) not null, file_size number(20) not null, file_fancysize varchar2(100) not null, file_savepath varchar2(500) not null, file_downcount number(8) not null, constraint pk_noticefile primary key(file_no), CONSTRAINT fk_noticefile_bo_no foreign key(bo_no) references notice(bo_no) );
create sequence seq_noticefile increment by 1 start with 1 nocache;
//INoticeService.java
package kr.or.ddit.service;
import kr.or.ddit.ServiceResult;
import kr.or.ddit.vo.crud.NoticeVO;
public interface INoticeService {
public ServiceResult insertNotice(NoticeVO noticeVO);
public NoticeVO selectNotice(int boNo);
}
//NoticeServiceImpl
package kr.or.ddit.service.impl;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.ServiceResult;
import kr.or.ddit.mapper.INoticeMapper;
import kr.or.ddit.service.INoticeService;
import kr.or.ddit.vo.crud.NoticeVO;
@Service
public class NoticeServiceImpl implements INoticeService {
@Inject
private INoticeMapper noticeMapper;
@Override
public ServiceResult insertNotice(NoticeVO noticeVO) {
ServiceResult result = null;
int status = noticeMapper.insertNotice(noticeVO);
if(status > 0) { //등록 성공
result=ServiceResult.OK;
}else { //등록 실패
result = ServiceResult.FAILED;
}
return result;
}
@Override
public NoticeVO selectNotice(int boNo) {
noticeMapper.incrementHit(boNo);
return noticeMapper.selectNotice(boNo);
}
}
//INoticeMapper.java
package kr.or.ddit.mapper;
import kr.or.ddit.vo.crud.NoticeVO;
public interface INoticeMapper {
public int insertNotice(NoticeVO noticeVO);
public void incrementHit(int boNo);
public NoticeVO selectNotice(int boNo);
}
#홀짝
from random import random
def getHJ():
rnd = random()
if rnd > 0.5 :
return "홀"
else:
return "짝"
com=getHJ()
print("com", com)
#구구단
def showDan(dan):
for i in range(1, 9*1):
print("{}*{}={}", format(dan,i,dan*i))
showDan(8)
// python -> java
public class MyDef02 {
public static void main(String[] args) {
showDan(8);
}
public static void showDan(int dan) {
for (int i = 1; i <= 9; i++) {
System.out.println(dan + "*" + i + "=" + (dan * i));
}
}
}
#숫자맞추기 - 쌤풀이
from random import random
com = int(random()*99)+1
print("com : " , com)
flag_ans = False
for i in range(20):
mine = input("수를 맞춰보세요 : ")
imine = int(mine)
if com > imine:
print("{} up".format(mine))
elif com < imine:
print("{} down".format(mine))
else:
print("{} 정답".format(mine))
flag_ans= True
break
if not flag_ans:
print("똑바로 하세요")