오늘은
요즘에는 학원에서 하는 수업이든 혼자 잠깐씩 해보는 연습 코딩이든
수시로 깃허브에 커밋을 하는 습관을 들이려고 노력중에 있습니다
자주 커밋을 해줄수록 지금 하는 작업이 어떤 작업인지 세세하게 기록할 수 있고
나중에 오류가 났을 때 과거의 코드를 모두 찾아보기에 좋기 때문에
조금은 손이 바빠지고 신경을 더 써야 할지라도
습관이 될 수 있도록 노력하고 있습니다
학원 수업
regform.html
javascript, css, html
templete 언어(엔진) - jsp, 타임리프(Thymeleaf)
* JSP
- 스크립트릿(<% %>)
- EL(Expression Language) 언어 : 연산
=> JSTL(Jsp Standard Tag Library) = 제어문, 언어, DB
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>구구단</title>
</head>
<body>
<c:set var="dan" value="6" />
<c:forEach var="i" begin="1" end="9">
${dan} × ${i} = ${dan*i} <br>
</c:forEach>
<br>
<h3> 전체 구구단</h3>
<c:forEach var="i" begin="2" end="9">
<c:forEach var="j" begin="1" end="9">
${i} × ${i} = ${i*j} <br>
</c:forEach>
<br>
</c:forEach>
<h3> 전체 구구단</h3>
<table>
<c:forEach var="i" begin="1" end="9">
<tr>
<c:forEach var="j" begin="2" end="9">
<td width="100px">${j} × ${i} = ${i*j}</td>
</c:forEach>
</tr>
</c:forEach>
</table>
</body>
</html>
jstl 라이브러리 - taglib download
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ 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>JSTL 예제</title>
</head>
<body>
<!-- 짝수/홀수 판별하는 프로그램 -->
<%
int num = 11;
if(num % 2 == 0){
out.println("짝수");
} else {
out.println("홀수");
}
%>
<br>
<!-- EL로 표현 -->
<!-- 변수 선언 c:set var=변수 value="값"/ -->
<!-- 출력문 c:out value="" -->
<!-- 조건문 c:if는 else문이 없다 -->
<c:set var="num" value="11"></c:set>
<c:if test="${num % 2 == 0}">
<c:out value="${'짝수입니다'}"></c:out>
</c:if>
<c:if test="${num % 2 != 0}">
${'홀수입니다'} <!-- c:out은 생략 가능 -->
</c:if>
<br>
<!-- 다중 조건문 -->
<!-- c:choose ~ c:when ~ c:otherwise -->
<c:choose>
<c:when test="${num % 2 == 0}">
${'짝수입니다'}
</c:when>
<c:otherwise>
${'홀수입니다'}
</c:otherwise>
</c:choose>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>학점 계산 프로그램</title>
</head>
<body>
<!-- 학점 점수 변수 선언 -->
<!-- request.getParameter("score") -->
<c:set var="score" value="${param.score}"></c:set>
<h2>시험 점수: ${score}</h2>
<c:choose>
<c:when test="${score >= 90 and score <= 100}">
<p>A학점</p>
</c:when>
<c:when test="${score >= 80 and score < 90}">
<p>B학점</p>
</c:when>
<c:when test="${score >= 70 and score < 80}">
<p>C학점</p>
</c:when>
<c:when test="${score >= 60 and score < 70}">
<p>D학점</p>
</c:when>
<c:otherwise>
<p>F학점</p>
</c:otherwise>
</c:choose>
</body>
</html>
oracle db, controller(서블릿)
- jdbcTest
student 테이블 생성
StudentVO 클래스
StudentDAO 클래스
StudentConteroller(서블릿) -> /insert,, /list 경로매핑
학생 등록 - studentform.jsp ->/insert
<%@ 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>
<link rel="stylesheet" href="../resources/css/style.css">
</head>
<body>
<section id="content">
<h2>학생 등록</h2>
<hr>
<form action="/insertstudent.do">
<ul>
<li>
<label>이름</label>
<input type="text" name="username">
</li>
<li>
<label>학교</label>
<input type="text" name="univ">
</li>
<li>
<label>생일</label>
<input type="date" name="birth" class="birth">
</li>
<li>
<label>이메일</label>
<input type="email" name="email">
</li>
</ul>
<div>
<button type="submit">등록</button>
<button type="reset">취소</button>
</div>
</form>
</section>
</body>
</html>
학생 목록 - studentlist.jsp ->/list
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>학생 목록</title>
<link rel="stylesheet" href="../resources/css/style.css">
</head>
<body>
<section id="content">
<h2>학생 목록</h2>
<hr>
<p><a href="/studentform.do">[학생 추가]</a></p>
<table>
<tr>
<th>번호</th>
<th>이름</th>
<th>학교</th>
<th>생일</th>
<th>이메일</th>
</tr>
<c:forEach items="${students}" var="s" varStatus="i">
<tr>
<td>${i.count}</td>
<td>${s.username}</td>
<td>${s.univ}</td>
<td>${s.birth}</td>
<td>${s.email}</td>
</tr>
</c:forEach>
</table>
</section>
</body>
</html>
서블릿 매핑경로
사전 설정 - 톰캣서버 > modules > edit > Path('/')로 변경함
1. '/'
2. *.do
3. *.jsp
package controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
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 student.Student;
import student.StudentDAO;
@WebServlet("*.do") // '/'루트 경로 아래에 do로 끝나는 확장자인 파일은 모두 올 수 있음
public class StudentController extends HttpServlet {
private static final long serialVersionUID = 1L;
// 객체 생성
StudentDAO sDAO;
public StudentController() {
sDAO = new StudentDAO();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 한글 인코딩
request.setCharacterEncoding("utf-8");
// 컨텐츠 유형 응답하기
response.setContentType("text/html; charset=utf-8");
// 경로(uri) 설정 - 커맨드패턴(command)
// http:localhost:8000/student/studentlist.jsp
// 맨 뒤 경로 추출 - lastIndexOf('/'), subString(0)
String uri = request.getRequestURI();
String command = uri.substring(uri.lastIndexOf("/"));
System.out.println(uri);
System.out.println(uri.lastIndexOf("/"));
System.out.println(command);
// 이동할 페이지
String nextPage = "";
if(command.equals("/studentlist.do")) {
List<Student> students = sDAO.getStudentList();
// 모델 생성
request.setAttribute("students", students);
// 뷰 페이지로 이동
nextPage = "/student/studentlist.jsp";
} else if(command.equals("/studentform.do")) {
// 폼에 입력된 데이터 받기
nextPage = "/student/studentform.jsp";
} else if(command.equals("/insertstudent.do")) {
// 폼에 입력된 데이터 받기
String username = request.getParameter("username");
String univ = request.getParameter("univ");
String birth = request.getParameter("birth");
String email = request.getParameter("email");
// db에 저장
Student s = new Student();
s.setUsername(username);
s.setUniv(univ);
s.setBirth(birth);
s.setEmail(email);
sDAO.insertStudent(s);
nextPage = "/studentlist.do";
}
RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
dispatch.forward(request, response);
}
}
oracle과 mysql 차이
- mysql: insert할때 sql에서 sequence id를 뺀다
- oracle: insert할때 sql에서 sequence id를 넣는다
public static void main(String[] args) {
Connection conn = null;
String driverClass = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/jwebdb?serverTime=Asia/Seoul";
String user = "jweb";
String password = "pwjweb";
JavaScript 공부
<<JS 응용>>
Truthy & Falsy = 참 같은 값, 거짓 같은 값
자바스크립트에 조건식의 경우
불리언 값을 넣지 않아도
참이나 거짓으로 인식이 되는 속성들이 있다
=> 자바스크립트가 자신만의 특정한 기준으로 참이나 거짓을 판별
빈문자열, undefined, null, 숫자0, NaN = False로 인식 = Falsy
문자열, 빈배열, 빈 객체 리터럴, 숫자값, 문자0, 문자열false, Infinity => True로 인식 = Truthy
spread 연산자
= 객체 프로퍼티 펼치기 -> ...변수명 으로 사용
=> 배열에도 사용 가능하다
싱글 스레드
- 동기적 처리의 단점 = 하나의 작업이 너무 오래 걸리게 될 시 모든 작업이
오래 걸리는 하나의 작업이 종료되기 전 까지 올 스탑 되기 때문에
전반적인 흐름이 느려진다
멀티 스레드
- 스레드를 여러개 사용하여 각 작업을 할당시켜 프로그램을 작동하는 방식
=> 자바스크립트는 싱글 쓰레드로 동작하기 때문에 멀티 스레드 방법은 사용이 불가능하다
=> 싱글 스레드 방식으로 동기적 작업의 단점을 극복하기 위해
여러 개의 작업을 동시에 실행시킴
= 비동기 작업
= 먼저 작성된 코드의 결과를 기다리지 않고 다음 코드를 바로 실행함
비동기 함수
- setTimeout() : 설정된 시간만큼 딜레이 후 함수 실행
2023. 11. 28 (화)
프로그래머 도전기 77일차 (0) | 2023.12.01 |
---|---|
프로그래머 도전기 76일차 (0) | 2023.11.30 |
프로그래머 도전기 74일차 (1) | 2023.11.27 |
프로그래머 도전기 73일차 (4) | 2023.11.23 |
프로그래머 도전기 72일차 (5) | 2023.11.22 |