1. ModelAndView


페이지를 보여주기 위해서는

ModelAndView를 사용하여 보여줄 수 있다.


 

@Autowired
BoardService service;

//목록
@RequestMapping(value = "/list.do")
public ModelAndView list(){
        System.out.println("BoardControll 호출");
        service.list();
        System.out.println("BoardControll 종료");
       
        ModelAndView mv = new ModelAndView();
        mv.setViewName("list");
       
        return mv;
}

ModelAndView mv = new ModelAndView();

mv.setViewName("list");


<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
                <value>/WEB-INF/pages/</value>
        </property>
        <property name="suffix">
                <value>.jsp</value>
        </property>
</bean>

이상은 ViewResolver라고 하고,

사용자가 지정되지 않은 방법을 통하여 접속하는 것을 막는, 보안적 이점을 가져다주는 방식이다.

상기 방식을 통하여 jsp로는 접속을 할 수 없게 한다.

이는 dispatcher-servlet에서 실행된다.

 

 

ModelAndView model = new ModelAndView("welcome");
model.addObject("msg", "Hello Spring MVC + Log4j");
return model;

<h2>${msg}</h2>

welcome페이지와 연결된 ModelAndView model을 만들고

model에 msg라는 키값을 가진 "Hello Spring MVC + Log4j"의 값을 삽입한다.

그 후 model값을 return 하여 아래 <h2>를 이용하여 출력할 수 있도록 한다.

결과값은 <h2>형식으로

"Hello Spring MVC + Log4j"

가 출력된다.


2. 인터페이스

 

인터페이스 클래스 구현 방법

interface package

interface class

 

implements package

implements class

 

의 방식이다.




팁.

전부 선택한 상태에서 Ctrl + i를 통하여 모든 문서의 들여쓰기를 재조정해주는 기능이 있다.


Ctrl + Shift + F는 이클립스에 등록된 포맷에 맞춰 문서를 재조정해주는 기능이 있다.


Ctrl + 1은 이클립스의 에러 해결용 툴


추상 클래스(abstract) = 구체화된 작업 지시서


인터페이스(interface) = 타이틀만 있는 작업지시서(밑그림 레벨)


Ctrl + Alt + ↓는 아래로 한줄 복사하는 기능입니다.


Ctrl + t

를 이용해 현재 상속받은 interface와 현재 작업중인 class를 볼 수있다.

해당 방식을 이용해서 메서드 구현위치로 갈 수 있다.


Ctrl + Alt + H

를 이용해 해당 메서드를 호출하여 사용한 곳으로 갈 수 있다.


mysql에서 select * from 테이블

은 테이블 우클릭 후 select rows로 가능하다.


Spring-Module.xml

등 특정 파일명을 블럭으로 잡고

Ctrl + Shift + R을 통하여, 해당 파일을 바로 열 수 있다


Generics

타입 안정성과 타입 체크 및 형변환을 생략할 수 있기에 사용.

ArrayList<integer> ar = new ArrayList<integer>();

상기 예시에서 <integer>가 제네릭이다.


disconnect하되 2개 항목중 위의항목을 이용하여 서버와 연결을 끊고.

자신의 서버와 연결하는 것으로 다운받은 자료 백업 가능.













'JAVA > JAVA 기본' 카테고리의 다른 글

Portfolio 스프링 프레임워크  (0) 2017.10.13
Portfolio Maven  (0) 2017.10.13
Portfolio 서블릿  (0) 2017.10.12
Portfolio 기반 구성 및 사용  (0) 2017.10.12
JAVA 서블릿  (0) 2017.10.12

http://www.mvnrepository.com/

에서

org.springframework

​산하 코드를 이용할 것이다.


spring-jdbc
spring-core
spring-webmvc
spring-web
spring-context

를 이용할 것이며


4.1.6.RELEASE

버전을 사용한다.

 

javax.servlet의

javax.servlet-api 3.1.0또한 이용할 것이다.


web.xml은 서블릿 관련 설정을 담당하며, dispatcher-servlet.xml을 불러와 Spring의 설정을 담당할 수 있다.

web.xml과 서블릿명-dispatcher-servlet.xml은 같은 위치에 있어야 자동으로 불러올 수 있다.



<servlet>

        <servlet-name>board-dispatcher</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

</servlet>

형식으로 작성하면

web.xml과 같은 위치에서

board-dispatcher-servlet.xml

을 자동으로 찾아서 가져오는 기능이 있다.

<servlet-name>값에 -servlet.xml을 추가하여 자동으로 가져온다.



이하 <!-- --> 를 통해 각주처리된 부분은, 예전에는 저렇게 사용하여야만 servlet.xml을 가져올 수 있었다. 

<servlet>
        <servlet-name>hello-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--
        <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>WEB-INF/hello-dispatcher.xml</param-value>
        </init-param>
         -->
        <load-on-startup>1</load-on-startup>
</servlet>

 

<servlet-mapping>
        <servlet-name>hello-dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
</servlet-mapping>

.do로 끝나면 Springdispatcher servlet으로 감.


dispatcher-servlet은

<context:component-scan base-package="com.shoon">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
을 통하여 각 클래스나 메소드의 @(annotation)을 검색하고, 이 검색된 부분에 각 기능별 beans를 부여해주는 기능을 가지고 있다.

이로써 클래스는 @Controller 등을 선언하는 것으로 bean을 불러오는것과 같은 기능을 사용할 수 있다.


@RequestMapping은

메소드 위에 들어가게 된다. 그 전문은 아래와 같다.

@RequestMapping(value = "/hello.do")

기본적으로

method = RequestMethod.GET

를 적었을 경우에는 GET방식만 받게 되므로 삭제하는 것을 추천함.

상기 기능을 포함한 리퀘스트매핑은 아래와 같다.

@RequestMapping(value = "/hello.do", method = RequestMethod.GET)


 

이하 스프링 프레임워크상의 기본적인 요청방식은 아래와 같다.

편의성을 위해 read.do를 이용한다.


1. 클라이언트가 원하는 기능을 선택함(read.do 주소값이 입력됨)


2. 해당 주소값을 받고 web.xml에서는

.do로 끝나는 url패턴이므로

<servlet-mapping>
        <servlet-name>hello-dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
</servlet-mapping>

에 따라

<servlet>
        <servlet-name>hello-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>

를 실행하여 servlet-class의 내용을 실행한다.

서블릿 클래스 springframework에 따라서

web.xml과 같은 위치에 있는 서블릿네임-servlet.xml을 실행하게 된다

 

3. hello-dispatcher-servlet.xml에서는

<context:component-scan base-package="com.mkyong" />

에 따라서

com.mkyoung에 있는 모든 @(annotation)을 검색한 후, 어노테이션에 해당하는 기능을 부여한다.

@Controller는 컨트롤러에 필요한 기능을

@Service에는 서비스에 필요한 기능을

@Repository에는 레포지토리에 필요한 기능을 부여해준다.

이 기능은 dispatcher-servlet의 beans에 기재되어 있다.

 

4. @Controller가 포함된 메서드 중

@RequestMapping(value = "/read.do")

가 선언된 메소드를 찾아 실행한다.

@Autowired

BoardService service;

@RequestMapping(value = "/read.do")
public ModelAndView read(){
        System.out.println("read 시작");
        service.read();
        System.out.println("read 종료");
       
        ModelAndView mv = new ModelAndView();
        mv.setViewName("read");
        return mv;
}

이후 Autowired된 BoardService service;에 따라

service.read();를 통해 5번으로 진행된다.


5. BoardService 인터페이스를 거쳐 BoardServiceImpl의 read메소드가 실행됨.

@Autowired
BoardDao dao;

@Override
public void read() {
        System.out.println("BoardServiceImp.list() 호출시작");
        dao.read();
        System.out.println("BoardServiceImp.list() 호출완료");
}

에 따라 dao.list();가 실행됨.


6. BoardDao 인터페이스를 거쳐 BoardDaoImpl의 list메소드가 실행됨.

@Repository

public class BoardDaoImpl implements BoardDao {

        @Override

        public void read() {

                // TODO Auto-generated method stub

                System.out.println("BoardDaoImp.read() 호출됨");

        }

}

까지 실행됨.

이로써 

Autowired는 Controller   -Autowired-   Service   -Autowired-   Repository(DAO)

가 성립함을 알 수 있다.



스프링 프레임워크상의 작업 순서도는

@Controller - @Service - @Repository순서로 진행된다.


@Controller는 service에 사용자로부터 받아들인 요청을 전달한다.

@Service로 정의된 클래스는, 스프링이 구동할 때 찾아서 해당 클래스의 interface를 읽어들인다.

해당 클래스와 interface는 메소드명과 반환형 등이 전부 같기에 가능하다.

@Repository는 DAO클래스에서 사용하며, service에서 넘어온 작업을 DB와 연동한다.



스프링의 가장 중요한 기능은

DI(의존관계주입)로써,

스프링에 자동으로 등록된 클래스(Controller, Service, Repository)는 실행시 자동으로 생성되고, 해당 기능을 당겨오는 것을 DI라고 한다.

@Autowired
BoardService service;

를 통하여 DI를 일으킬 수 있다.

BoardService는 인터페이스 클래스이다.


이하 Controller, Service, Repository에서 생성한 기능을 Autowired로 사용하는 방법이다.

Spring-파일명.xml

을 이용하여 등록 후 사용

생성

사용

<bean id="customerService" class="com.shoon.common.service.impl.CustomerServiceImpl">
        <property name="customerDao" ref="customerDao" />
</bean>

@Autowired를 이용하여 사용

@Autowired
CustomerService service;
<bean id="customerDao" class="com.shoon.common.dao.impl.CustomerDaoImpl">
        <property name="dataSource" ref="dataSource" />
</bean>

통상의 방법으로 사용

CustomerDao dao;

public void setCustomerDao(CustomerDao dao) {
        this.dao = dao;

}

bean을 @을 이용하여

Spring에 등록 후 사용

생성

사용

@Controller
public class CustomerController {
}

@Autowired를 이용하여 사용

@Autowired
BoardDao dao;

@Service
public class BoardServiceImpl implements BoardService {
}

통상의 방법 사용 불가능

단. bean id가 customerDao일때

통상의 방법으로 사용시 serCustomerDao의 식으로

앞에 set을 붙이고 카멜표기법으로 표기하여야 한다.



이하 내용은 스프링 2.x버전에서는 필히 사용하여야 하며,

4.x이상에서는 @controller / @service등을 이용하여 생략할 수 있다.

이하 방법을 '통상의 방법'으로 칭한다.

Datasource는 jdbc를 사용하기 위해서는 필히 등록해야 한다.

───────────────────────────────────────────────

 

resource폴더에

Spring_Module을 배치한다.

이후 resource폴더 내에 database와 beans폴더를 배치하고

database 에 Spring-Datasource.xml

beans 에 Spring-Beans.xml을 배치한다.

 

공통

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">

 

</beans>

이하의 내용은 상기 공통부분의 <beans>해당 부분</beans>에 입력된다.

 

Spring-Module

<import resource="database/Spring-Datasource.xml"/>
<import resource="beans/Spring-Beans.xml"/>

 

Spring-Datasource

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3307/sakila" />
        <property name="username" value="sakila" />
        <property name="password" value="sakila" />
</bean>

Spring-Beans

<bean id="customerDao" class="com.shoon.common.dao.impl.CustomerDaoImpl">
        <property name="dataSource" ref="dataSource" />
</bean>

<bean id="customerService" class="com.shoon.common.service.impl.CustomerServiceImpl">
        <property name="customerDao" ref="customerDao" />
</bean>

 

Spring-Module의 내용은

데이터베이스와 Beans의 파일을 연결시켜주는 값이기에, 폴더명/파일명의 식으로 데이터소스와 빈즈를 연동한다.

 

Spring-Datasource의 내용은

mysql과 연동시켜주는 값이기에

port값과 Schema명

계정명과 비밀번호를 변경하여야 한다.

상기 port값은 3307

상기 스키마명은 sakila

상기 계정명과 비밀번호는 sakila/sakila이다.

 

Spring-Beans의 내용은

Repository(첫번째 내용)는

dataSource라는 프로퍼티값을 부여하고, 해당 내용을 사용하게끔 하여

CustomerDaoImpl클래스가 DB와 연결되도록 한다.

이는 @Repository의 기능이다.

Service(두번째 내용)는

customerDao라는 프로퍼티값을 부여하고 해당 내용을 Autowired로 받아

customerServiceImpl클래스가 프로퍼티값인 customerDao와 연결되도록 한다.

이는 @Service의 기능이다.

 

덧붙여서 @Controller는 dispatcher-servlet에서 상기 연결기능을 담당한다.

그리고 Controller는 사용하지 않을 경우 해당 클래스 자체가 존재하지 않는다.

 

───────────────────────────────────────────────



RowMapper

는 스프링에서 지원하는 인터페이스이며,

rs(ResultSet)을 받아서 처리하여 주는 메소드이다.

public class BoardRowMapper implements RowMapper
{
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
                Board board = new Board();
                board.setNo(rs.getInt("no"));
                board.setName(rs.getString("NAME"));
                board.setPassword(rs.getString("password"));
                board.setTitle(rs.getString("title"));
                board.setContent(rs.getString("content"));
                board.setReadCnt(rs.getInt("read_cnt"));
                board.setCreateDate(rs.getTimestamp("create_date"));
                board.setUpdateDate(rs.getDate("update_date"));
                return board;
        }
}

 

 

new BeanPropertyRowMapper(Board.class));

상기 빈프로퍼티 로우매퍼는 DTO클래스를 받아서(상기 예시는 Board라는 DTO클래스를 사용함)

변수명을 받아 컬럼값을 찾음.

no일경우 no컬럼을 찾으며

readAll일 경우 read_all의 컬럼을 찾음.

public Board findByBoardId2(int no){
        String sql = "SELECT * FROM board WHERE no =  ?";
        Board board = (Board)getJdbcTemplate().queryForObject(
                        sql, new Object[] { no },
                        new BeanPropertyRowMapper(Board.class));
        return board;
}

 

 

 

 

Spring설정이 너무 길어지기에

servlet xml의 설정보다 많아져 가독성이나 주/부가 바뀌는 현상으로 인하여

Spring의 설정을 저장한 파일을 web.xml에서 불러올 수 있도록 묶어줌.

아래와 같은 방식으로 해당 설정파일을 불러올 수 있음.

web.xml의 display-name의 밑에 아래와 같이 사용한다.

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:/**/Spring*.xml
        </param-value>
</context-param>

 

Spring-파일명.xml등록법 사용시 사용법

<bean id="아이디값c" class="패키지.클래스">

        <property name="프로퍼티명a" ref="레퍼런스값b" />

</bean>

일때

a라는 프로퍼티명을 가진 레퍼런스값b의 value를 아이디값c로 불러서 쓸 수 있다.

JdbcDaoSupport를 extends 하여 사용할 경우 datasource를 final로 선언하여 두었기에 사용자가 추가로 선언할 수 없으며, 선언할 필요도 없다.

 









'JAVA > JAVA 기본' 카테고리의 다른 글

portfolio 스프링 프레임워크 사용  (0) 2017.10.18
Portfolio Maven  (0) 2017.10.13
Portfolio 서블릿  (0) 2017.10.12
Portfolio 기반 구성 및 사용  (0) 2017.10.12
JAVA 서블릿  (0) 2017.10.12

maven플러그인

1. 라이브러리의 관리를위해 이용함

2. 웹 어플리케이션의 배포를 도움 

 

프로젝트 우클릭 - configure - conver to maven project

 

그룹 아이디 = 라이브러리를 관리할 이름

아티펙트 아이디 = 배포를 위해 참고할 이름

버전 - 버전을 기록하는 것. 실제 배포할때는 1.0.0이후로 사용하는것이 좋음

패키징 - war를 그대로 이용

 

라이브러리를 관리하기 위해서는 maven의 pom.xml에 들어가서 사용함.

http://www.mvnrepository.com/

에 들어가 원하는 라이브러리를 검색 후, 원하는 버전을 선택하고, Maven항목을 복사함.

이후 복사한 자료를 pom.xml에 붙여넣는 것으로 라이브러리가 추가됨.

Maven에서 ${}는 pom.xml에 상기된 properties를 참고함.

pom.xml을 수정한 프로젝트 우클릭 - Alt+F5

단. Alt+F5에 해당 프로젝트가 나오지 않는다면, Maven프로젝트가 아닌 것이므로,

프로젝트 우클릭 - configure - conver to maven project

를 실행한 후 다시 해볼 것.

상기 방식으로 maven을 이용하여 라이브러리를 받을 수 있다.

 

logger의 사용

final static Logger logger = Logger.getLogger(현재클래스명.class);

 

팁. Shift + Alt + X

로 프로그램 임시 구동창을 띄울 수 있으며

j를 눌러서 이클립스 내부 실행이 가능하다.

 

log4j.properties 사용법

# Root logger option
log4j.rootLogger=ERROR, stdout

 

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

 

# Rirect log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

를 resources폴더에 넣고 참고하여 구동함.

아래의 두 단은 건드릴 일이 거의 없으며, 첫단 두줄의 경우 변경할 경우가 있음.

첫단

log4j.rootLogger=ERROR, 콘솔명

두번째 단

log4j.appender.콘솔명=org.apache.log4j.ConsoleAppender

의 방식으로 파일을 수정할 경우가 있음.

log4j.rootLogger=ERROR, stdout, file

이 될 시, 콘솔과 파일로 동시에 출력함.

stdout이 콘솔명이기에 콘솔에서 출력함.

rootLogger값을 ERROR로 하면 error와 fatal이 출력되고

rootLogger값을 INFO로 하면 info, warn, error, fatal이 전부 출력된다.

이 순서는

debug > info > warn > error > fatal

순으로 적용된다.

 

팁.

실제 서비스에서는 warning이나 error를 이용한다.

debug나 info는 너무 많은 로그를 남기기 때문이다.

 

단축키

Shift + Alt + R

클래스 내 해당 변수명을 동시에 전부 변경

Ctrl + Shift + R

프로젝트 내 해당 파일을 찾는 기능

Ctrl + PageUp

Ctrl + PageDown

이클립스 내 탭 간 이동 

Ctrl + W

파일 닫기

 

메이븐이 라이브러리를 자동으로 다운받는 위치

C:\Users\Administrator\.m2\repository

보통 관리자 목록으로 다운받아지게 됨.

업데이트 메이븐 이후에도 프로젝트가 진행되지 않을 경우

이클립스를 종료 후 repository를 통째로 지워버린 후 다시 업데이트 메이븐을 진행


'JAVA > JAVA 기본' 카테고리의 다른 글

portfolio 스프링 프레임워크 사용  (0) 2017.10.18
Portfolio 스프링 프레임워크  (0) 2017.10.13
Portfolio 서블릿  (0) 2017.10.12
Portfolio 기반 구성 및 사용  (0) 2017.10.12
JAVA 서블릿  (0) 2017.10.12

톰캣 무설치버전 설정

window - preferences - server - runtime environments - add - apache tomcat 8.5 선택 후 확인

 

다이나믹 웹 프로젝트 - 프로젝트명 설정 - next - add folder - resource-local폴더 생성(환경설정 관련 파일이 들어갈 폴더)

 

context root는

www.naver.com/test

의 test부분이 context root이다.

 

content direcrory는 사용자에게는 보여주지 않을 내부 파일들의 위치이다.

 

웹 프로젝트의 src부분은

사용자가 볼 수 없는 부분이며, 가장 기반적인 구성(건축물의 철근, 기둥 등의 구조적 기능을 가짐)

 

웹 컨텐츠 부분은

사용자가 직접 다루는 부분이며, 시각화 등의 구성(건축물의 인테리어 등, 심미적 기능을 가짐)

 

웹 컨텐츠의 web.xml은

웹 프로젝트가 로딩될 때의 환경설정을 담당하는 부분(건축물의 건축물대장)

프로그램을 어떻게 기동해야 할 지를 담당하고 있다.

 

다이나믹 웹 모듈

동적인 웹 페이지를 제작하기 위한 모듈로써,

servlet api(Appication Programming Interface)를 뜻한다.

동적인 웹 페이지를 제작하기 위해 미리 제작된 최소단위의 코드들을 의미한다.

api는 공구와도 같은 기능을 하며, servlet api는 동적인 웹 페이지를 구현하기 위한 더욱 고급단계의 공구 역할을 한다고 요약할 수 있을 듯 하다.


MVC모델 2



컨트롤러는 사용자의 요청을 받아서 모델에 전달할 수 있다.

모델은 컨트롤러가 보낸 요청을 처리한다.

모델은 service와 DAO로 나뉜다.

일반적으로 컨트롤러 - 서비스 - DAO는 묶여서 다닌다.

이하 부분별의 역할이다.

 

클라이언트 : A라는 자료의 처리를 부탁합니다.

컨트롤러 : A라는 자료를 이렇게 처리해라

서비스 : A라는 자료를 처리함

DAO : 처리된 자료를 DB에 수납 후 서비스에 자료가 수납됨을 알림

서비스 : 자료가 수납됨을 컨트롤러에 알림

컨트롤러 : 클라이언트에게 자료가 처리됨을 알림

 

팁. 클래스 파일 이름은 컬럼명과 같게 하시오.

'JAVA > JAVA 기본' 카테고리의 다른 글

Portfolio 스프링 프레임워크  (0) 2017.10.13
Portfolio Maven  (0) 2017.10.13
Portfolio 기반 구성 및 사용  (0) 2017.10.12
JAVA 서블릿  (0) 2017.10.12
bootstrap  (0) 2017.10.12

포트폴리오를 구성하기 위한 기반조건으로는

1. jdk 1.8

2. tomcat 8.5

3. mysql(installer, workbench)

4. putty(puttygen 포함)

5. filezilla client

가 사전에 준비되어야 한다. 


덧. enthea는 개인적으로 사용한 id값의 통일이므로, 추후 재사용되거나, 다른 경우에는 상황에 따라 올바른 값을 사용하여야 한다.


아마존 웹 서비스 이용

1. 아마존 웹 서비스에 가입한다

2. EC2에 진입한다. 이는 가상공간의 서버를 사용하는 서비스이다.

3. 인스턴스 생성 - 인스턴스 시작

4. ubuntu를 선택한다

5. 프리 티어 사용이 가능한 과금정책을 이용한다. 기본적으로는 무료로 사용할 수 있다.

6. 다음 페이지로 넘어와 의도하지 않은 종료로부터 보호를 체크한 후 다음 페이지로 넘어간다.

7. 스토리지 추가 페이지를 확인한 후 다음 페이지로

8. 태그는 인스턴스를 쉽게 구별할 수 있도록 기록한다. 

9. 보안 그룹은 추후에 필요할때 구성할 것.

10. 이로써 웹 서비스의 서버가 구성되었다.

11. 새 키 페어 선택을 하고 키페어를 생성한다. 이 키 파일은 잃어버릴 경우 서버를 재구성해야 한다.

12. 이로써 웹 서비스의 서버의 구성 및 시작이 완료되었다.

13. 좌측 인스턴스 탭을 눌러 연결버튼을 클릭한다.

14. 퍼블릭 DNS를 이용하여 인스턴스에 연결에 표시된 주소를 복사 및 기억한다.

ec2-52-14-216-119.us-east-2.compute.amazonaws.com


15. puttygen을 실행하여 11에서 생성된 키 페어를 load한다.

16. 키를 save private key 하여 ppk로 저장한다.


17. putty를 켜서 hostname에 

ubuntu@ec2-52-14-216-119.us-east-2.compute.amazonaws.com

라고 입력한다.

SSH - Auth 탭 마지막의 private key file for authentication에 browse 하여 16에서 만든 ppk파일로 설정한다.

그 후 save 하여 설정을 저장한다.

이후 저장된 session을 더블클릭하는것으로 접속할 수 있다.


18. 이후 apt-cache search svn을 입력하여 svn 패키지를 검색한다.

19. sudo apt-get install subversion을 하고 y를 입력해 svn 패키지를 설치한다.


20. mkdir svn 을 하여 svn 폴더를 생성하고 ls를 이용해 svn 폴더가 생성되었는지를 확인한다.

21. 

sudo groupadd dev

sudo usermod -a -G dev ubuntu

를 하여 dev 그룹을 만들고 계정 ubuntu를 dev에 포함시킨다

그 후 cd svn 하여 svn폴더로 이동한다.

pwd를 통해 자신의 위치가 svn인지 확인한다.


22.

mkdir portfolio

를 통해 포트폴리오 폴더를 만든다.

sudo chown -R ubuntu:dev portfolio

sudo chmod -R g+rws portfolio

를 하여 권한을 부여하고 폴더를 재설정한다.


23. 

sudo svnadmin create --fs-type fsfs /home/ubuntu/svn/portfolio

를 통하여 svn저장소를 파일시스템으로 생성한다.


24. cd를 이용하여 home/ubuntu/svn/portfolio/conf 로 이동한다.

sudo chown ubuntu authz

sudo chown ubuntu passwd

를 하여 authz폴더와 passwd폴더를 ubuntu계정으로 소유권을 변경한다.


25.

vi authz를 하여 authz를 편집한다.

authz 중

groups의 빈공간에 dev = enthea

맨 마지막에

[/]

@dev = rw

를 추가한다.

enthea는 자신이 설정한 id이다.


26.

passwd를 편집한다.

빈 공간에

enthea = 비밀번호

를 입력한다.

enthea는 자신이 설정한 id이다.


27. vi svnserve.conf하여 진입한다.

password-db = passwd

authz-db = authz

의 주석을 해제하여 읽어들일 수 있게 한다.


팁. vi로 권한이 부족해 변경이 불가능하다면 sudo vi로 변경할 수 있다.


28. svnserve -d -r /home/ubuntu/svn

을 입력하여 svn을 기동한다.

실행이 되지 않는다면 ll을 눌러(소문자 LL) 포트폴리오 폴더의 파일리스트를 확인한다.

db의 권한이 root에 있다면

sudo chown -R ubuntu db

를 하여 우분투 계정에 권한을 부여한다.


29.

svn mkdir -m 'test' --username enthea svn://localhost:3690/portfolio/trunk

를 입력하여 trunk를 밀어넣는다.

svn ls --username enthea svn://localhost:3690/portfolio

를 통하여 확인


svn 데몬 실행

svnserve -d -r /home/ubuntu/svn

svn 데몬 종료

killall svnserve


30. sudo apt-get install nmap을 입력하여 포트확인 패키지를 설치한다.

이후 nmap localhost를 입력하여 현재 서비스중인 포트를 확인한다.



31. 이제 방화벽 설정을 위해 아마존 웹 서비스의 보안 그룹을 선택한다.

default값이 아닌 '다른'(런치 위자드, 마이 시큐리티 그룹) 보안그룹을 선택하고 

인바운드 - 편집 - 규칙 추가 - 포트레인지 3690 - 소스는 위치무관으로 정한다.



32. 이클립스에서 - 헬프 - 이클립스 마켓플레이스 - svn 검색

svn team provider를

설치한다.


33. window - preferences - team - svn - svn connector

에 제대로 적용되었는지 확인한다.


34. window - show view - other - svn - svn repositories

를 통하여 하단에 svn repositories를 추가

해당탭 new repositories location을 선택

URL에 아마존 URL을 입력

svn://과 포트를 추가

svn://ec2-52-14-216-119.us-east-2.compute.amazonaws.com:3690/portfolio

의 형태가 됨.

브라우즈를 눌러 연결됨을 확인하고 캔슬 후 finish


35. 이클립스 하단에 추가된 SVN Respositories의 오른쪽에 New Repository Location을 눌러 사용할 로케이션을 추가한다.

URL값으로

svn://ec2-52-14-216-119.us-east-2.compute.amazonaws.com:3690/portfolio

Authentication 에 아이디(enthea)와 비밀번호를 입력한 후 browse하여 시험한다.

이후 finish하여 추가한다.


36. 원하는 프로젝트를 웹 서버에 업로드하려면

원하는 프로젝트 - 우클릭 - team - share project - svn - next - 브라우즈 - 원하는 폴더 클릭 - 맨 뒤에 프로젝트명 추가(/프로젝트명) - ok

portfolio/java의 뒤에 원하는 프로젝트명을 추가

portfolio/java/원하는프로젝트명

이후 next에 comment창에 자신이 한 행동을 적고 finish

상기 행동으로 업로드 완료


37. 프로젝트 다운로드

java(사전에 저장된 폴더)에 들어가 원하는 프로젝트를 우클릭 후 checkout하여 다운로드



mysql의 서버 설치

38. sudo apt-cache search mysql

로 패키지를 찾고

sudo apt-get install mysql-server-5.7

을 설치

 

mysql -u root -p

를 통해 mysql로 접속

 

connect mysql;

을 통해 mysql에 연결

 

grant all privileges on *.*

to root@"%" identified by 'admin'

with grant option;

을 통하여 권한 부여

상기 admin은 임의적으로 지정된 비밀번호이다.

 

flush privileges;

로 권한부여를 마친다.

 

select user, host from user where user = 'root';

를 통하여 권한부여가 제대로 되었는지

(%가 부여되어 있는지)를 확인한다.

 

etc/mysql로 이동하여

 

sudo vi mysql.conf.d

를 입력하여 mysql의 설정파일을 관리자 권한으로 진입한다.

 

그 후 해당 폴더 내의 mysql.cnf에 커서를 맞추고 enter하여 진입한다.

 

입력모드로 변경하지 않고

/bind-address

를 입력하여 검색한다.

그 후, bind-address를 #을 입력하여 주석처리하여, 모든 컴퓨터에서 바인딩을 할 수 있도록 처리한다.

 

39. 아마존 웹 서비스에서

보안 그룹 - 인바운드 - 편집 - 규칙 추가

포트범위 3306에 위치 무관을 부여한다.

 

40. mysql을 제어하는 법

 

sudo service mysql stop | start | restart

를 하여 정지 | 시작 | 재시작을 선택할 수 있다.

 

팁. 

Authentication is required to stop 'mysql.service'.
Authenticating as: Ubuntu (ubuntu)
의 오류는 sudo를 붙이지 않았을 경우, ubuntu계정으로 mysql을 제어하려 했을 때, 권한 문제로 인해 발생하는 오류이다.


41. mysql에서 커넥션(원각+버튼) 을 눌러 아마존 웹 서비스를 추가한다.

Hostname의 값을 상기

ec2-52-14-216-119.us-east-2.compute.amazonaws.com

주소값으로 변경한 후, test connection을 하여 테스트하여 본다.

테스트에서 성공할 경우 ok를 눌러 등록하여 준다.


42. 모델링 한 모델을 database - Forward Engineer 를 통하여 stored connection에 위에서 등록한 커넥션을 선택하고 업로드한다.

이후 업로드가 되었는지 확인하는 방법은

커넥션 탭에서 등록한 커넥션에 들어간 후, 네비게이터의 schemas에 mydb - Tables에 업로드한 모델이 있는지 확인하면 된다.

 

팁. 

자바의 객체명은 javaMethod의 방식으로 단어의 첫 글자를 대문자로 표기하는데

sql에서의 컬럼명은 sql_column으로 언더바를 이용하여 표기함.

sql의 not null제약조건은 사용자에게 항상 입력받아야 할 때 사용한다.


팁. 

5개의 게시판이 있을 때, 각 게시판에 attach_file1, attach_file2의 컬럼이 존재한다.

여러 개의 게시판에 같은 컬럼이 존재하기에, 같은 컬럼은 별도의 테이블로 분리할 수 있다.

그 후 분리할 때에 게시판마다 구분값을 하나씩 부여한다.

유저에게 관리자 권한을 부여하는 방법은

모든 유저에게 is_admin CHAR(1) 를 부여하고

기본값을 n으로 놓고, 관리자 권한을 부여할 사람에게 y값을 부여하여 처리하면 좋다.



43. mysql의 커넥션 탭에서

sql사용자 생성

네비게이터의 User and privileges

계정명과 패스워드를 부여한 후 Administrative Roles 에서 권한을 부여(DBManager나 DBA등)

DBA선택시 모든 권한 부여

Scheme privileges에서 사용자별로 데이터베이스를 지정해 줄 수 있음.

add entry에서 원하는 데이터베이스를 지정한 후, 하단의 옵션들 중 부여할 옵션을 체크한다.

select all을 클릭하면 모든 옵션이 부여되나, grant option은 제외된다.

이후 apply를 눌러 저장한다.


44. 서버대 서버 자료 밀어넣기

foward는 모델링된 자료를 밀어넣는 역할을 하며

schema transfer wizard는 서버대 서버로써 자료를 밀어넣는 역할을 한다.

소스 커넥션을 넘겨줄 서버로 잡고

타겟 커넥션으로 밀어넣게 된다.

그 후, 내보낼 데이터베이스를 선택하고 받을 데이터베이스를 선택한다.

원하는 폴더를 선택한 후 내보낸다.



'JAVA > JAVA 기본' 카테고리의 다른 글

Portfolio Maven  (0) 2017.10.13
Portfolio 서블릿  (0) 2017.10.12
JAVA 서블릿  (0) 2017.10.12
bootstrap  (0) 2017.10.12
JAVA 암호화  (0) 2017.10.11

서블릿

다이나믹 웹 프로젝트의 자바 리소스에

서블릿 파일 생성

 

서버가 클라이언트에게 보낼 데이터 - 리스폰스 - 서버가 클라이언트에게 '응답'

클라이언트가 서버에게 보낼 데이터 - 리퀘스트 - 클라이언트가 서버에게 '요청'

 

@WebServlet("맵핑값")

의 맵핑값은 '애칭'의 역할이며, 보안을 위해서 클래스값이 아닌 맵핑값으로 접근.

 

servers - server.xml

URIEncoding="euc-kr"

로 변경

 

웹 콘텐츠의 web.xml의 </web-app>위에

<servlet>
   <servlet-name>msc1</servlet-name>
   <servlet-class>com.naver.MyServlet1</servlet-class>
</servlet> 

<servlet-mapping>
   <servlet-name>msc1</servlet-name>
   <url-pattern>/my1</url-pattern>
</servlet-mapping>

를 입력.

url창에서 /my1이 입력되면 msc1을 찾아감.

msc1의 이름을 가진 서블릿을 찾고

그 안의 서블릿 클래스 com.naver.MyServlet1을 실행함.

 

response.setContentType("text/html;charset=euc-kr");

를 통하여 한글을 지원할 수 있음.

단.

PrintWriter out= response.getWriter();

이전에 사용하여야 함.

 

이하 사용 예시

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("euc-kr");
        response.setContentType("text/html;charset=euc-kr");
       
       
        String name = request.getParameter("name");
        String addr = request.getParameter("addr");
        System.out.println(name);
        System.out.println(addr);
       
        PrintWriter out= response.getWriter();
       
        out.println("<html>");
        out.println("<body>");
       
        out.println(name);
        out.println(addr);
        out.print("안녕하세요");
        out.println("hello");
        out.println("world");
        out.println("!!!");
       
        out.println("</body>");
        out.println("</html>");
}

상기 코드는 post형식일때 사용함.

 

페이지에서 아래와 같이 입력받고

<form action="my4" method="post">
        <input name="name" type="text" placeholder="이름을 입력하세요">
        <input name="addr" type="text" placeholder="주소를 입력하세요">
        <input type="submit">
</form>

 

서버에서 아래와 같이 돌려받음

String name = request.getParameter("name");
String addr = request.getParameter("addr");

 

체크박스 구현 및 돌려받기

request.setCharacterEncoding("euc-kr");
response.setContentType("text/html;charset=euc-kr");

PrintWriter out = response.getWriter();


out.println("<html>");
out.println("<body>");

String[] hobby = request.getParameterValues("hobby");
for(int i = 0; i < hobby.length; i++) {
        out.println(hobby[i]);
        out.println("<br>");
}

out.println("</body>");
out.println("</html>");

<form action="my5" method="get">
        <input type="checkbox" name="hobby" value="축구" checked="checked" >축구
        <br>
        <input type="checkbox" name="hobby" value="농구">농구
        <br>
        <input type="checkbox" name="hobby" value="배구">배구
        <br>
        <input type="checkbox" name="hobby" value="야구">야구
        <br>
        <input type="submit" value="취미 선택">
</form>

 

DTO클래스를 받아오는 법(자주 사용되지 않음)

MemberDTO dto = new MemberDTO();

PrintWriter out = response.getWriter();

Enumeration<String> e = request.getParameterNames();
while(e.hasMoreElements()) {
        String pn = e.nextElement();
        String val = request.getParameter(pn);
        System.out.println(pn+":"+val);
        out.println(pn+":"+val);
        out.println("<br>");
}

 

DTO클래스를 받아오는 법(실전형)은 전부 하나하나 받아와 dto에 집어넣는 방법을 사용.

 

파라미터 서블릿

<servlet>
        <servlet-name>msc1</servlet-name>
        <servlet-class>com.naver.MyServlet1</servlet-class>
        <init-param>
                <param-name>id</param-name>
                <param-value>joeun</param-value>
        </init-param>
        <init-param>
                <param-name>pw</param-name>
                <param-value>1234</param-value>
        </init-param>
</servlet>

<servlet-mapping>
        <servlet-name>msc1</servlet-name>
        <url-pattern>/my1</url-pattern>
</servlet-mapping>

init = 초기화 파라미터

을 선언하여 MyServlet1에서 파라미터 2개를 사용할 수 있도록 함.

String id = getInitParameter("id");
String pw = getInitParameter("pw");

의 방식으로 받아다 쓸 수 있음.

 

 

모든 서블릿에서 쓸 수 있는 파라미터 작성

<context-param>
        <param-name>url</param-name>
        <param-value>jdbc:oracle:thin:@localhost:xe</param-value>
</context-param>

ServletContext ctx = getServletContext();
  
String url = ctx.getInitParameter("url");
String user = ctx.getInitParameter("user");
 
System.out.println(url);
System.out.println(user);

 

내장객체

out

request

response

application(=context)

session

page

pageContext

config

exception

 

내장객체 중 영역객체

ㄴscope를 가지고 데이터를 저장/획득

​page - 현재 페이지

request - 같은 요청

session - 같은 브라우저

application(context) - 전체

 

setAttribute() - 컨텍스트 값 투입

getAttribute() - 컨텍스트 값 불러옴

 

컨텍스트

application.setAttribute("name", "kim");
application.setAttribute("sb", new StringBuffer("hello"));

String name = (String)application.getAttribute("name");
StringBuffer sb = (StringBuffer)application.getAttribute("sb");

상기와 같이 투입하고, 아래와 같이 투입된 자료를 불러올 수 있음.

 

컨텍스트로 파일을 읽어오는 법

ServletContext application = getServletContext();

InputStream in = application.getResourceAsStream("/WEB-INF/test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(in));

while(true) {
        String str = br.readLine();
        if(str == null) break;
        System.out.println(str);
}

 

컨텍스트 리스너

ㄴ 웹 어플리케이션의 생명 주기를 감시할 때

ㄴ 웹 어플리케이션이 서버에 올라갈 때

ㄴ 웹 어플리케이션이 서버에서 제거될 때

 

@WebListener
public class MyServletContextListenerImpl implements ServletContextListener {

        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println("웹어플리케이션 제거");
        }

        @Override
        public void contextInitialized(ServletContextEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println("웹어플리케이션 초기화");
        }

}

를 통하여 서버가 켜질때, 꺼질때 상기 내용의 실행이 가능하도록 함.

 

필터

ㄴ javax.servlet의 filter를 implements해야 함.

클라이언트

요청

필터

요청

서버

응답

응답

 

필터가 2개일 시

클라이언트

필터1

필터2

서버

요청

요청

응답

응답

①②③④

의 순서대로 적용됨

 

요청시(리퀘스트)

chain.doFilter(req, res);

응답시(리스폰스)

 

chain앞에는 리퀘스트, 뒤는 리스폰스이며,

한글 지원은 리퀘스트에 전부 위치해야 함.

 

필터의 사용

 

<filter>
        <filter-name>f1</filter-name>
        <filter-class>com.naver.MyFilter1</filter-class>
</filter>
<filter-mapping>
        <filter-name>f1</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>


public class MyFilter1 implements Filter {

        @Override
        public void destroy() {
                // TODO Auto-generated method stub
               
        }

        @Override
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
                        throws IOException, ServletException {
                // TODO Auto-generated method stub
                chain.doFilter(req, res);
        }

        @Override
        public void init(FilterConfig arg0) throws ServletException {
                // TODO Auto-generated method stub
               
        }

}

상기와 같이 기본적으로 필터를 사용하도록 준비해 놓음

 

<filter>
        <filter-name>f1</filter-name>
        <filter-class>com.naver.MyFilter1</filter-class>
</filter>
<filter-mapping>
        <filter-name>f1</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>
 
<filter>
        <filter-name>f2</filter-name>
        <filter-class>com.naver.MyFilter2</filter-class>
</filter>
<filter-mapping>
        <filter-name>f2</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

의 구조가 되면

자동적으로

f1요청 - f2요청 - f2응답 - f1응답

의 순서로 적용됨

필터 매핑의 순서대로 적용됨

 

soap패턴 : 확장자형 url패턴(.jsp 등을 이용할 때)

restful패턴 : /위주로 되어있는 url패턴

 

url패턴

ㄴ / : 디렉토리 url패턴

ㄴ *. : 확장자형 url패턴

 

servers의 context에

<Resource
        name="jdbc/oracle11g"
        auth="Container"
        type="javax.sql.DataSource"
        maxActive="4"
        maxWait="5000"
        username="joeun"
        password="joeun"
        driverClassName="oracle.jdbc.driver.OracleDriver"
        url="jdbc:oracle:thin:@localhost:1521:xe"
/>

 

커넥션 풀

MemberDAO클래스에 아래와 같이 선언하여 conn의 drivermanager를 대체하여 사용함.

public class MemberDAO2 {
        private DataSource dataFactory;

        public MemberDAO2() {
                try {
                        Context ctx = new InitialContext();
                        dataFactory = (DataSource) ctx.lookup("java:comp/env/jdbc/oracle11g");
                } catch (NamingException e) {
                        e.printStackTrace();
                }
        }
}

 

conn=dataFactory.getConnection();

를 사용하여 작업을 할 수 있게 함.

 

Forward

dispatcher : request

ㄴ 디스패처포워딩의 경우 requset와 response를 넘겨주기에, 같은 리퀘스트와 리스폰스를 공유하여 사용하게 됨.

redirect : response

 

dispatcher forwarding

클라이언트

a.jsp요청

a.jsp

 

디스패처 포워딩

응답

b.jsp

 

redirect forwarding

클라이언트

a.jsp 요청

a.jsp

리다이렉트 포워딩

b.jsp를 요청할 것을 응답

b.jsp 요청

b.jsp

리다이렉트 포워딩

c.jsp를 요청할 것을 응답

c.jsp 요청

c.jsp

 

 

디스패처 포워딩 실제 사용

이하 my1의 doget메서드

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("==========my1==========");
        RequestDispatcher dis = request.getRequestDispatcher("my2");
        dis.forward(request, response);
}

이하 my2의 doget메서드

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("==========my2==========");
        int val = (int)request.getAttribute("key");
        System.out.println(val);
}

my1의 페이지에 그대로 남아, my2의 내용을 불러와서 사용함

 

리다이렉트 포워딩 실제 사용

​이하 my3의 doget메서드

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("==========my3==========");
        response.sendRedirect("my4");
        System.out.println("2222222222");
}

이하 my4의 doget메서드

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("==========my4==========");
}

my3페이지를 전부 출력한 후, my4페이지로 이동하여 my4의 기능을 수행함.

my3에서 request한 데이터는 my4에서 사용할 수 없음.

 

프론트컨트롤

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String uri = request.getRequestURI();
        System.out.println(uri);
        String path = request.getContextPath();
        System.out.println(path);
       
        String what = uri.substring(path.length());
        System.out.println(what);
       
        if(what.equalsIgnoreCase("/insert.do")) {
                String ssn = request.getParameter("ssn");
                String name = request.getParameter("name");
                String sAge = request.getParameter("age");
                int age = Integer.valueOf(sAge);
                MemberDAO dao = new MemberDAO();
                dao.insert(new Member(ssn, name, age));
        }else if(what.equalsIgnoreCase("/selectBySsn.do")) {
                String ssn = request.getParameter("ssn");
                MemberDAO dao = new MemberDAO();
                Member m = dao.selectBySsn("ssn");
                request.setAttribute("m", m);
        }
}

 

포워딩 사용

RequestDispatcher dis = request.getRequestDispatcher("a.jsp");
dis.forward(request, response);

등을 이용하여 특정 jsp파일을 열도록 포워딩이 가능함.

 

포워딩을 실제로 사용할 때.

포워딩용 클래스 및 메소드를 만들어 사용함.

 

커맨드액션

private boolean isRedirect;
private String path;

로 이루어진 클래스(생성자, 겟/셋메서드 포함)를 만듬.

 

프론트서블릿에

CommandAction action = null;을 선언

if(action.isRedirect()) {
        response.sendRedirect(action.getPath());

} else {
        RequestDispatcher dis = request.getRequestDispatcher(action.getPath());
        dis.forward(request, response);
}

if문을 통해 값이 true일때는 리스폰스/리다이렉트를 통하여 작동

false일때는 리퀘스트/디스패처를 통하여 작동

 

프론트서블릿 중 insertCommand를 사용할 때 기준으로 아래와같이 선언

InsertCommand com = new InsertCommand();
action = com.execute(request, response);

 

insertCommand를 return 값을 가지게끔 함. 리턴값을 아래와 같이 함.

return new CommandAction(true, "selectBySsn.do?ssn="+ssn); 등을 리턴해줌

(리다이렉트, 디스패처를 선택하도록하는 boolean값, 쿼리문)

 

session tracking(세션 관리)

 

HttpSession session = request.getSession();

위 값은 true와 같음.

true일때는 세션이 없으면 만들고, 있다면 넘겨달라는 의미

ㄴ 로그인 상황

HttpSession session = request.getSession(false);

false일때는 세션이 없다면 null을 반환하고, 있다면 넘겨달라는 의미.

ㄴ 로그인 후 로딩상황

영역객체

page

request

session

application

 

if(session != null) session.invalidate(false);

세션을 삭제하는 명령어

 

session.setAttribute("id", id);
session.setAttribute("pw", pw);

세션에서 id와 pw를 받아오는 명령어

 

session.setMaxInactiveInterval(10);

를 통하여 10초간 세션을 지속시킬 수 있음.

단위는 '초'

 

web.xml

<session-config>

<session-timeout>15</session-timeout>
<session-config>

를 통하여 15'분'간 세션을 지속시킬 수 있음.

 

클라이언트

쿠키

 

서버

세션

 

 

쿠키

 쿠키 생성

Cookie[] cookies = request.getCookies();
Cookie c = null;
if(cookies == null || cookies.length == 0) {
        c = new Cookie("id", "teacheryo");
} else {
        c = new Cookie("id"+(cookies.length), "teacheryo");
}

c.setMaxAge(60);

response.addCookie(c);

c.setMaxAge(60);

쿠키를 60초동안 지속시킴.

 

쿠키 받아오기

Cookie[] cookies = request.getCookies();
PrintWriter out = response.getWriter();
if(cookies != null) {
        for(Cookie x: cookies) {
                System.out.println(x.getName()+":"+x.getValue());
                out.println(x.getName()+":"+x.getValue());
        }
}

 

쿠키 삭제하기

Cookie[] cookies = request.getCookies();
if(cookies != null) {
        for(Cookie x : cookies) {
                x.setMaxAge(1);
                response.addCookie(x);
        }
        System.out.println("쿠키가 모두 삭제되었습니다.");
        for(Cookie x: cookies) {
                System.out.println(x.getName()+":"+x.getValue());
        }
} else {
        System.out.println("쿠키가 없습니다.");
}


class - 정보처리

jsp - 정보 출력(시각화, html기반)

servlet - 정보 입력(class에서 메소드를 가져와 사용함)

 

상기 원칙을 통하여 작업을 진행할 것.

 

request.setAttribute("m", m);

으로 member m 을 리퀘스트영역에 바인딩.

request.getRequestDispatcher를 통해서 페이지 이동.

'JAVA > JAVA 기본' 카테고리의 다른 글

Portfolio 서블릿  (0) 2017.10.12
Portfolio 기반 구성 및 사용  (0) 2017.10.12
bootstrap  (0) 2017.10.12
JAVA 암호화  (0) 2017.10.11
JAVA DBMS(Data Base Management System)  (0) 2017.10.11

제이쿼리닷컴

제이쿼리 다운로드

Download the uncompressed, development jQuery 3.2.1

 

부트스트랩

http://getbootstrap.com/

다운로드 - Compiled CSS and JS 다운로드 - 압축풀기

bootstrap.min.css, bootstrap.min.js 를 밖으로 꺼내두기

 

프로젝트 생성

프로젝트 - 웹 - 다이나믹 웹 프로젝트

프로젝트 이름을 만들고

next의 세번째 페이지의 generate web.xml deployment descriptor체크박스를 체크

웹 컨텐츠 밑에 jsp파일 만들기

<!DOCTYPE html> 중 html우측의 주소를 전부 삭제하면 html5가 됨.

 

웹 컨텐츠에 jquery폴더를 만들고 복사해서 붙여넣기

웹 컨텐츠에 bs폴더를 만들고 상기 부트스트랩 파일 2개를 붙여넣기

<html>
<head>
<style type="text/css">
 .redtext{
  color: red;
 }
</style>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Insert title here</title>
<link rel="stylesheet" href="bs/bootstrap.min.css">
<script src="jquery/jquery.js" type="text/javascript"></script>
<script type="bootstrap.min.js"></script>
</head>
<body>
hello world
<script type="text/javascript">
$(document).ready(function(){
 $("p").addClass("redtext");
});
</script>

<p>hello world</p>

<div class="container">
 <div class="row">
  hello world
 </div>
</div>

</body>
</html>

 

 .redtext{
  color: red;
 }

redtext에 붉은색을 집어넣는 기능

 

<meta name="viewport" content="width=device-width, initial-scale=1">

창 크기를 자동으로 제어해주는 코드

 

<link rel="stylesheet" href="WebContent/bs/bootstrap.min.css">
<script src="jquery/jquery.js" type="text/javascript"></script>
<script type="bootstrap.min.js"></script>

jquery 및 부트스트랩 선언

 

<script type="text/javascript">
$(document).ready(function(){
 $("p").addClass("redtext");
});

jquery사용

 

<p>hello world</p>

<div class="container">
 <div class="row">
  hello world
 </div>
</div>

부트스트랩 사용

 

그리드시스템은 한 줄(row)당 12칸

 

span class="col-xs-8"

col : 컬럼

xs : 최소사이즈(일반적으로 폰)

8 : 8칸 차지하여라

컬럼을 열고 핸드폰 사이즈에서 8칸을 차지하여라.

 

xs - sm - md - lg

폰 - 태블릿 - 모니터 - 대형모니터

xs가 기본값으로 적용되며, 큰 사이즈로 갈 수록 예외

기기크기

xs

sm

md

lg

명령어

xs4

4칸 차지함

4칸 차지함

4칸 차지함

4칸 차지함

sm4

12칸 차지함

4칸 차지함

4칸 차지함

4칸 차지함

md4

12칸 차지함

12칸 차지함

4칸 차지함

4칸 차지함

lg4

12칸 차지함

12칸 차지함

12칸 차지함

4칸 차지함

명령어별 사이즈는 상기와 같이 작용함.

 

<p class="col-xs-8 col-xs-push-2">good</p>

push는 내부의 단어를 왼쪽에서 오른쪽으로 x칸 밀어주는 효과

pull은 내부의 내용을 왼쪽으로 x칸 잡아 당겨주는 효과

 

<p class="col-xs-4 col-xs-offset-1">me</p>

offset은 왼쪽에서 오른쪽으로 '자리를 차지하고' x칸 밀어주는 효과

 

<p class="visible-xs">보일까요?</p>

visible 은 xs일때만 보이게 하는 값.

<p class="hidden-xs">hidden</p>

hidden은 xs일때 안보이게 하는 값.

 

<div class="pull-left">좌측 글자</div>
<div class="pull-right">우측 글자</div>

각각 좌측 끝까지, 우측 끝까지 미는 기능.

<div class="clearfix"></div>

플롯을 청소하는 기능

 

<mark>형광팬 처리</mark>
<del>삭선</del>
<ins>밑줄</ins>

<small>글씨를 작게</small>
<strong>글씨를 굵게</strong>

<em>기울임체</em>

<abbr title="아침~점심사이 먹는 밥">아점</abbr>

 

MVC2패턴 :

controller - servlet

model = class

wiew = jsp

사용자가 결정함.

 

<p class="text-left">text-left</p> 좌정렬
<p class="text-center">text-center</p> 가운데정렬
<p class="text-right">text-right</p> 우정렬
<p class="text-justify">text-justify</p> 양쪽정렬

<p class="text-nowrap">text-norap</p> 그냥 적기

<p class="text-nowrap" style="overflow: hidden;text-overflow: ellipsis">

overflow:hidden 은 넘친 값을 숨김

text-overflow:ellipsis 는 넘친 값을 말줄임표화.

 

<table class="table">
 <thead>
  <tr>
   <th>#</th>
   <th>First Name</th>
   <th>Last Name</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>1</td>
   <td>mark</td>
   <td>sam</td>
  </tr>
  <tr>
   <td>2</td>
   <td>mark</td>
   <td>sam</td>
  </tr>
  <tr>
   <td>3</td>
   <td>mark</td>
   <td>sam</td>
  </tr>
 </tbody>
</table>

 

부트스트랩에서의 테이블 생성

 

<table class="table table-striped">

테이블에 음영선 넣기

<table class="table table-striped table-bordered">

테이블에 테두리 선 넣기

<table class="table table-striped table-bordered table-hover">

테이블에 마우스 올리면 색 변화하게 넣기

<table class="table table-striped table-bordered table-hover table-condensed">

테이블 크기를 살짝 압축해주는 기능

 

문맥태그

<tr class="info">

연파랑색 강조기능

<tr class="success">

연녹색 강조기능

<tr class="active">

연회색 강조기능

<tr class="warning">

연노랑색 강조기능

<tr class="danger">

연붉은색 강조기능

 

<div class="table-responsive">

수평 스크롤바 생성

 

프로토타입(prototype)

시제품, 디자인툴 스케치

 

MVC1

jsp

MVC2

--

model

class

View

jsp

Controller

servlet

 

form태그

<form action="#" method="get">

url에 데이터를 집어넣고 전송하는 방식

<form action="#" method="post">

내용에 데이터를 집어넣고 전송하는 방식. 보안이 상대적으로 우수함.

 

로그인 구현하기

<body>
          <form action="#" method="post">
                    <label>ID</label>
                    <input id="id" name="id" placeholder="id를 입력하세요">
                    <br>
                    <label>PW</label>
                    <input id="pw" name="pw" placeholder="비밀번호를 입력하세요">
                    <br>
                    <button type="submit">로그인</button>
                    <button type="reset">리셋</button>
                   
          </form>
</body>

 

부트스트랩을 이용하여 로그인 구현하기

<div class="container">
          <div class="row">
                    <form action="#" role="form">
                              <div class="form-group">
                                        <label for="id">ID</label>
                                        <input class="form-control" id="id" name="id" placeholder="id를 입력하세요">
                              </div>
                              <div class="form-group">
                                        <label for="pw">PW</label>
                                        <input type="password" class="form-control" id="pw" name="pw" placeholder="pw를 입력하세요">
                              </div>
                              <div class="form-group">
                                        <button type="submit">로그인</button>
                                        <button type="reset">초기화</button>
                              </div>
                    </form>
          </div>
</div>

 

상기 form의 action에 다른 주소값을 넣으면, 해당 주소값의 jsp파일을 실행할 수 있음.

 

<form class="form-inline" action="#" role="form">

form-inline 은 한줄에 입력하는 기능

 

<label class="sr-only" for="id">ID</label>

sr-only는 시각장애인을 배려하기 위해 소리로 들려줄 때에만 출력하는 기능

 

col-xs-2와 10을 통해 한 줄로 만들어 주는 기능

control-label을 통해 ID와 PW글자를 입력칸 왼쪽까지 붙여주는 기능

<div class="form-group">
          <label class="col-xs-2 control-label" for="id">ID</label>
          <div class="col-xs-10">
                    <input class="form-control" id="id" name="id" placeholder="id를 입력하세요">
          </div>
</div>
<div class="form-group">
          <label class="col-xs-2 control-label" for="pw">PW</label>
          <div class="col-xs-10">
                    <input type="password" class="form-control" id="pw" name="pw" placeholder="pw를 입력하세요">
          </div>
</div>

 

상하정렬

<p class="form-control-static">idadress</p>

 

HTML5 사용자 정의 속성

<input data-ssn="s001">

ssn을 만들고 s001을 투입하는 것.

 

<textarea rows="5" cols="12"></textarea>
<textarea class="col-xs-6" rows="5" cols="12"></textarea>
<textarea class="form-control" rows="5" cols="12"></textarea>

 

기본 텍스트박스

크기제한 텍스트박스

박싱을 데코레이션한 텍스트박스

 

남성/여성을 선택하는 체크박스

<div class="radio">
          <label>
                    <input type="radio" name="gender" value="남성">남성
          </label>
</div>
<div class="radio">
          <label>
                    <input type="radio" name="gender" value="여성">여성
          </label>
</div>

단. input타입의 name값이 동등해야 함.

<input checked="checked" type="radio" name="gender" value="남성">남성

checked를 통해 해당 항목을 체크시킴

 

<label class="radio-inline">
       <input type="radio" value="서울" name="addr">서울

</label>

수평으로 체크박스를 배열하는 것.

 

부트스트랩 3.3 코드 중 특수 폰트 일람

https://getbootstrap.com/docs/3.3/components/

 

<span class="glyphicon glyphicon-pencil"></span>

​방식으로 사용함.

 

드롭다운 작성하는 법

<div class="dropdown">
       <button class="btn dropdown-toggle" data-toggle="dropdown">
              dropdown<span class="caret"></span>
       </button>
</div>

caret은 드롭다운 옆의 역삼각형 만들때 사용

 

드롭다운 테이블 작성하는 법

<ul class="dropdown-menu">
        <li class="dropdown-header">과일</li>
        <li><a href="#" class="active">포도</a></li>
        <li><a href="#">딸기</a></li>
        <li><a href="#">수박</a></li>
</ul>

 

<li class="divider"></li>

드롭다운 테이블 중 구분선 넣는 법

 

팁. 두 개의 jsp파일을 둘 다 ctrl클릭하고, 우클릭, 컴페어 위드, each other클릭시 다른 점을 비교해줌.

 

부트스트랩 버튼 구현

<button>기본 버튼</button>
<button class="btn">부트스트랩 버튼1</button>
<button class="btn btn-default">bstbtn2</button>
<button class="btn btn-primary">bsbtn3</button>
<button class="btn btn-info">bsbtn4</button>
<button class="btn btn-success">bsbtn5</button>
<button class="btn btn-warning">bsbtn6</button>
<button class="btn btn-danger">bsbtn7</button>
<button class="btn btn-link">bsbtn8</button>

 

 


 상기 코드는 상기와 같이 구현됨.

 

 

<button class="btn btn-success"><span class="glyphicon glyphicon-home"></span>glyphicon-home</button>

아이콘 사용하는 법

 

<button class="btn btn-info btn-xs">btn-xs</button>
<button class="btn btn-info btn-sm">btn-sm</button>
<button class="btn btn-info">btn-default</button>
<button class="btn btn-info btn-lg">btn-lg</button>
<button class="btn btn-info btn-block">btn-block</button>

상기 코드는 아래와 같이 구현됨.

 


btn-block은 자신을 감싼 범위 전체만큼 차지함.

 

버튼 그룹 만들기

 

<div class="btn-group">
      <button class="btn btn-default">default</button>
      <button class="btn btn-primary">primary</button>
      <button class="btn btn-info">info</button>
      <button class="btn btn-success">success</button>
      <button class="btn btn-warning">warning</button>
      <button class="btn btn-danger">danger</button>
      <button class="btn btn-link">link</button>
</div>

수평으로 버튼이 배열됨.

<div class="btn-group-vertical">

버튼그룹이 수직으로 배열됨.

 

툴바 만들기

<div class="btn-toolbar">
        <div class="btn-group">
                <button class="btn btn-info">등록</button>
                <button class="btn btn-info">조회</button>
                <button class="btn btn-info">수정</button>
                <button class="btn btn-info">삭제</button>
        </div>
       
        <div class="btn-group">
                <button class="btn btn-success">로그인</button>
                <button class="btn btn-success">회원가입</button>
                <button class="btn btn-success">회원탈퇴</button>
        </div>
</div>

 

<div class="btn-toolbar btn-group-xs">

<div class="btn-group btn-group-lg">

등을 통하여 버튼그룹의 크기 변경이 가능.

 

<div class="btn-group btn-group-justified">

를 통하여 버튼의 크기를 같게 만들 수 있음.

 

<input type="button" class="btn btn-info" value="가입">

를 통해서도 버튼 생성이 가능

 

<a href="#" class="btn btn-info">탈퇴</a>

를 통해서도 버튼을 생성할 수 있음.

 

 

<div class="input-group">
     <span class="input-group-addon">
           <input type="checkbox">
     </span>
     <input class="form-control">
</div>

등을 통해 텍스트박스의 구현이 가능.

 

<ul class="dropdown-menu pull-right">

의 pull-right를 통하여 드롭다운을 오른쪽정렬이 가능

 

유스케이스

ㄴ 특정 기능을 나타내는 도형

유스케이스 다이어그램

ㄴ 유스케이스의 관계를 표현한 도형



네비게이션

<ul class="nav nav-tabs">
        <li><a data-toggle="tab" href="#tv">TV</a></li>
        <li><a data-toggle="tab" href="#movie">영화</a></li>
        <li><a data-toggle="tab" href="#concert">공연</a></li>
</ul>
<div class="tab-content">
        <div id="tv" class="tab-pane active">
                안녕하세요
        </div>
        <div id="movie" class="tab-pane">
                Hello
        </div>
        <div id="concert" class="tab-pane">
                ohayo
        </div>
</div>

 

<ul class="nav nav-pills nav-stacked">

stacked를 통하여 네비게이터를 수직으로 배치.

<div class="col-xs-2">
        <ul class="nav nav-pills nav-stacked">
                <li><a data-toggle="tab" href="#foot">축구</a></li>
                <li><a data-toggle="tab" href="#basket">농구</a></li>
                <li><a data-toggle="tab" href="#base">야구</a></li>
        </ul>
</div>
<div class="col-xs-10">
        <div class="tab-content">
                <div id="foot" class="tab-pane active">
                        축구경기
                </div>
                <div id="basket" class="tab-pane">
                        농구경기
                </div>
                <div id="base" class="tab-pane">
                        야구경기
                </div>
        </div>
</div>

 

div로 묶고 그리드시스템(col-xs-2등)  을 통해 한줄로 배치.

 

<img alt="아름다운 계곡 풍경" src="car.jpg">

이미지 투입

 

<img class="img-circle" alt="아름다운 계곡 풍경" src="car.jpg">

타원형으로 자르기

 

<img class="img-rounded" alt="아름다운 계곡 풍경" src="car.jpg">
끝부분을 살짝 둥글게.

 

<img class="img-thumbnail" alt="아름다운 계곡 풍경" src="car.jpg">

썸네일 만들기.

 

<img class="img-responsive" alt="아름다운 계곡 풍경" src="car.jpg">

 

네비게이션 바

 

<nav class="navbar navbar-default">
        <div class="navbar-header">
                <button data-toggle="collapse" data-target="#menu" class="navbar-toggle">
                        <span class="sr-only">Toggle Navigator</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand">502호</a>
        </div>
        <div id="menu" class="collapse navbar-collapse">
                <ul class="nav navbar-nav">
                        <li><a href="#">menu1</a></li>
                        <li><a href="#">menu2</a></li>
                        <li><a href="#">menu3</a></li>
                        <li><a href="#">menu4</a></li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                        <li><a href="#">end</a></li>
                </ul>
        </div>
</nav>

 

collopse

는 메뉴가 접혀있다는 의미.

 

<nav class="navbar navbar-inverse">

로 default를 inverse로 바꾸면, 색이 검게 변함.

 

<nav class="navbar navbar-default navbar-fixed-top">

을 통하여 네비게이션바를 최상단에 고정.

 

<div style="height : 1000px"></div>

를 통하여 상하페이지크기 늘리기.

 

패널

<div class="panel panel-default">
        <div class="panel-heading">
                <h1 class="panel-title">여기는 헤딩영역입니다</h1>
        </div>
        <div class="panel-body">
                넣고 싶은 것을 넣으시오
        </div>

        <div class="panel-footer">
                end
        </div>
</div>

 

패널의 기본적 이용

 

<a href="#">클&nbsp;릭</a>

 

&nbsp를 통해 스페이스바를 구현.

 

<div class="panel panel-info">

info가 들어간 자리에

success

info

warning

danger등의 문맥태그를 이용할 수 있음.

 

페이징 처리

 

 <div class="row">
        <ul class="pagination pagination-sm">
                <li><a>&laquo</a></li>
                <li><a>1</a></li>
                <li><a>2</a></li>
                <li><a>3</a></li>
                <li><a>4</a></li>
                <li><a>5</a></li>
                <li><a>&raquo</a></li>
        </ul>
</div>

 

&lquo;는

<<를 의미한다.

&rquo는

>>를 의미함.

 

<ul class="pagination pagination-sm">

을 이용하여 페이징의 크기를 조절할 수 있다.

 

&larr;

는 ←

 

&rarr;

는 →

를 의미한다.

 

<div class="jumbotron">

을 통해 바탕과 함께 더욱 큰 글씨를 쓸 수 있음.

 

모달 이용법

헤드태그 종료 전

<script type="text/javascript">
        $(document).ready(function() {
                $("#mymodal").modal("show");
        });
</script>

<div id="mymodal" class="modal fade">
        <div class="modal-dialog">
                <div class="modal-content">
                        <div class="modal-header">
                                <button data-dismiss="modal" class="close">&times;</button>
                        </div>
                        <div class="modal-body">
                                모달 내용입니다.
                        </div>
                </div>
        </div>
</div>

 

<div class="modal-footer">
        <button data-dismiss="modal" class="btn btn-success">동의</button>
</div>

을 통해 동의를 눌러야만 꺼지게끔 할 수 있음.

 

얼럿(alert)

 

<div class="alert alert-warning">
        조심하세요
</div>

등을 이용하여 표시함!

 

<div class="alert-dismissable alert alert-danger">
        닫기가능함!
        <button class="close" data-dismiss="alert">&times;</button>
</div>

을 통하여 닫기가 가능한 얼럿창의 출력이 가능.

 

툴팁

 

<a data-placement="bottom" href="#" data-toggle="tooltip" title="지식인naver">naver</a>
<p data-toggle="tooltip" title="지식인naver">naver</p>
<button data-placement="right" data-toggle="tooltip" title="로그인하려면 클릭하세요">로그인</button>

<script type="text/javascript">
        $(document).ready(function() {
                $("[data-toggle='tooltip']").tooltip();
        });
</script>

 

팝오버

<div class="container">
        <div class="row">
                <button data-toggle="popover" data-content="툴팁과 다른 점" title="팝오버!">팝오버</button>
                <button data-trigger="hover" data-toggle="popover" data-content="툴팁과 다른 점" title="팝오버!">팝오버</button>
        </div>
</div>


<script type="text/javascript">
        $(document).ready(function() {
                $("[data-toggle='popover']").popover();
        });
</script>

 

콜렙스

<button data-toggle="collapse" class="btn btn-info" data-target="#mycollapse2">
        콜렙스 개폐
</button>
<div id="mycollapse2" class="collapse in">
        <p>hello</p>
        <p>hi</p>
        <p>good</p>
        <p>morning</p>
        <p>world</p>
</div>

 

아코디언 구현

<div id="accordion" class="panel-group">
        <div class="panel panel-default">
                <div class="panel-heading">
                        <h4 class="panel-title">
                                <a data-toggle="collapse" href="#collapse1"
                                        data-parent="#accordion">Item1</a>
                        </h4>
                </div>
                <div class="panel-dollapse collapse in" id="collapse1">
                        <div class="panel-body">
                                <p>hello</p>
                                <p>world</p>
                                <p>java</p>
                                <p>C++</p>
                                <p>C#</p>
                                <p>Go!</p>
                        </div>
                </div>
        </div>
        <div class="panel panel-default">
                <div class="panel-heading">
                        <h4 class="panel-title">
                                <a data-toggle="collapse" href="#collapse2">Item2</a>
                        </h4>
                </div>
                <div class="panel-dollapse collapse" id="collapse2"
                        data-parent="#accordion">
                        <div class="panel-body">
                                <p>hello</p>
                                <p>world</p>
                                <p>java</p>
                                <p>C++</p>
                                <p>C#</p>
                                <p>Go!</p>
                        </div>
                </div>
        </div>
        <div class="panel panel-default">
                <div class="panel-heading">
                        <h4 class="panel-title">
                                <a data-toggle="collapse" href="#collapse3">Item3</a>
                        </h4>
                </div>
                <div class="panel-dollapse collapse" id="collapse3"
                        data-parent="#accordion">
                        <div class="panel-body">
                                <p>hello</p>
                                <p>world</p>
                                <p>java</p>
                                <p>C++</p>
                                <p>C#</p>
                                <p>Go!</p>
                        </div>
                </div>
        </div>
</div>

 

캐롯셀

<div data-ride="carousel" class="carousel slide" id="myCarousel">

        <ol class="carousel-indicators">
                <li data-slide-to="0" data-target="#myCarousel" class="active"></li>
                <li data-slide-to="1" data-target="#myCarousel"></li>
                <li data-slide-to="2" data-target="#myCarousel"></li>
        </ol>

        <div class="carousel-inner">

                <div class="item active">
                        <img alt="car" src="car.jpg">
                </div>

                <div class="item">
                        <img alt="orora" src="orora.jpg">
                </div>

                <div class="item">
                        <img alt="yard" src="yard.jpg">
                </div>

        </div>

        <a href="#myCarousel" class="left carousel-control" data-slide="prev">
                <span class="glyphicon glyphicon-chevron-left"></span>
        </a>

        <a href="#myCarousel" class="right carousel-control" data-slide="next">
                <span class="glyphicon glyphicon-chevron-right"></span>
        </a>

</div>

<div data-ride="carousel" class="carousel slide" id="myCarousel" data-interval="500">

data-interval을 통해 시간을 조절할 수 있음.

단위는 1/1000초단위.

 

팁. 스크립트태그는 </body>태그의 바로 위에 구현하는 것을 일반적으로 함.

 

액티브 다이어그램

 



UI시나리오 작성



테스트케이스 작성



팁. ctrl + shift + F = 자동 정렬

 

'JAVA > JAVA 기본' 카테고리의 다른 글

Portfolio 기반 구성 및 사용  (0) 2017.10.12
JAVA 서블릿  (0) 2017.10.12
JAVA 암호화  (0) 2017.10.11
JAVA DBMS(Data Base Management System)  (0) 2017.10.11
JAVA URL의 사용  (0) 2017.10.11

아래와 같은 코드를 통하여 암호화

public class EncSHA256 {
        public static String encMsg(String msg) {
                String enc="";
                try {
                        MessageDigest md = MessageDigest.getInstance("SHA-256");
                        md.update(msg.getBytes());
                        byte[] bArr = md.digest();
                        StringBuffer sb = new StringBuffer();
                        for(int i = 0; i < bArr.length; i++) {
                                String s = Integer.toString(bArr[i]&0x88, 16).substring(1);
                                //0x88자리에 0x99등 원하는 숫자를 사용해도 좋음.
                                //16이 위치한 자리도 변경 가능
                                //substring값도 변경 가능
                                sb.append(s);
                        }
                        enc = sb.toString();
                } catch (NoSuchAlgorithmException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                return enc;
        }
}

'JAVA > JAVA 기본' 카테고리의 다른 글

JAVA 서블릿  (0) 2017.10.12
bootstrap  (0) 2017.10.12
JAVA DBMS(Data Base Management System)  (0) 2017.10.11
JAVA URL의 사용  (0) 2017.10.11
JAVA Calender클래스  (0) 2017.10.11

DBMS

데이터베이스 요구사항에 따라 하드웨어와 운영체제에 적합한 DBMS를 선정할 때의 고려사항

1. DBMS 가용성 및 안정성

2. DBMS 구축 비용

3. DBMS 지속적인 기술 지원

4. 다양한 개발 환경의 지원

 

테이블스페이스

test 는 유저가 생성한 계정이다.

테이블스페이스명

사용하는 계정명

system

sys

sysaux

system

ts1

test

temp

test

 

DBMS 설치 완료 보고서

DBMS명

DBMS ip주소

DBMS에 대한 port정보

테이블 스페이스

계정정보

 

설명

서비스명

port

구분

 테이블스페이스명

계정명

비밀번호

oracle 11g

192.168.100.1

http

1521

default

 system

system

sys1234

 

temporary

 default

sysaux

sys1234

 

사용하는

DBMS

DB가 위치한

ip주소

 default

 ts1

test

test

사용자가 생성한 tablespace ts1

temporary

 temp

test

test

임시로 사용되는 디폴트 tablespace temp

 

테이블 스페이스의 용량을 확인하는 명령어

select * from dba_data_files;

 

sqlplus의 system의 상위계정 SYS에 접속하기 위해서는

sqlplus /"as sysdba"

명령어로 접속할 수 있다.

 

상기 명령어 이후 비밀번호 변경은

alter user joeun identified by 바꿀번호;

 

sys계정으로 들어가는 다른 방법은

conn system/sys1234 as sysdba

를 통해 system계정과 비번을 친 후 as sysdba를 통해 접속할 수 있다.

 

계정 잠금 및 해제

alter user joeun account lock;

으로 joeun계정을 잠금하고

alter user joeun account unlock;

을 통해 잠금

 

테이블스페이스 생성

create tablespace ts1

datafile 'c:\ts1.dbf'

size 4M

autoextend on next 10M

maxsize unlimited;

로 테이블스페이스를 생성

내용은

테이블스페이스 선언

c드라이브에 ts1.dbf로 생성

4메가로 생성

10메가씩 크기 증가

최대 크기 무제한

으로 생성함

 

테이블스페이스 삭제

drop tablespace ts1;

ts1은 테이블스페이스의 이름이다.

 

테이블스페이스를 사용하여 계정 생성

create user test identified by test

default tablespace ts1

temporary tablespace temp;

 

권한 부여

grant connect to 계정명;

권한 회수

revoke connect to 계정명;

 

상기 명령어는 connect를 부여 및 회수하는 과정이다.

 

테이블스페이스를 사용하여 테이블 생성

create table tbl_test (

name varchar2(15)

) tablespace ts1;

tbl_test테이블을 tablespace 인 ts1에 넣는 기능

 

테이블이 들어있는 테이블스페이스의 삭제

drop tablespace ts1 including contents;

ts1을 삭제하면서 뒤에 including contents를 붙여 확실히 삭제하나, 테이블스페이스는 아까 생성했던 c드라이브 내의 파일로 남아있게 된다.

 

다른 계정의 테이블 접근

select * from joeun.member;

타 계정에서 joeun계정의 member테이블의 내용을 검색한다.

 

in형태의 검색자

select * from joeun.member where name in('홍길동', '피천득');

name값에 '홍길동' or '피천득'을 가진 값을 전부 출력

 

check제약조건

create table gender(

gen char(1) check(gen in('m', 'f'))

);

테이블 gender를 만들 때

성별 gen의 값이 m이나 f만 입력되도록

체크해주는 기능

ㄴ check 제약조건의 in에는 where절에 들어갈 수 있는 것은 대부분 들어갈 수 있음.

 

erd

entity relation diagram

eid(ssn)

did(부서코드)

────────────

실선인 경우

식별관계

did(부서코드)

n-------------------1

점선인 경우

비식별관계

일반적으로 안정적

 

relation의 사용

학생

relration

교수

학생

sid

수강

교수

pid

학생

교수

student id = sid

profesional id = pid

 

employee

m-----1

depart

 

비식별관계

create table employee(
eid varchar2(6) primary key,
ename varchar2(15) not null,
did varchar2(6) constraint fk_did references depart(did)
)
//did는 employee(사원) 의 외래키이자, 근무파트를 지정하는 것.

create table depart(
did varchar2(6) primary key,
dname varchar2(21) not null
)
//did는 디파트의 pk이자 근무파트 테이블을 구성하는 것.

 

식별관계

create table student(
sid varchar2(6) primary key,
sname varchar2(15),
pid varchar2(6) constraint fk_pid references profesional(pid)
)

create table profesional(
pid varchar2(6) primary key,
pname varchar2(15),
sid varchar2(6) constraint fk_pid references student(pid)
)

create table class(
pid varchar2(6) constraint fk_class_pid references profesional(pid),
sid varchar2(6) constraint fk_class_pid references student(pid),
classname varchar2(30),
constraint pk_com primary key(pid, sid)
)

학생과 교수를 class의 마지막 줄에서 쌍방 외래키로 선언함과 동시에 그 쌍방 외래키를 primary key로 묶음.

이로써 쌍방에 primary key가 성립되며, 쌍방참조가 이루어지기에, 식별관계로서 정리됨

 

비식별관계 - 하나의 외래키에 다른 테이블의 primary key가 연동되는 경우

식별관계 - 쌍방의 primary key를 서로 외래키로 사용하여 연동되는 경우.

※식별관계의 경우 쌍방에 primary key로 묶여있기에 삭제 등의 자료변경이 굉장히 힘듬.

 

특정 테이블 접근권한부여

grant select on 테이블명 to public;

모든 계정에 테이블 접근권한부여

 

synonym

create public synonym pub_syn1 for joeun.member;

으로 pub_syn1을 사용하여 joeun.member를 호출가능

 

시노님의 삭제

drop public synonym pub_syn1;

단. 시노님은 dba권한이 있는 계정에서만 삭제가능.

 

팁. mariaDB는 무료 프로그램

 

테이블스페이스 전체 출력

select * from tabs

 

테이블스페이스 이동

alter table 테이블명 move tablespace ts1;

'JAVA > JAVA 기본' 카테고리의 다른 글

bootstrap  (0) 2017.10.12
JAVA 암호화  (0) 2017.10.11
JAVA URL의 사용  (0) 2017.10.11
JAVA Calender클래스  (0) 2017.10.11
JAVA-Oracle JDBC  (0) 2017.10.11

URL의 사용

URL의 사용

          URL url = null;
          InputStream in = null;
          try {
               url = new URL("http://www.naver.com");
               String protocol = url.getProtocol();
               System.out.println(protocol);
              
               String host = url.getHost();
               System.out.println(host);
              
               int port = url.getPort();
               System.out.println(port);
              
               port = url.getDefaultPort();
               System.out.println(port);
          } catch (Exception e) {
               // TODO: handle exception
               e.printStackTrace();
          } finally {
               try {
                    if(in != null) in.close();
               } catch (Exception e2) {
                    // TODO: handle exception
                    e2.printStackTrace();
               }
          }

 

프로토콜

String protocol = url.getProtocol();
System.out.println(protocol);

http

host

String host = url.getHost();
System.out.println(host);

www.naver.com

포트(보호되어 나오지 않음)

int port = url.getPort();
System.out.println(port);

-1

디폴트 포트

port = url.getDefaultPort();
System.out.println(port);

80

port는 0~1023의 포트를 사용하지 말 것

 

URLConnection의 사용

URL url = new URL("http://oracle.com/us/downloads/index.html");
URLConnection urlConn = url.openConnection();

urlConn.getContent();

url의 선언

url커넥션 선언(url.오픈커넥션을 이용하여)

urlConn.getContnent를 이용하여 에러 방지

인코딩값 받기

String encoding = urlConn.getContentEncoding();
System.out.println(encoding);

인코딩값을 받아오고 출력

사이트 자원 크기 받기

int length = urlConn.getContentLength();

System.out.println(length);

사이트 자원의 크기 받기

 

 사이트의 키값을 통해 내용 받기

Map<String, List<String>> map = urlConn.getHeaderFields();
   Set<String> set = map.keySet();
   Iterator<String> it = set.iterator();
   
   while(it.hasNext()) {
    String key = it.next();
    List<String> val = map.get(key);
    
    System.out.println("============");
    System.out.println(key);
    for(String x : val) {
     System.out.println(x);
    }
    System.out.println("============");
   }

사이트의 내용물 받기

   in = urlConn.getInputStream();
   while(true) {
    int what = in.read();
    if(what == -1) break;
    System.out.print((char)what);
   }

 

'JAVA > JAVA 기본' 카테고리의 다른 글

JAVA 암호화  (0) 2017.10.11
JAVA DBMS(Data Base Management System)  (0) 2017.10.11
JAVA Calender클래스  (0) 2017.10.11
JAVA-Oracle JDBC  (0) 2017.10.11
Oracle DB  (0) 2017.10.11

+ Recent posts