web server
요청받기 요청 파악 웹페이지 제공
클라이언트 의 요청이 정적컨텐츠(해석의 주체가 클라이언트, 서버가 해석하지 않는 자원)라면 그냥 제공해준다
Apache
WAS
동적컨텐츠 (JSP, Servlet,PHP,ASP등등)
jdk에 의해서 컴파일되어 정적컨텐츠로 변환할 수 있는것
Apache-tocat안에 web server, WAS가 둘다 있음
마이크로소프트가 갖고 있는 웹서버 IIS
Weblogic WebSphere 은 문제가 생기면 AS 가능ㅋㅋㅋ
로드 밸런싱
누가 가 부하를 나눌까?
(웹서버)apache 나 nginx가 클라이언트와 서버 사이에서 로드 밸런싱을 해서 server에 연결하게 한다.
세션 공유가 안되서 토큰을 사용해서 공유한다.
어플리케이션 서버
tomcat , jboss
JSP - > class로 컴파일
mvc 모델
모델 1
JSP가 모든 요청을처리
콘솔창대신 JSP로 연결해서 사용
JSP에서 DAO생성 해서 처리하는 그런거;;
근데 대규모 사이트에서는 이게 불가능하다 JSP의 부담이커서
모델 2
servlet이 모든 요청을처리
servlet은 자바파일 이라서 웹서버에서 인식하지 못해서 요청 링크를 만듬
역사상 jsp보다 Servlet이 먼저 만들어짐 웹페이지를 만들기 위해 request , response을 자바파일에서 할 수있도록함
out.print로 작성하던ㄱ ㅓhtml파일로 바꿔낸게 JSP
화면부는 jsp가 맡고 servlet은 자바코드부분을 맡는다
전자정부프레임워크는 java spring으로 구성되어있다..
Oracle도 웹서버에 접근 가능해서 8080포트를 사용하기 때문에 포트번호를 바꿔 줘야한다
css,html,jsp workspace
디폴트로 뜨는게 chrom으로 해두자
프로젝트 실행해보기
웹서버에서 web.xml 파일에서 처음 폴더를 웹서버에서 실행하면 나오는 파일을 지정할 수있다
http://localhost:8090/WebServlet_1/ --> 이런식을 접근해서 파일명을 안쓰고도 최초로 열리는 파일지정
아파치톰캣이 주는 javaX
url설정하는 영역
함수들 생성가능
doget --클라이언트로 부터 넘어오는 상태에 따라 get방식이면 이함수가 받아줌
dopost --클라이언트로 부터 get방식으로 넘어오면 이 함수가 받아줌
web. xml 수정하면 서버 재시작 해줘야함
forward
내가 request한 똑같은 객체를 전달 할 수있다.
request --> 클라이언트가 요청을 보내면 서버는 request에 클라이언트에 대한 정보를 받아둔다 ip 브라우저정보등등
요청당 하나씩 만들어짐, a.jsp 보여줘 -> 만듦 b.jsp보여줘->또만들어
view에 만들면 클라이언트가 접근 불가능 그래서 여기서 만듬
jsp 안쓰고 쓰는법
타임리프 라는게 html에 서버 내용을 뿌려줄 수잇는거임 jsp쓰는대신에
프리마커라는 것도 jsp쓰는것대신에 쓰는거
EL&JSTL은 이렇게 쓰는거
<%= %> 대신에 쓰는거다
default.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>
<h3>서블릿 요청 처리하기</h3><h3>getConextPath</h3>
<%=request.getContextPath() %>
<hr>
<!-- 다른 곳에 가서도 실행되도록 할 수잇음 주소를 -->
<a href="<%=request.getContextPath() %>/simple?type=greeting">simple 요청하기 (GET)</a>
<hr>
<!-- 다른 곳에 가서도 실행되도록 할 수잇음 주소를 -->
<a href="<%=request.getContextPath() %>/simple?type=date">날짜 요청하기 (GET)</a>
<hr>
<!-- 다른 곳에 가서도 실행되도록 할 수잇음 주소를 -->
<a href="<%=request.getContextPath() %>/simple?type=aaaa">비정상 요청하기 (GET)</a>
<hr>
<!-- 다른 곳에 가서도 실행되도록 할 수잇음 주소를 -->
<a href="<%=request.getContextPath() %>/action.do?cmd=greeting">정상 요청하기 (GET)</a>
</body>
</html>
simpleview.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>
<h3>simplecontroller에서 forwㅁrd된 페이지</h3>
<h3>화면에 출력</h3>
<%=request.getAttribute("result") %>
</body>
</html>
SimpleController.java (servlet)
package com;
import java.io.IOException;
import java.util.Date;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
servlet은 웹 용 자바 파일이다 (request, response를 사용가능하다)
SimpleController.java >> extends Httpservlet 상속 >> servlet
jsp - > WAS가 해석을 한다
요청 : localhost:8090/web/login.jsp
servlet
요청 : localhost:8090/web/login.java -->에러나자나 어떻게 할까? ->>매핑하자
{
<servlet>
별칭
<servlet-name>simpleController</servlet-name>
클래스가 어딧냐
<servlet-class>com.SimpleController</servlet-class>
</servlet>
<servlet-mapping>
별칭
<servlet-name>simpleController</servlet-name>
넘겨줄 url
<url-pattern>/simple</url-pattern>
</servlet-mapping>
}
-->이렇게 줄이기 가능
@WebServlet("/simple")
http://localhost:8090/Webservlet_1/simple 요청
*/
//어노테이션은 자바 파일을 실행할때 컴파일러에게 지정해주는 조건같은거
public class SimpleController extends HttpServlet {
private static final long serialVersionUID = 1L;
public SimpleController() {
super();
System.out.println("SimpleController 생성자 호출");
}
//없어도 에러는 안남
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("클라이언트 요청 GET");
//로직코드 작성
//1. 한글처리
request.setCharacterEncoding("utf-8");
//2. 데이터 받기(요청 의도 파악) >> 회원가입 or 게시판 or 로그아웃
String type = request.getParameter("type");
//3. 업무 수행(비즈니스 수행)
Object resultobj =null;
if(type==null|type.equals("greeting")) {
resultobj="hello world";
}else if(type.equals("date")) {
resultobj = new Date();
}else {
resultobj = "invalid String type";
}
// PrintWriter out = response.getWriter();
// out.print(resultobj);
//4.요청 결과를 저장
//결과를 저장 : application , session(모든페이지), request (저장의 범위가 자기자신 페이지)-->include,forward하면 다른데서도 쓸수 있다.
request.setAttribute("result",resultobj);
//5.저장한 결과를 jsp 에게 전달
//forward 방식
//뷰지정하기
RequestDispatcher dis = request.getRequestDispatcher("/simpleview.jsp");
//이데이터를 request에 전달해야함
//특정 페이지에 원하는 정보를 전달
//forward
dis.forward(request,response);
//request 객체를 response에 전달?
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("클라이언트 요청 POST");
}
}
greeting.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>
<h3>VIEW</h3>
EL&JSTL
<hr>
EL : ${requestScope.msg}<br>
<!-- 같은 내용 위아래 -->
<%= request.getAttribute("msg") %>
</body>
</html>
FrontServletController.java
package com.kosa;
import java.io.IOException;
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;
/**
*/
@WebServlet(description = "사이트 전체 구조 입니다", urlPatterns = { "/action.do" })
public class FrontServletController extends HttpServlet {
private static final long serialVersionUID = 1L;
public FrontServletController() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("GET 방식 요청");
//http://localhos:8090/WebServlet_1/action.do?cmd.greeting
//1. 한글처리
request.setCharacterEncoding("utf-8");
//2. 데이터 받기
String cmd = request.getParameter("cmd");
//3. 판단하기(요청) ...로직처리(DB연결, 암호화)
String msg="";
if(cmd.equals("greeting")) {
Message m = new Message();
msg = m.getMessage(cmd);
}
//4. 데이터 저장
request.setAttribute("msg",msg);
//5. view 지정하기
RequestDispatcher dis = request.getRequestDispatcher("/greeting.jsp");
//6. view 데이터 전달하기(forward)
dis.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("POST 방식 요청");
}
}
Message.java
package com.kosa;
public class Message {
public String getMessage(String str) {
return str+"model2 base MVC";
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>WebServlet_1</display-name>
<welcome-file-list>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>simpleController</servlet-name>
<servlet-class>com.SimpleController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>simpleController</servlet-name>
<url-pattern>/simple</url-pattern>
</servlet-mapping>
<!--
http://localhost:8090/WebServlet_1/simple 요청을 서버에 보내면
실행이란 -> doget, do post를 불러다가 실행해줌
-->
</web-app>
requestScope
https://windorsky.tistory.com/entry/requestScope-%EC%82%AC%EC%9A%A9
requestScope -> request객체에 저장된 데이터를 가져올수 있음
'오라클 데이터베이스' 카테고리의 다른 글
SQL 12일차 [모델링][속성][개념적설계] (0) | 2023.07.25 |
---|---|
SQL 11일차 [모델링] (0) | 2023.07.24 |
SQL 9일차(0720) (0) | 2023.07.20 |
SQL8일차(0719) (0) | 2023.07.19 |
sQL7일차(0718) (0) | 2023.07.18 |