<template>
<div>
<input type="number" v-model.number="numberModel">
<br>
<textarea v-model="message"></textarea>
<br>
<select v-model="city">
<option value="02">Seoul</option>
<option value="032">Incheon</option>
</select>
<br>
<label><input type="checkbox" v-model="checked" value="seoul">seoul</label>
<label><input type="checkbox" v-model="checked" value="busan">busan</label>
<label><input type="checkbox" v-model="checked" value="jeju">jeju</label>
<br>
<span>checked:{{checked}}</span>
<br>
<label><input type="radio" v-model="picked" value="seoul">seoul</label>
<label><input type="radio" v-model="picked" value="busan">busan</label>
<label><input type="radio" v-model="picked" value="jeju">jeju</label>
<br>
<span>picked:{{picked}}</span>
<img v-bind:src="imgSrc">
</div>
</template>
<script>
export default {
data() {
return {
numberModel : 123456,
message: '여러 줄 입력이 가능한 어저고',
city : '032',
checked: [],
picked: '',
// radioValue1 : 'seoul',
// radioValue2 : 'busan',
// radioValue3 : 'jeju',
imgSrc: 'https://ko.vuejs.org/images/logo.png'
}
},
}
</script>
servlet = web에서 동작하는 클래스
.jsp 파일은 변경해도 서버 재시동X 그러나 servlet.class 파일은 서버 재시동O
@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
private String message;
public void init() {
message = "Hello World!";
}
//컨테이너가 request, response을 내려준다
//localhost:8080/hello-servlet 접속시 doGet() 실행
//http통신이 이루어진다 = tcp기반의 신뢰있는 통신
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
//new()하지 않는다-> 서버를 실행하면 컨테이너 안에 다 올라와있다
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>" + message + "</h1>");
out.println("</body></html>");
}
public void destroy() {
}
}
---------------------------------------------------------------
//%=서버가 해석하는 애노테이션, @=디렉티브
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
//calcResult.jsp
<body>
<h1>NUM1 : ${param.num1}</h1>
<h1>NUM2 : ${param.num2}</h1>
<h1>SUM : ${Integer.parseInt(param.num1)+Integer.parseInt(param.num2)}</h1>
</body>
Java Servlet API에서 제공하는 인터페이스
서블릿 간의 통신 또는 서블릿에서 JSP 페이지로의 포워딩과 같은 기능을 수행하는데 사용
웹 애플리케이션에서 서블릿이나 JSP 페이지 간의 요청 처리 및 리소스 공유를 위해 활용
Http 메시지의 형태로 들어오는 요청에 대한 정보를 파악하기 위해 제공
getRequestDispatcher() : 데이터 전달
브라우저로 전송하기 위해서 데이터를 만들어내는데 필요한 기능들을 제공
sendRedirect() : 브라우저에 이동을 지시
표현 <--> 비지니스 <--> 데이터 접근 <--> DB
컨트롤러 모델 DAO
뷰
컨트롤러에서는 화면에 필요한 데이터를 화면쪽으로 전달해주는데 이런 데이터들을 담당하는 객체를 모델(Model)이라고 한다
JSP로 전달된 모델은 EL 등을 이용해서 처리한다
JSP는 EL과 JSTL을 이용한다
현재 접속한 url에서 새로고침하면 post 방식으로 이루어진다
service 실제 처리들을 모아놓은 패키지
enum타입 사용시의 장점 : 싱글톤
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<ul>
<c:forEach var="num" begin="1" end="10">
<li>${num}</li>
</c:forEach>
</ul>
<c:if test="${list.size()%2==0}">
짝수
</c:if>
<c:if test="${list.size()%2!=0}">
홀수
</c:if>
<c:choose>
<c:when test="${list.size()%2==0}">짝수</c:when>
<c:otherwise>홀수</c:otherwise>
</c:choose>

미리 커넥션을 연결해두고 보관하면서 필요할 때마다 사용 후 반환하는 개념
Connection Pool 라이브러리 : DBCP, C3PO, HikariCP
표현계층, 비지니스계층-> DTO :
데이터 전송을 위해 사용, VO만으로 표현 할 수 없는 데이터를 DTO에 담아 표현
데이터 접근 계층-> VO :
데이터의 표현과 전달을 위한 용도로 사용
DB의 테이블의 컬럼들을 가져와 담는 객체(getter만 존재)
level 설정
Appender
톰캣 카탈리나 홈, 카탈리나 베이스 가 뭔지 공부
톰캣 User Guide 1~11(class loading) 까지 공부
https://tomcat.apache.org/tomcat-9.0-doc/index.html
세션, 쿠키, 필터, 리스너 개념, 동작원리 -> 로그인 처리
page(object)
(http)request
(http)response
session
application
exception
웹은 과거의 상태를 유지하지 않는다 = stateless -> 기존 사용자에를 기억하지 않는다
요청과 응답을 하나의 단위로 처리하면서 기존 사용자에 대한 정보를 기억하지 않는다
-> sendRedirect할 때 req,resp destory
무상태 특징으로 인해 기존의 방문자를 기억하기 위한 특별한 메커니즘을 사용 = httpsession, cookie, jwt
세션트래킹 = 로그인 유지를 위한 모든 기능
VO -> DAO -> DTO -> (enum)Service -> Controller
VO (Value Object): 데이터를 담는 자바 객체
DAO (Data Access Object): 데이터베이스와의 상호작용을 추상화한 객체
DTO (Data Transfer Object): 클라이언트와 서버 간의 데이터 전송을 위한 객체
View------Controller-----Model-----DB
jsp-------Controller(DTO)-----Service(DAO)------DAO(VO)
MapperUtil() {
this.modelMapper = new ModelMapper();
this.modelMapper.getConfiguration()
.setFieldMatchingEnabled(true)
.setFieldAccessLevel(Configuration.AccessLevel.PRIVATE)
.setMatchingStrategy(MatchingStrategies.STRICT);
} 주석달기