Contents
클라이언트 | |||
페이지요청 | 웹서버 | WAS | DB |
정적 데이터 처리 | 동적 데이터 처리 | ||
html,css,js,img... | 서블릿(컨테이너)생성 주소(url) - 코드 매핑 (연결) |
||
service 메서드 호출 | |||
doGet() / doPOST() 호출 (방식에 따라서) |
|||
동작 처리 후 응답 정보를 만들어서 리턴 |
MyServlet.java
package com.itwillbs.servlet;
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;
@WebServlet("/itwill")
public class MyServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println(" doGet() 메서드 호출 ");
System.out.println(" GET 방식으로 주소 호출하면 실행되는 메서드 ");
response.getWriter().append("<h1>Hello!</h1>");
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println(" doPost() 메서드 호출 ");
System.out.println(" Post 방식으로 주소 호출하면 실행되는 메서드 ");
}
}
ExServlet1.java
package com.itwillbs.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//해당 클래스 코드가 생긴다
//class HttpServlet{
//
//}
//서블릿 2.3 이전
public class ExServlet1 extends HttpServlet{
// alt shift S + V ( 오버라이딩 메서드 )
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
}
✔️ web.xml
👨🏻💻 배포서술자 :
배포 서술자(DD, Deployment Descriptor) 는 Java EE 스펙으로 웹 애플리케이션의 기본적인 설정을 위해 작성하는 파일로, 보통은 WEB-INF/web.xml 파일을 말한다.
배포 서술자는 web.xml 이외에도 EJB를 위한 ejb-jar.xml, 웹서비스를 위한 webservices.xml 등이 있으며, JSP와 서블릿만으로 구성된 경우에는 web.xml 파일만 사용하면 된다고 한다.
프로젝트 실행할 때 가장 먼저 호출
해당 파일에 오류가 생기면 표시가 잘 안남 -> 그 결과로 톰캣이 실행불가
web.xml 의 이점
1. 작성한 소스코드를 수정하지 않고도 웹 어플리케이션을 '커스터마이징' 할 수 있다.
2. 이미 테스트 된 소스코드의 수정을 최소화 한다.
3. 소스코드가 없어도 수정이 가능하다.
4. 재 컴파일 하지 않고 서버의 자원을 변경할 수 있다.
5. 접근제한, 보안, 오류페이지를 설정하고 초기화 값의 구성 등을 할 수 있다.
web.xml
<!-- 서블릿 사용가능하도록 매핑 -->
<servlet>
<servlet-name>ExServlet1</servlet-name>
<servlet-class>com.itwillbs.servlet.ExServlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ExServlet1</servlet-name>
<url-pattern>/ex1</url-pattern>
</servlet-mapping>
</web-app>
매핑 pattern 주소에서,
/ex1 대신에 *.ex1 을 넣으면, ex1로 끝나는 여러개의 주소를 제어 할 수 있다.
😰주의!
web.xml에 써주거나,
서블릿.java에서 @WebServlet("/ex2") 해주거나 둘 중 하나만!!
둘다 쓰면 에러남.
=> 하지만 매핑이 다른 경우 사용 가능!! (권장하지는 않음)
ExServlet.java
f11 으로 동작시키는 것 대신에, 서버에 주소를 쳐서 이동시켜보기
http://localhost:8088/JSP/ex1\
주석으로 //http://localhost:8088/JSP/ex1 달아놓고, ctrl 누른 상태에서 마우스를 대면 링크창으로 변한다.
ExSerlvet3.java
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ExServlet3 extends HttpServlet {
int cnt;
// http://localhost:8088/JSP/ex3
// http://localhost:8088/JSP/아이티윌.ex3
// http://localhost:8088/JSP/test.ex3
@Override
public void init() throws ServletException {
System.out.println(" 서블릿 최초 생성 할 때 실행! ");
cnt = 0;
System.out.println(" 서블릿 객체를 초기화! cnt = "+cnt);
}
//doGet() 오버라이딩 + web.xml 매핑 (/ex3)
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("ExServlet3_doGet() 호출! ");
System.out.println("cnt : "+(++cnt));
//response.getWriter().append("cnt : " + (cnt));
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println(" <html>" );
out.println(" <head></head> ");
out.println(" <body> " );
out.println(" <h1> cnt : " +cnt + "</h1> ");
out.println(" </body> ");
out.println(" </html>" );
out.close();
}
@Override
public void destroy() {
System.out.println("서블릿 소멸될 때 실행 ");
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
}
📗 JSP -Servlet
=> .jsp 파일은 .java파일(서블릿)으로 변경 후 .class파일로컴파일 후 실행
JSP -Servlet |
|
jsp - 스크립틀릿 <% %> | servlet - service() 안에 구현 |
jsp - 표현식 <%=name%> | servlet - service() 안에 구현 / out.println(name) |
jsp - 선언문 <%! %> | servlet - 서블릿 클래스의 멤버형태로 변경 |
jsp - html 태그 | servlet - service() 안에 구현 / out.write() |
jsp - 디렉티브 <%@ %> | servlet - 객체 생성 시 참고 |
📗* EL (Expression Language) 표현식
Expression Language,
=> out.println() / <%= %> 사용해서 출력 (X)
${ } 형태로 변경
톰캣 라이브러리 설치
필수임
https://tomcat.apache.org/download-taglibs.cgi
Apache Tomcat® - Apache Taglibs Downloads
Welcome to the Apache Taglibs download page. This page provides download links for obtaining the latest version of the Apache Standard Taglib, as well as links to the archives of older releases. You must verify the integrity of the downloaded files. We pro
tomcat.apache.org
taglibs-standard-impl-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
taglibs-standard-jstlel-1.2.5.jar
${변수명} <%=변수명%> 동일한 의미
${객체명.변수} / ${객체명['변수명']}
=> private 변수에 직접 접근 가능
💡 사실은 직접 접근하는게 아니다. (해당 set 메서드 / get 메서드 호출하는 것)
${ 연산식 }
📗 EL 표현식 내장 객체
객체명 | 내용 |
${pageScope / requestScope / sessionScope / applicationScope } | 각 각의 영역에 저장 / 공유 (jsp 내장 객체랑 공유 가능) |
${param / paramValues } | 파라메터 정보 처리 |
${header / headerValues } | 헤더 정보 처리 |
${Cookie } | JSP 쿠키 |
${initParam } | 초기화 정보 |
${pageContext } | 페이지 정보 |
https://cocoon1787.tistory.com/733
[개발상식] MVC 패턴이란? (Model-View-Controller)
🚀 이번 포스팅은 개발자 면접에서 자주 나오는 질문 중의 하나인 "MVC패턴"에 대한 내용입니다. MVC패턴의 의미와 사용해야 하는 이유, 사용 예시 등등에 대해 알아보겠습니다. 💡 MVC 패턴이란?
cocoon1787.tistory.com
paramTest.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>paramTest.html</h1>
<form action = "paramPro.jsp" method ="post">
이름 : <input type = "text" name = "name"><br>
추천메뉴1 : <input type = "text" name = "menu1">
추천메뉴2 : <input type = "text" name = "menu2">
<input type = "submit" value = "전송하기">
</form>
</body>
</html>
☕️
사용자 id : <%=id %><br>
사용자 pw : <%=pw %><br>
el표현식을 이용해서 다음과 같이 줄일 수 있다.
사용자 ID : %{param.id}
사용자 PW : %{param.pw}
paramPro.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>
</head>
<body>
<h1>paramPro.jsp</h1>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String menu1 = request.getParameter("menu1");
String menu2 = request.getParameter("menu2");
%>
이름 : <%=name %><br>
추천메뉴 1 : <%=menu1 %><br>
추천메뉴 2 : <%=menu2 %><br>
<hr>
이름(el표현식) : ${param.name } <br>
추천메뉴 1 : ${param.menu1 }<br>
추천메뉴 2 : ${param.menu2 }<br>
</body>
</html>
* el 표현식은 null 값을 공백 문자로 표시한다!
paramTest.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>paramTest.html</h1>
<form action = "paramPro.jsp" method ="post">
이름 : <input type = "text" name = "name"><br>
추천메뉴1 : <input type = "text" name = "menu"><br>
추천메뉴2 : <input type = "text" name = "menu"><br>
<input type ="checkbox" name = "hobby" value = "게임">게임
<input type ="checkbox" name = "hobby" value = "운동">운동
<input type ="checkbox" name = "hobby" value = "요리">요리<br>
<input type = "submit" value = "전송하기">
</form>
</body>
</html>
paramPro.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>
</head>
<body>
<h1>paramPro.jsp</h1>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String[] menu = request.getParameterValues("menu");
%>
이름 : <%=name %><br>
추천메뉴 1 : <%=menu[0] %><br>
추천메뉴 2 : <%=menu[1] %><br>
<hr>
[el]<br>
추천메뉴 1 : ${paramValues.menu[0] }<br>
추천메뉴 2 : ${paramValues.menu[1] }<br>
<% String[] hobbys = request.getParameterValues("hobby"); %>
<h3>취미 정보</h3>
[jsp]<br>
취미1 : <%=hobbys[0] %> <br>
취미2 : <%=hobbys[1] %> <br>
취미3 : <%=hobbys[2] %> <br>
<hr>
취미1 : ${paramValues.hobby[0] }<br>
취미2 : ${paramValues.hobby[1] }<br>
취미3 : ${paramValues.hobby[2] }<br>
</body>
</html>
=> null 값이 없어야 한다.
<%
if (hobbys != null) {
for (String h : hobbys) {
%>
취미 :<%=h%>
<br>
<%
}
} %>
'Spring > Model1 _2(MVC)' 카테고리의 다른 글
0927 JSP - JSTL (JSP Standard Tag Library) (0) | 2022.09.27 |
---|---|
0926 JSP - servlet (0) | 2022.09.26 |
0922 JSP - 서블릿 (0) | 2022.09.22 |
0922 JSP - 형변환 (0) | 2022.09.22 |
0922 JSP - 메서드 오버라이딩 (1) | 2022.09.22 |