'낙서장' 카테고리의 다른 글

Git 에러 fatal: Not a valid object name: 'master'  (0) 2020.05.29
화상 키보드 띄우기  (0) 2020.05.29
CDN 관련 링크  (0) 2020.05.29
오픈소스 html 기능 넣는 툴  (0) 2020.05.29
오답노트 200528  (0) 2020.05.28

include file을 이용하면 컴파일 전의 jsp 문서 내용이 해당 jsp파일안에 모두 들어 간뒤 톰캣에서 컴파일 되는 것이고

jsp:include page을 이용하면 이미 해당 파일을 컴파일 하여 결과를 가져와서 그 값을 이용하는 것이다.

 

<%@ include file="파일의 위치(url)" %>는 jsp 파일이 자바파일로 바꿀때 자바문서에 삽입되어 컴파일 되는것이고
<jsp:include page=파일 />은 자바로 바뀌고 컴파일이후 실행중에 값이 들어간다

출처: https://devyongsik.tistory.com/92 [DEV용식]

 

'낙서장' 카테고리의 다른 글

화상 키보드 띄우기  (0) 2020.05.29
부트스트랩 bootstrap 화면 grid로 조절하기  (0) 2020.05.29
오픈소스 html 기능 넣는 툴  (0) 2020.05.29
오답노트 200528  (0) 2020.05.28
데이터 커넥션 풀링 기법  (0) 2020.05.28

'낙서장' 카테고리의 다른 글

부트스트랩 bootstrap 화면 grid로 조절하기  (0) 2020.05.29
CDN 관련 링크  (0) 2020.05.29
오답노트 200528  (0) 2020.05.28
데이터 커넥션 풀링 기법  (0) 2020.05.28
MVC패턴 프로젝트 구성  (0) 2020.05.28

 

깃에 브랜치를 하나 생성한다.

 

git branch를 이용해서 가지가 어떤 것이 있는지 확인 가능하다.

 

checkout을 이용해서 practice로 이동해본다.

 

checkout master를 이용해서 다시 master로 돌아온다.

 

연습용 텍스트파일 만든다

 

practice로 옮겨본다

 

옮기면 텍스트 파일이 없어진다 (다시 master로 돌아오면 텍스트 파일이 다시 나타난다)

 

w3schools에 접속하여 bootstrap

 

b4

 

navbar

 

네비게이션 바 선택

 

try it yourself

 

WebContent에 test 폴더를 만들고 navTest.jsp를 만든다.

 

내용을 붙여넣는다

더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
</head>
<body>

<nav class="navbar navbar-expand-md bg-dark navbar-dark">
  <a class="navbar-brand" href="#">Navbar</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
    <span class="navbar-toggler-icon"></span>
  </button>
  <div class="collapse navbar-collapse" id="collapsibleNavbar">
    <ul class="navbar-nav">
      <li class="nav-item">
        <a class="nav-link" href="#">Link</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Link</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Link</a>
      </li>    
    </ul>
  </div>  
</nav>
<br>

<div class="container">
  <h3>Collapsible Navbar</h3>
  <p>In this example, the navigation bar is hidden on small screens and replaced by a button in the top right corner (try to re-size this window).</p>
  <p>Only when the button is clicked, the navigation bar will be displayed.</p>
  <p>Tip: You can also remove the .navbar-expand-md class to ALWAYS hide navbar links and display the toggler button.</p>
</div>

</body>
</html>

 

cards

 

원하는 모양 선택

 

부트스트랩을 이미 넣었기 때문에 try it yourself안하고 example복사해도 됨

더보기
<div class="card" style="width:400px">
  <img class="card-img-top" src="img_avatar1.png" alt="Card image">
  <div class="card-body">
    <h4 class="card-title">John Doe</h4>
    <p class="card-text">Some example text.</p>
    <a href="#" class="btn btn-primary">See Profile</a>
  </div>
</div>

 

<div class="Container">를 추가하고 그 안에 넣자

 

이미지를 빼고 넓이를 변경하자

 

복붙

 

마진을 주자

 

공통적으로 필요한 녀석들을 넣기위한 include

 

nav.jsp를 만들자

 

모든페이지에서 공유해야되는 것들을 넣어보자(html과 body가 잘렸다고 고민하지말자 이후 footer를 만들것)

 

옮긴 후 home의 모습

 

푸터 데모

 

해당 페이지에서검사 클릭

 

마우스 오른쪽 copy element

 

join페이지에 연습삼아 푸터내용을 넣어보자

 

확인

 

footer를 만들어서 내용을 집어넣자

 

footer에 내용을 넣자

 

home페이지의 맨 아래에 붙여 넣자 include하자

 

테스트 해보자

 

회원가입 화면을 만들어보자

 

join에 해당 샘플코드를 넣자

 

넣은 모습

 

수정 해보자

 

UsersJoinProcAction 파일로 가서 주소를 바꿔보자 

 

네비게이션에서 버튼을 누르면 이동하도록 변경

 

UsersJoinAction을 복사해서 UsersLoginAction으로 새로만들고 주소를 user/login.jsp로 바꾼다

 

 

UsersJoinProcAction 포워딩 방식 변경

 

페이지 이동은 무조건 Dispatcher 를 사용하고 (request를 담고 가거나 가지않거나 어쨌든)

주소는 컨트롤러를 타는주소 (cmd)

만약 Action이 있다면 자바스크립트를 이용하자(히스토리백, 메시지창, 페이지이동 효과 등의 기능을 쓸 수 있다.)

 

F12에서 Application을 보면 JSESSIONID가 보인다

세션아이디를 지우면 다른 접속자라고 인식한다

 

UsersLoginProcAction

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

니도누가머집푸속


스니핑 - 도청하는것
스누핑 - 가로채는것
스머핑 - 집중공격
스푸핑 - 속이는것

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

더보기

1

 

 

'낙서장' 카테고리의 다른 글

CDN 관련 링크  (0) 2020.05.29
오픈소스 html 기능 넣는 툴  (0) 2020.05.29
데이터 커넥션 풀링 기법  (0) 2020.05.28
MVC패턴 프로젝트 구성  (0) 2020.05.28
필기요약  (0) 2020.05.25

 

 

1. ReadMe.md

더보기

#### JSP 모델2 블로그 프로젝트

 

## 오라클 사용자 생성

```sql

alter session set "_oracle_script"=true;

CREATE USER cos IDENTIFIED BY bitc5600;

 

GRANT CREATE SESSION TO cos;

GRANT CREATE TABLESPACE TO cos;

GRANT CREATE TABLE TO cos;

GRANT selectinsertdeleteupdate on cos.player TO cos;

alter user cos default tablespace users quota unlimited on users;

 

관련주소 :

https://ondolroom.tistory.com/162

 

```

 

## 테이블

```sql

CREATE TABLE users(

    id number primary key,

    username varchar2(100not null unique,

    password varchar2(100not null,

    email varchar2(100not null,

    address varchar2(100not null,

    userProfile varchar2(200),

    userRole VARCHAR2(20),

    createDate timestamp

) ;

 

CREATE TABLE board(

    id number primary key,

    userId number,

    title varchar2(100not null,

    content clob,

    readCount number default 0,

    createDate timestamp,

    foreign key (userId) references users (id)

);

 

CREATE TABLE reply(

    id number primary key,

    userId number,

    boardId number,

    content varchar2(300not null,

    createDate timestamp,

    foreign key (userId) references users (id) on delete set null,

    foreign key (boardId) references board (id) on delete cascade

);

```

 

## 시퀀스

```sql

CREATE SEQUENCE USERS_SEQ

    START WITH 1

    INCREMENT BY 1;

 

CREATE SEQUENCE BOARD_SEQ

    START WITH 1

    INCREMENT BY 1;

 

CREATE SEQUENCE REPLY_SEQ

    START WITH 1

    INCREMENT BY 1;

```

 

utf-8 깨질 때 web.xml에 넣기

더보기
	<filter>
		<filter-name>setCharacterEncodingFilter</filter-name>
		<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>setCharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 

톰캣 홈페이지 - 톰캣 8.5 - 10. JDBC DataSource 에 예시가 있음

http://tomcat.apache.org/tomcat-8.5-doc/jndi-datasource-examples-howto.html

 

Apache Tomcat 8 (8.5.55) - JNDI Datasource How-To

JNDI Datasource configuration is covered extensively in the JNDI-Resources-HOWTO. However, feedback from tomcat-user has shown that specifics for individual configurations can be rather tricky. Here then are some example configurations that have been poste

tomcat.apache.org

 

2. META-INF에 context.xml 만들고 데이터 넣기(server에 있는 context.xml 복사해오면 됨)

더보기

DB클래스를 가져오고 DB에 연결한다. 

캣이 요청을 받으면 Catalina 가 요청에 맞는 Context 를 찾고, Context 는 자신이 설정된 어플리케이션의 deployment descriptor file(web.xml) 을 기반으로 전달받은 요청을 서블릿에게 전달하여 처리되도록 한다.

 

3. WEB-INF에 web.xml 만들고 데이터 넣기(server에 있는 web.xml 복사해오면 됨)

 

4. DBConn 만들고 내용 넣기

더보기
package com.cos.blog.db;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DBConn {
	public static Connection getConnection() {
		try {
			
			Context initContext = new InitialContext();
			Context envContext  = (Context)initContext.lookup("java:/comp/env");
			DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
			Connection conn = ds.getConnection();
			
			return conn;
			
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("DBConn : 데이터베이스 연결 실패");
			System.out.println("DBConn : Message" + e.getMessage());
		}
		return null;
	}
	
	public static void close(Connection conn, PreparedStatement pstmt) {
		try {
			if(conn != null) {
				conn.close();				
			}
			if(pstmt != null) {			
				pstmt.close();
			}
		} catch (Exception e) {
			System.out.println("DB종료시 오류가 발생 : " +e.getMessage());
		}
	}
	
	public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) {
		try {
			if(conn != null) {
				conn.close();				
			}
			if(pstmt != null) {			
				pstmt.close();
			}
			if(rs != null) {			
				rs.close();
			}
		} catch (Exception e) {
			System.out.println("DB종료시 오류가 발생 : " +e.getMessage());
		}
	}
}

 

5. enum과 model들 만들기

더보기

enum RoleType

package com.cos.blog.model;

public enum RoleType {
	USER, ADMIN;
}

 

Users

package com.cos.blog.model;

import java.sql.Timestamp;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Users {
	
	private int id;
	private String username;
	private String password;
	private String email;
	private	String address;
	private String userProfile;
	private String userRole;
	private Timestamp createDate;
	
}

 

Board

package com.cos.blog.model;

import java.sql.Timestamp;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Board {
	
	private	int id;
	private int userId;
	private String title;
	private String content;
	private int readCount;
	private Timestamp createDate;

}

 

Reply

package com.cos.blog.model;

import java.sql.Timestamp;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Reply {

	private int id;
	private	int userId;
	private int boardId;
	private String content;
	private Timestamp createDate;
	
}

 

6. Repository (DAO) 만들기

더보기

UsersRepository

package com.cos.blog.repository;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.cos.blog.db.DBConn;
import com.cos.blog.model.Users;

public class UsersRepository {

	private static final String TAG = "UsersRepository : ";

	// 싱글톤
	private static UsersRepository instance = new UsersRepository();

	private UsersRepository() {
	}

	public static UsersRepository getInstance() {
		return instance;
	}

	private Connection conn = null;
	private PreparedStatement pstmt = null;
	private ResultSet rs = null;

	public int save(Users user) {

		final String SQL = "INSERT INTO USERS(id, username, password, email, address, userRole, createDate)"+
				"VALUES(USERS_SEQ.nextval,?,?,?,?,?,sysdate)";

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			// 여기에 물음표 완성하기
			pstmt.setString(1, user.getUsername());
			pstmt.setString(2, user.getPassword());
			pstmt.setString(3, user.getEmail());
			pstmt.setString(4, user.getAddress());
			pstmt.setString(5, user.getUserRole());

			return pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "save : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt);
		}

		return -1;
	}

	public int update(Users user) {

		final String SQL = "";

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			// 여기에 물음표 완성하기

			return pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "update : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt);
		}

		return -1;
	}

	public int deleteById(int id) {

		final String SQL = "";

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			// 여기에 물음표 완성하기

			return pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "deleteById : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt);
		}

		return -1;
	}
	
	public List<Users> findAll() {

		final String SQL = "";
		List<Users> users = new ArrayList<>();

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			
			// 여기에 물음표 완성하기
			// while 돌려서 rs -> java 오브젝트에 집어넣기

			return users;

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "findAll : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}

		return null;
	}
	
	public Users findById(int id) {

		final String SQL = "";
		Users user = new Users();

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			
			// 여기에 물음표 완성하기
			// if 해서 rs -> java 오브젝트에 집어넣기

			return user;

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "findById : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}

		return null;
	}

}

 

BoardRepository

package com.cos.blog.repository;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.cos.blog.db.DBConn;
import com.cos.blog.model.Board;
import com.cos.blog.model.Users;

public class BoardRepository {

	private static final String TAG = "BoardRepository : ";

	// 싱글톤
	private static BoardRepository instance = new BoardRepository();

	private BoardRepository() {
	}

	public static BoardRepository getInstance() {
		return instance;
	}

	private Connection conn = null;
	private PreparedStatement pstmt = null;
	private ResultSet rs = null;

	public int save(Board board) {

		final String SQL = "";

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			// 여기에 물음표 완성하기

			return pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "save : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt);
		}

		return -1;
	}

	public int update(Board board) {

		final String SQL = "";

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			// 여기에 물음표 완성하기

			return pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "update : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt);
		}

		return -1;
	}

	public int deleteById(int id) {

		final String SQL = "";

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			// 여기에 물음표 완성하기

			return pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "deleteById : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt);
		}

		return -1;
	}
	
	public List<Board> findAll() {

		final String SQL = "";
		List<Board> boards = new ArrayList<>();

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			
			// 여기에 물음표 완성하기
			// while 돌려서 rs -> java 오브젝트에 집어넣기

			return boards;

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "findAll : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}

		return null;
	}
	
	public Board findById(int id) {

		final String SQL = "";
		Board board = new Board();

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			
			// 여기에 물음표 완성하기
			// if 해서 rs -> java 오브젝트에 집어넣기

			return board;

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "findById : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}

		return null;
	}

}

 

ReplyRepository

package com.cos.blog.repository;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.cos.blog.db.DBConn;
import com.cos.blog.model.Board;
import com.cos.blog.model.Reply;
import com.cos.blog.model.Users;

public class ReplyRepository {

	private static final String TAG = "BoardRepository : ";

	// 싱글톤
	private static ReplyRepository instance = new ReplyRepository();

	private ReplyRepository() {
	}

	public static ReplyRepository getInstance() {
		return instance;
	}

	private Connection conn = null;
	private PreparedStatement pstmt = null;
	private ResultSet rs = null;

	public int save(Reply reply) {

		final String SQL = "";

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			// 여기에 물음표 완성하기

			return pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "save : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt);
		}

		return -1;
	}

	public int update(Reply reply) {

		final String SQL = "";

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			// 여기에 물음표 완성하기

			return pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "update : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt);
		}

		return -1;
	}

	public int deleteById(int id) {

		final String SQL = "";

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			// 여기에 물음표 완성하기

			return pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "deleteById : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt);
		}

		return -1;
	}
	
	public List<Reply> findAll() {

		final String SQL = "";
		List<Reply> replies = new ArrayList<>();

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			
			// 여기에 물음표 완성하기
			// while 돌려서 rs -> java 오브젝트에 집어넣기

			return replies;

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "findAll : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}

		return null;
	}
	
	public Reply findById(int id) {

		final String SQL = "";
		Reply reply = new Reply();

		try {

			conn = DBConn.getConnection();
			pstmt = conn.prepareStatement(SQL);
			
			// 여기에 물음표 완성하기
			// if 해서 rs -> java 오브젝트에 집어넣기

			return reply;

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(TAG + "findById : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}

		return null;
	}

}

 

7. interface Action과 action 들 만들기

더보기

Action

package com.cos.blog.action;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface Action {
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
}

 

UsersJoinAction

package com.cos.blog.action.user;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.cos.blog.action.Action;

public class UsersJoinAction implements Action  {

	// 컨트롤러가 해야될 일들을 위임해서 다른 클래스가 일을 하게 하는 것을 팩토리패턴이라고 한다
	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher dis = request.getRequestDispatcher("user/join.jsp");
		dis.forward(request, response);
	}
	
}

 

UsersJoinProcAction

package com.cos.blog.action.user;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.cos.blog.action.Action;
import com.cos.blog.model.RoleType;
import com.cos.blog.model.Users;
import com.cos.blog.repository.UsersRepository;
import com.cos.blog.util.Script;

public class UsersJoinProcAction implements Action  {
	
	// 컨트롤러가 해야될 일들을 위임해서 다른 클래스가 일을 하게 하는 것을 팩토리패턴이라고 한다
	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 0. // 페이지 오류를 막기위해(공격 등) 유효성 검사부터 해야한다
		if(request.getParameter("username").equals("") ||
				request.getParameter("username") == null ||
				request.getParameter("password").equals("") ||
				request.getParameter("password") == null ||
				request.getParameter("email").equals("") ||
				request.getParameter("email") == null ||
				request.getParameter("address").equals("") ||
				request.getParameter("address") == null) {
			
			// 로그하나 남겨야함
			return;
			
		}
		
		// 1. 파라메터 받기 (x-www-form-urlencoded)라는 MIME타입 key=value
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String email = request.getParameter("email"); // postman등으로 공격하면 형식에 맞지않게 보낼수 있기 때문에 유효성체크 해줘야한다(지금은 안함)
		String address = request.getParameter("address");
		String userRole = RoleType.USER.toString();
		
		
		// 2. User 오브젝트 변환
		Users user = Users.builder()
				.username(username)
				.password(password)
				.email(email)
				.address(address)
				.userRole(userRole)
				.build();
		
		
		// 3. DB 연결 - UserRepository의 save() 호출
		UsersRepository usersRepository = UsersRepository.getInstance();
		int result = usersRepository.save(user);
		
		// 4. index.jsp 페이지로 이동
		if(result == 1) {
			RequestDispatcher dis = request.getRequestDispatcher("index.jsp");
			dis.forward(request, response);
		} else {
			Script.back("회원가입에 실패하였습니다.", response);
		}
			
	}
}

 

8. UsersController 만들기

더보기
package com.cos.blog.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.cos.blog.action.Action;
import com.cos.blog.action.user.UsersJoinAction;
import com.cos.blog.action.user.UsersJoinProcAction;

@WebServlet("/user")
public class UsersController extends HttpServlet {

	private static final String TAG = "UsersController : ";

	private static final long serialVersionUID = 1L;

	public UsersController() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doProcess(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doProcess(request, response);
	}

	// 어떠한 형식의 요청이 오든 여기서 처리
	protected void doProcess(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String cmd = request.getParameter("cmd");

		System.out.println(TAG + "doProcess : " + cmd);

		Action action = router(cmd);
		action.execute(request, response);

	}

	public Action router(String cmd) {

		if (cmd.equals("join")) {

			// 회원가입 페이지로 이동
			// http://localhost:8000/blog/user?cmd=join
			// 컨트롤러가 해야될 일들을 위임해서 다른 클래스(UsersJoinAction)가 일을 하게 하는 것을 !팩토리패턴!이라고 한다
			return new UsersJoinAction();

		} else if (cmd.equals("joinProc")) {

			// 회원가입을 진행 한 후 -> index.jsp로 이동
			return new UsersJoinProcAction();

		} else if (cmd.equals("update")) {
			// 회원 수정 페이지로 이동 (세션에 User 오브젝트를 가지고 있을 예정)
		} else if (cmd.equals("updateProc")) {
			// 회원 수정을 진행 한 후 -> index.jsp로 이동
		} else if (cmd.equals("delete")) {
			// 회원 수정페이지에서 삭제할 예정 - 회원 삭제를 진행 한 후 -> 로그아웃을 하고 -> index.jsp로 이동
		} else if (cmd.equals("login")) {
			// 회원 로그인 페이지로 이동
		} else if (cmd.equals("loginProc")) {
			// 회원 로그인을 수행한 후 -> 세션에 등록을 하고 -> index.jsp로 이동
		}
		return null;

	}
}

 

9. 자바스크립트를 이용하는 Script 만들기

더보기
package com.cos.blog.util;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

public class Script {
	
	public static void back(String msg, HttpServletResponse response) {
		try {
			response.setCharacterEncoding("utf-8");
			response.setContentType("text/html; charset=utf-8"); // 받는 쪽에서 해석하도록
			PrintWriter out = response.getWriter();
			out.println(
					"<script>\r\n" + 
							"alert(\"" + msg + "\");\r\n" + 
							"history.back();\r\n" + 
					"</script>");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

다음에 계속

 

 

 

참고

context.xml // web.xml

https://parkcheolu.tistory.com/130

 

톰캣] Context 설정

-이 내용은 톰캣 버전 7 을 기준으로 한다. 1. Context 란 Context 설정은 톰캣에서 구동되는 하나의 웹 어플리케이션 자체의 설정을 의미한다. 주요 설정으로 컨텍스트패스, 어플리케이션 디렉토리 ��

parkcheolu.tistory.com

 

 

+ Recent posts