#
SOLID 중 SRP
1.단일책임원칙(SRP : Single Responsibility Principle)
한 클래스 한 기능만 책임진다.
클래스가 바뀌어야 하는 이유는 오직 하나여야 한다.
(일반적으로 클래스와 메소드에 적용
한 가지 특정 동작, 개념, 카테고리…)
하나의 역할(메소드)
하나의 동작(클래스)
#
싱글톤
오직하나의 객체만 생성
생성자 private
메소드로 호출하고 다시
이 녀석을 메소드로 내보낸다.
#MVC 디자인패턴
서블렛 = 컨터런트, 서블렛컨테이너
#
MVC 도 종류가 있습니다.
모델2 MVC 디자인패턴
MVC 프레임워크
#jsp 예제
●20240307 mysql 문
●boardApp 프로젝트생성
- lib에 3개 파일 붙여넣기(sql커넥트1개 , jstl 2개)
- mysql-connector-java-8.0.27.jar 빌드패스
-webapp폴더 생성,
-webapp폴더에 css, js(자바스크립트), images, html
●webapp폴더에 index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
body{
width: 960px;
height: 100vh;
margin: 0;
padding : 0;
margin: 0 auto;
}
.wrap{
width: 100%;
height: 600px;
}
</style>
</head>
<body>
<%@ include file="header.jsp" %>
<div class="wrap">
<h1>본문 부분</h1>
</div>
<%@ include file="footer.jsp" %>
</body>
</html>
-WEB-INF폴더에 errors폴더생성
-WEB-INF폴더에 board폴더생성
-boar폴더 안에
(getBoard.jsp, insertBoard.jsp, insertUser.jsp, insertUserProcess.jsp, longin.jsp)
src/main/java안에 com.choong.biz폴더생성
src/main/java안에 com.choong.web.controller폴더생성
com.choong.web.controller안에 DispatcherServlet
1.프론트 컨트롤러 DispatcherServlet.java
1)로그인 : login.do
login.jsp
2)회원가입 : insertUser.do
insertUser.jsp
insertUserProcess.jsp
3)로그아웃 : logout.do
4)글 등록 처리 : insertBoard.do
insertBoard.jsp
5)글 수정 처리 : updateBoard.do
6)글 삭제 처리 : deleteBoard.do
7)글 상세 조회 : getBoard.do
getBoard.jsp
8)글 목록 검색 처리 : getBoardList.do
getBoardList.jsp
●com.choong.biz.user폴더안에 UserDAO.java
package com.choong.biz.user;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.mysql.cj.xdevapi.Result;
import dbconnection.MyDBConnection;
public class UserDAO {
private Connection con = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
//userDTO sql문
private String USER_GET = "select * from users where id=?";
private String USER_LIST = "select * from users";
private String USER_INSERT = "insert into users values(?,?,?,?)";
private String USER_UPDATE = "update users set name=?, role=? where id=?";
private String USER_DELETE = "delete users where id=?";
//회원 관련 CRUD(create, read, update, delete)
//1. 회원 상세조회
public UserDTO getUser(String id) { //DispacherServlet 수정
UserDTO user = null;
try {
con = MyDBConnection.getConnection();
pstmt = con.prepareStatement(USER_GET);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
rs.next();
user = new UserDTO();
user.setId(rs.getString("id"));
user.setPassword(rs.getString("password"));
user.setName(rs.getString("name"));
user.setRole(rs.getString("role"));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
MyDBConnection.close(null, pstmt, con);
}
return user;
}
//private String USER_DELETE = "delete users where id=?";
//2. 회원 삭제
public void deleteUser(String id) {
try {
con = MyDBConnection.getConnection();
pstmt = con.prepareStatement(USER_DELETE);
pstmt.setString(1, id);
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
MyDBConnection.close(rs, pstmt, con);
}
}
//private String USER_UPDATE = "update users set name=?, role=? where id=?";
//3. 회원 수정
public void updateUser(UserDTO dto) {
try {
con = MyDBConnection.getConnection();
pstmt = con.prepareStatement(USER_DELETE);
pstmt.setString(1, dto.getName());
pstmt.setString(2, dto.getRole());
pstmt.setString(3, dto.getId());
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
MyDBConnection.close(rs, pstmt, con);
}
}
//private String USER_INSERT = "insert into users values(?,?,?,?)";
//4. 회원 등록
public void insertUser(UserDTO dto) {
try {
con = MyDBConnection.getConnection();
pstmt = con.prepareStatement(USER_INSERT);
pstmt.setString(1, dto.getId());
pstmt.setString(2, dto.getPassword());
pstmt.setString(3, dto.getName());
pstmt.setString(4, dto.getRole());
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
MyDBConnection.close(rs, pstmt, con);
}
}
/*
//내가 짠 코드
//private String USER_LIST = "select * from users";
//5. 회원 목록 조회
public UserDTO getUserList(UserDTO dto) {
try {
con = MyDBConnection.getConnection();
pstmt = con.prepareStatement(USER_LIST);
pstmt.setString(1, dto.getId());
pstmt.setString(2, dto.getPassword());
pstmt.setString(3, dto.getName());
pstmt.setString(4, dto.getRole());
pstmt.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
MyDBConnection.close(rs, pstmt, con);
}
return
}
*/
//private String USER_LIST = "select * from users";
//5. 회원 목록 조회
public List<UserDTO> getUserList() {
List<UserDTO> userList = new ArrayList<UserDTO>();
try {
con = MyDBConnection.getConnection();
pstmt = con.prepareStatement(USER_LIST);
rs=pstmt.executeQuery();
while(rs.next()) {
UserDTO user = new UserDTO();
user.setId(rs.getString("id"));
user.setPassword(rs.getString("password"));
user.setName(rs.getString("name"));
user.setRole(rs.getString("role"));
userList.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
MyDBConnection.close(rs, pstmt, con);
}
return userList;
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●com.choong.biz.user폴더안에 UserDTO.java
package com.choong.biz.user;
import java.util.Objects;
public class UserDTO {
private String id;
private String password;
private String name;
private String role;
//생성자
public UserDTO() {
super();
}
//전체 생성하는 생성자
public UserDTO(String id, String password, String name, String role) {
super();
this.id = id;
this.password = password;
this.name = name;
this.role = role;
}
//getter, setter
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
//toString
@Override
public String toString() {
return "UserDTO [id=" + id + ", password=" + password + ", name=" + name + ", role=" + role + "]";
}
//hashcode
@Override
public int hashCode() {
return Objects.hash(id, password);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UserDTO other = (UserDTO) obj;
return Objects.equals(id, other.id) && Objects.equals(password, other.password);
}
//getter, setter
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●com.choong.web.controller 폴더안에 DispatcherServlet.java
package com.choong.biz.user;
import java.util.Objects;
public class UserDTO {
private String id;
private String password;
private String name;
private String role;
//생성자
public UserDTO() {
super();
}
//전체 생성하는 생성자
public UserDTO(String id, String password, String name, String role) {
super();
this.id = id;
this.password = password;
this.name = name;
this.role = role;
}
//getter, setter
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
//toString
@Override
public String toString() {
return "UserDTO [id=" + id + ", password=" + password + ", name=" + name + ", role=" + role + "]";
}
//hashcode
@Override
public int hashCode() {
return Objects.hash(id, password);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UserDTO other = (UserDTO) obj;
return Objects.equals(id, other.id) && Objects.equals(password, other.password);
}
//getter, setter
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●dbconnection폴더안에 DBCon.java
package dbconnection;
public abstract class DBCon { //abstract 이거로 객체를 못만들게 한다.
//final static 상수라 변경하게 하지 못하게 합니다.
public final static String URL="jdbc:mysql://localhost:3306/boarddb?serverTimezone=UTC"; //shopdbdb이름만 변경
public final static String USER="root" ; // DB의 아이디
public final static String PASSWORD="my1234" ; //DB의 비밀번호
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●dbconnection폴더안에 MyDBConnection.java
package dbconnection;
//접속할떄 이렇게 사용해준다.
import static dbconnection.DBCon.PASSWORD;
import static dbconnection.DBCon.URL;
import static dbconnection.DBCon.USER;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MyDBConnection {//throws Exception : 넓게 던지는 것
// throws ClassCastException, SQLException : 구체적으로 던지는 것
public static Connection getConnection() throws SQLException { //여기서는 안던져도 되서 설정안합니다.
/* 1)여기서 처리 : public static Connection getConnection()
Connection con = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");//준비 //드라이브 파일을 메모리에 올린다.(가장먼저)
//con = DriverManager.getConnection(DBCon.URL,DBCon.URL,DBCon.PASSWORD);
con = DriverManager.getConnection(URL,USER,PASSWORD);//접속 //URL,USER,PASSWORD정해진틀을 DBCon에 있는 것을 static으로 가져왔습니다.
System.out.println("접속 성공");
} catch (ClassNotFoundException e) {
//e.printStackTrace(); //이게 나오면 쓰지않고 예외를 발생시켜서 처리하는 것이 좋다. //나중에 제거 또는 주석
System.out.println("예외 발생");
} catch(SQLException e) {
System.out.println("예외 발생");
//e.printStackTrace(); //이게 나오면 쓰지않고 예외를 발생시켜서 처리하는 것이 좋다.
}
return con;
*/
//2) 호출한 곳에서 try catch 사용 (public static Connection getConnection() throws SQLException)
Connection con = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");//준비 //드라이브 파일을 메모리에 올린다.(가장먼저)
//con = DriverManager.getConnection(DBCon.URL,DBCon.URL,DBCon.PASSWORD);
} catch (ClassNotFoundException e) {
//e.printStackTrace(); //이게 나오면 쓰지않고 예외를 발생시켜서 처리하는 것이 좋다. //나중에 제거 또는 주석
System.out.println("예외 발생");
}
con = DriverManager.getConnection(URL,USER,PASSWORD);//접속 //URL,USER,PASSWORD정해진틀을 DBCon에 있는 것을 static으로 가져왔습니다.
System.out.println("접속 성공");
return con;
}
//열었다면 닫아줘야합니다.
public static void close(ResultSet rs, PreparedStatement pstmt, Connection con) {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con != null) {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●WEB-INF폴더안에 css폴더 생성
●WEB-INF폴더안에 html폴더생성
●WEB-INF폴더안에 images폴더 생성
●WEB-INF폴더안에 js폴더 생성
●WEB-INF폴더안에 board폴더 안에 getBoard.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
스크립틀리태그와 표현식을 안쓰게 할려고, jstl을 사용합니다.
스크립틀리가 좋은점은, 자바그대로 사용하는 장점이 있습니다.
--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
td{
height: 40px;
line-height: 40px;
}
.tdTitle{
width: 200px;
text-align: center;
background-color: pink;
}
.tdContent{
width: 400px;
padding-left: 20px;
}
.tdContent>input{
width : 350px;
height: 30px;
line-height: 30px;
}
.tdTextarea{
height: 200px;
line-height: 200px;
}
.tdTextarea > textarea{
width: 350px;
height: 190px;
line-height: 190px;
}
.tdSubmit{
text-align: center;
}
</style>
</head>
<body>
<%@ include file="../../header.jsp" %>
<h2>게시판 글 등록 화면</h2>
<hr>
<form action="updateBoard.do" method="post">
<input type="hidden" name="seq" value = " ">
<table border="1">
<tr>
<td class="tdTitle"> 제목 </td>
<td class="tdContent">
<input type="text" name="title" value=" " readonly>
</td>
</tr>
<tr>
<td class="tdTitle"> 작성자 </td>
<td class="tdContent">
<input type="text" name="writer" value=" ">
</td>
</tr>
<tr>
<td class="tdTitle"> 내용 </td>
<td class="tdContent tdTextarea">
</td>
</tr>
<tr>
<td class="tdTitle"> 등록일 </td>
<td class="tdContent">
</td>
</tr>
<tr>
<td class="tdTitle"> 조회수 </td>
<td class="tdContent">
</td>
</tr>
<tr>
<td class="tdSubmit" colspan="2">
<input type="submit" value="글수정">
</td>
</tr>
</table>
<%-- getRole()인 값이 ADMIN 일 때 처리할 부분,
ADMIN은 글삭제 권한이 있음
--%>
<%--
스크립틀리로 사용해서,
<%
if(user.getRole().eqauls("ADMIN")){
%>
<a href="deleteBoard.do?seq=<%=board.getSeq()%>">글삭제</a>
<%
}
%>
--%>
</form>
</body>
</html>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●WEB-INF폴더안에 board폴더 안에 insertBoard.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
td{
height: 40px;
line-height: 40px;
}
.tdTitle{
width: 200px;
text-align: center;
background-color: pink;
}
.tdContent{
width: 400px;
padding-left: 20px;
}
.tdContent>input{
width : 350px;
height: 30px;
line-height: 30px;
}
.tdTextarea{
height: 200px;
line-height: 200px;
}
.tdTextarea > textarea{
width: 350px;
height: 190px;
line-height: 190px;
}
.tdSubmit{
text-align: center;
}
</style>
</head>
<body>
<h2>게시판 글 등록 화면</h2>
<hr>
<form action="insertBoard.do" method="post">
<table border="1">
<tr>
<td class="tdTitle"> 제목 </td>
<td class="tdContent">
<input type="text" name="title">
</td>
</tr>
<tr>
<td class="tdTitle"> 작성자 </td>
<td class="tdContent">
<input type="text" name="writer">
</td>
</tr>
<tr>
<td class="tdTitle"> 내용 </td>
<td class="tdContent tdTextarea">
<textarea name="content"></textarea>
</td>
</tr>
<tr>
<td class="tdSubmit" colspan="2">
<input type="submit" value="글등록">
</td>
</tr>
</table>
</form>
</body>
</html>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●WEB-INF폴더안에 board폴더 안에 insertUser.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
td{
height: 40px;
line-height: 40px;
}
.tdTitle{
width: 200px;
text-align: center;
background-color: pink;
}
.tdContent{
width: 400px;
padding-left: 20px;
}
.tdContent>input{
width : 250px;
height: 30px;
line-height: 30px;
}
.tdRadion{
width: 30px;
}
.tdSubmit{
text-align: center;
}
</style>
</head>
<body>
<h2>회원 가입 화면</h2>
<form action="insertUser.do" method="post">
<table border="1">
<tr>
<td class="tdTitle">아이디</td>
<td class="tdContent"><input type="text" name="id" required="required" /> </td>
</tr>
<tr>
<td class="tdTitle">비밀번호</td>
<td class="tdContent"><input type="password" name="password" required="required" /> </td>
</tr>
<tr>
<td class="tdTitle">이름</td>
<td class="tdContent"><input type="text" name="name" required="required" /> </td>
</tr>
<tr>
<td class="tdTitle">권한</td>
<td class="tdContent tdRadio">
<input type="radio" name="role" value="USER" checked> USER
<input type="radio" name="role" value="ADMIN" > ADMIN
</td>
</tr>
<tr>
<td colspan="2" class="tdSubmit">
<input type="submit" value="회원가입" />
<input type="reset" value="가입취소" />
</td>
</tr>
</table>
</form>
</body>
</html>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●WEB-INF폴더안에 board폴더 안에 insertUserProcess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
td{
height: 40px;
line-height: 40px;
}
.tdTitle{
width: 200px;
text-align: center;
background-color: pink;
}
.tdContent{
width: 400px;
padding-left: 20px;
}
.tdContent>input{
width : 250px;
height: 30px;
line-height: 30px;
}
.tdRadion{
width: 30px;
}
.tdSubmit{
text-align: center;
}
</style>
</head>
<body>
<h2>회원 가입 결과 화면</h2>
<table border="1">
<tr>
<td class="tdTitle">아이디</td>
<td class="tdContent"> </td>
</tr>
<tr>
<td class="tdTitle">비밀번호</td>
<td class="tdContent"> </td>
</tr>
<tr>
<td class="tdTitle">이름</td>
<td class="tdContent"> </td>
</tr>
<tr>
<td class="tdTitle">권한</td>
<td class="tdContent tdRadio"> </td>
</tr>
</table>
</body>
</html>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●WEB-INF폴더안에 board폴더 안에 longin.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
td{
height: 40px;
line-height: 40px;
}
.tdTitle{
width: 200px;
text-align: center;
background-color: pink;
}
.tdContent{
width: 400px;
padding-left: 20px;
}
.tdContent>input{
width : 350px;
height: 30px;
line-height: 30px;
}
.tdSubmit{
text-align: center;
}
</style>
</head>
<body>
<h2>로그인 화면</h2>
<form action=login.do" method="post">
<table border="1">
<tr>
<td class="tdTitle">아이디</td>
<td class="tdContent"><input type="text" name="id" required="required" /> </td>
</tr>
<tr>
<td class="tdTitle">비밀번호</td>
<td class="tdContent"><input type="password" name="password" required="required" /> </td>
</tr>
<tr>
<td colspan="2" class="tdSubmit">
<input type="submit" value="로그인" /> </td>
</tr>
</table>
</form>
</body>
</html>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●WEB-INF폴더안에 errors폴더 안에 boardError.jsp
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Date date = new Date();
%>
<h1>예외가 발생되었습니다.</h1>
예외 발생 시간 : <%=date.toString() %>
</body>
</html>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●WEB-INF폴더안에 footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.footerWrap{
width: 100px;
height: 100px;
line-height: 100px;
background-color: cyan;
margin-top: 20px;
}
</style>
</head>
<body>
<div class="footerWrap">
<h1>footer 부분</h1>
</div>
</body>
</html>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●WEB-INF폴더안에 header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.headerWrap{
width: 100px;
height: 100px;
line-height: 100px;
background-color: cyan;
margin-bottom: 20px;
}
</style>
</head>
<body>
<div class="headerWrap">
<h1>header 부분</h1>
</div>
</body>
</html>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●WEB-INF폴더안에 index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
body{
width: 960px;
height: 100vh;
margin: 0;
padding : 0;
margin: 0 auto;
}
.wrap{
width: 100%;
height: 600px;
}
</style>
</head>
<body>
<%@ include file="header.jsp" %>
<div class="wrap">
<h1>본문 부분</h1>
</div>
<%@ include file="footer.jsp" %>
</body>
</html>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
●mysql
drop database if exists boardDB;
create database boardDB;
use boardDB;
drop table if exists users;
create table users(
id char(10) primary key,
password char(20) not null,
name varchar(50) not null,
role char(20)
);
select * from users;
insert into users values("a123","a123","홍길동","admin");
insert into users values("a124","a124","박디비","user");
insert into users values("a125","a125","이강산","user");
drop table if exists board;
create table board(
seq int primary key, -- 시퀀스 --
title varchar(200) not null,
writer varchar(20) not null,
content varchar(2000),
regDate datetime default current_timestamp,
count int default 0
);
select * from board;
insert into board(seq, title, writer, content) values(1, '테스트1','홍길동','aaa');
'5.JDBC > 2)JDBC_개념' 카테고리의 다른 글
JDBC_개념_Day_15(Ajax) (0) | 2024.04.03 |
---|---|
JDBC_개념_Day_14 (0) | 2024.03.08 |
JDBC_개념_Day_12 (1) | 2024.03.07 |
JDBC_개념_Day_11 (1) | 2024.03.05 |
JDBC_개념_Day_10 (0) | 2024.03.04 |