[문제]

게시판 만들다가 뒤로가기를 누르면 조회수가 증가하지 않았다. 

구글 검색 결과 

https://chicpro.dev/%EB%AA%A8%EB%B0%94%EC%9D%BC-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90%EC%84%9C-back-%EB%B2%84%ED%8A%BC-%ED%81%B4%EB%A6%AD%EC%8B%9C-%ED%8E%98%EC%9D%B4%EC%A7%80-%EA%B0%95%EC%A0%9C-%EB%A6%AC%EB%A1%9C/

 

모바일 브라우저에서 Back 버튼 클릭시 페이지 강제 리로딩 하기 – CHICPRO

 

chicpro.dev

딱 나랑 맞는 분을 찾았다. 

 

[해결]

게시판 보여주는 view.jsp코드로 가서 

<script type="text/javascript">
	window.onpageshow =  function(event) {
	    //back 이벤트 일 경우
	    if (event.persisted) {
	    	document.location.reload();
	    }
	}
</script>

맨 앞에 추가해줬더니 됐다. 

filter

필수는 아닌데 알고 있으며 편할 때가 있다. 

  • 서버 기동 될 때, 객체 생성함 
  • 서블릿 수행 되기 전, 수행되고 나서 역활 할 수 있는 것
  • 요청 왔을 때, 필터를 거쳐서 수행됨 (jsp, servlet, static file)
  • 로그 필터 - ex) 회사가 앞으로 한달 동안만 사이트의 어느 시간 때에 요청이 많이 오는 지 확인할 때.
  • 필터 갯수 제한 없음
  • 몇 번째 필터냐에서 순서가 달라짐
    • 순서는 필터의 이름 순서에 따라 달라진다.  - 알파벳 순
  • 한번 객체 생성되면 서버 죽을 때까지 유지됨
    • 서버 기동될 때 객체 생성 해 놓는다. 
  • chain.doFilter : 다음 친구를 수행 시켜라. - 수행해야함. 
    • servlet수행 하기 전에 전처리 할 내용 앞에 적음
    • 후 처리할 내용은 chain.doFilter호출 뒤에 적는다. 
    • 이거 안 하면 filter만 호출되고 응답해버림 (servlet안 해줌)
  • first(servlet) 요청(request 선택)할 때만 filter하겠다. 
  • httpservlet은 클래스라서 자유로웠는데 filter는 인터페이스
  • 다른 서블릿 요청할 때 수행 안 됨
    package filter;
    
    import java.io.IOException;
    import javax.servlet.DispatcherType;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    
    /**
     * filter 공부
     * 2022.01.06
     * init메소드가 맨 밑 - 알파벳 순
     */
    @WebFilter(dispatcherTypes = {DispatcherType.REQUEST }
    					, urlPatterns = { "/first" })
    public class FlowFilter implements Filter {
    	
        public FlowFilter() {
        	System.out.println("FlowFilter 객체 생성");
        }
    	public void destroy() {
    		
    	}
    	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    		System.out.println("---- 서블릿 수행 전 생성");
    		chain.doFilter(request, response);
    		System.out.println("---- 서블릿 수행 후 생성");
    	}
    	// 필터가 객체 생성할 때 - 서버가 기동할 때(서버 죽을 때까지 유지)
    	public void init(FilterConfig fConfig) throws ServletException {
    		System.out.println("FlpwFilter 객체 초기화");
    	}
    
    }​

  • 모든 자원 시작할 때 filter시작

'study > JAVA 전문가' 카테고리의 다른 글

[linux] 톰캣 설치  (0) 2022.01.26
[HTML/CSS]  (0) 2022.01.11
[JSP] 방명록 프로그램  (0) 2022.01.05
[JSP] EL  (0) 2022.01.05
[ServletJSP] 시험 준비  (0) 2022.01.04

[visitor테이블을 활용한 방명록 웹 프로그램 작성]

  1. view
    • visitorView.jsp
    • visitorUpdateView.jsp
  2. controller
    • controller.VisitorDBservlet2.java
      • get 방식
        • 방명록 삭제 (d메소드) 
        • 전체 리스트 출력 (r메소드)
        • 원하는 글 한개 추출 (rOne메소드) - 방명록 수정에 입력 폼을 출력하기 위해서
      • post방식 - 방명록 글이 와야하기 때문
        • 방명록 작성 - insert (c메소드)
        • 방명록 수정 - update (u메소드)
  3. model
    • vo.VisitorVO
    • dao.visitorDAO
      • c - 작성자 이름, 작성 내용을 prepareStatement사용해서
      • u
      • d
    • dao.MySQL.java

 

  • DB연동 - DAO가
  • 작성하고 바로 보여주는게 좋음
  • 모델 먼저 만드는게 일반적

'study > JAVA 전문가' 카테고리의 다른 글

[HTML/CSS]  (0) 2022.01.11
[JSP] filter  (0) 2022.01.06
[JSP] EL  (0) 2022.01.05
[ServletJSP] 시험 준비  (0) 2022.01.04
[JSP] java bean, 스코프, MVC모델  (0) 2022.01.04
  • servlet이 보관한 내용을 보여줌
  • 꺼내서 보여주려면, 수행문태그를 이용해서 getAttribute -> 강제형변환해야함
  • 필요한 객체안에 메소드 호출 -> 표현식 태그로 표현할 때
  • EL 쓰면 훨씬 간단하게 할 수 있다. 

EL (Expression Language)

  • 표현식 태그를 더욱 간단하게 해결할 수 있게 하겠다. 
  • $와 { }로 표현
  • EL에서는 setter를 호출하지 않는다. 
  • 내장객체 - hash map 객체를 참조함
    • pageContext (jsp내장객체면서 EL의 내장 객체)
    • 만약에 EL에서 고유 jsp내장객체를 사용하고 싶을 때
    • 사용하고싶은 jsp 내장객체를 꺼내오면 된다. 
  • pageScope - jsp안에서 어떤 이유든 이 페이진 안에서만 사용하겠다. (pageContext안에 보관
  • requestScope - request안에 보관되어 있는 객체 꺼내고 싶을 때
  • requestScope.꺼내고싶은객체
  • sessionScope
    • sesssionScope.객체이름
  • applicationScope - 서블릿 컨테스트 안에 
  • 어떤 문자로 표현되는 문자를 추출하겠다. - param
    • param : EL 식에서만 사용할 수 있는 내장객체
    • <% out.println(request.getParameter("q")); &>
    • <%= request.getParameter("q") %>
    • ${param.q}
    • ${param{"q"}}
  • 하나의 이름에 여러개 value 올 수 있는 얘는 paramValues사용하면 된다.
  • header.뭐뭐뭐 : 헤더 정보 
  • headerValues
  • cookie.쿠키이름 - 클라이언트에서 전송되는 쿠키 전송
  •  sessionScope.cart.apple
    • sessionScope안에 있는 cart 객체를 꺼내라
    • 꺼낸 객체가 가지고있는 getApple( )을 호출해서 리턴한 결과를 표현해라
    • cart를 꺼내고싶은 얘의 이름(key)로 사용
    • apple을 property명으로 사용함
  • 변수의 참조 대상이 일반 java 객체getXxx()를 호출한 결과 
  • 변수의 참조 대상이 Map 객체이면 get("xxx")을 호출한 결과가 됨

  • 문자열 결합 연산자 (+=)
\${100 += 200 += 300 } : ${100 += 200 += 300 }<br>

  • EL식은 추출하고 없으면 비어둠
${param.message}
${param["message"]}
<%= request.getParameter("message") %>
  • 표현식 태그는 null이라고 나옴
  • 이름을 문자열 형식으로 줘야함 ["message"]

  • empty param.message 가능
 ${ !empty param.message }

  • EL에서의 변수 
    1. EL의 내장객체의 변수
    2. 어딘가에 보관되어있는 객체의 이름
      <!-- jsp수행이 끝나면 사라짐 -->
      	<% pageContext.setAttribute("name", "자바");  %>
      	name 변수의 값 : ${name}<br>
      	pageScope.name 변수의 값 : ${pageScope.name}<br>​
      - pageScope에서 먼저 찾고 -> sessionScope에 가서 찾음- 어떤 스코프 영역인지 생략해도 된다. 
  • pageConext에 보관되어 있는 건 pageScope에 저장되어 있는 것

${ list[0].time }<br>${ list[1].time }<br>${ list[2].time }
  • 배열 인덱스 대괄호를 사용해서 접근한다.

 

  • ${header.XXX} : header정보 중 xxx로 전달 된 
  • ${param.XXX} : 요청 파라미터로 전달된 xxx로 전달 된 
  • ${XXX} : xxx로 보관된 객체 꺼냄
  • ${requestScope.XXX} : requestScope 보관되어 있는 객체중에 xxx로 보관된 객체를 꺼내겠다.

 

'study > JAVA 전문가' 카테고리의 다른 글

[JSP] filter  (0) 2022.01.06
[JSP] 방명록 프로그램  (0) 2022.01.05
[ServletJSP] 시험 준비  (0) 2022.01.04
[JSP] java bean, 스코프, MVC모델  (0) 2022.01.04
[jsp] 액션태그  (0) 2022.01.03

jsp용 bean class

  1. 패키지화 되어져야 한다. 
  2. 가급적이면 defalut생성자를 가지고 있어야 한다. (아규먼트 가지지 않는 생성자
  3. bin을 통해서 기능을 처리하는데 있어서, jsp를 통해서 클라이언트에 표현하는 목적을 가짐
    • bin이 어떤 기능이든 간에, 수행결과를 추출하는 메서드는 get---라고 시작해야한다. 
    • 설정하는 기능 : setter로 만들어줘야 한다. 
  • 자바 잘 모르는 사람도 잘 하기 위해서
    • 태그로 객체 생성 가능하게
    • elu로 생성 가능

package jspbean;
import java.time.LocalDateTime;

public class Today {
	private int year;
	private int month;
	private int date;
	private int hour;
	private int minute;
	public Today() {
		LocalDateTime currentTime = LocalDateTime.now();
		year = currentTime .getYear();
		month = currentTime .getMonthValue();
		date = currentTime .getDayOfMonth();
		hour = currentTime .getHour();
		minute = currentTime.getMinute();
	}
	public int getHour() {
		return hour;
	}
	public int getMinute() {
		return minute;
	}
	public int getYear() {
		return year;
	}
	public int getMonth() {
		return month;
	}
	public int getDate() {
		return date;
	}	
}

1.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="jspbean.Today"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>폰트 끌어오기</title>
<link href="https://fonts.googleapis.com/css?family=Dokdo:400"
	rel="stylesheet">
</head>
<body>
	<h1 style="font-family: 'Dokdo'">
		지금은 <%Today obj = new Today();%>
		<%=obj.getYear()%>년
		<%=obj.getMonth()%>월
		<%=obj.getDate()%>일
		<%=obj.getHour()%>시
		<%=obj.getMinute()%>분 입니당
	</h1>
</body>
</html>
  • 자유롭게 가져올 수 있음
  • 패키지화만 되어있으면 가능
  • 객체 생성하는 코드, 메서드 호출하는 코드 구현할 줄 알아야

 

2.

<%@ 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 href="https://fonts.googleapis.com/css?family=Gamja+Flower:400"
	rel="stylesheet">
</head>
<body>
	<h1 style="font-family: 'Gamja Flower'">
		지금은
		<jsp:useBean id="obj" class="jspbean.Today" />	
		<jsp:getProperty name="obj" property="year" />년
		<jsp:getProperty name="obj" property="month" />월
		<jsp:getProperty name="obj" property="date" />일
		<jsp:getProperty name="obj" property="hour" />시
		<jsp:getProperty name="obj" property="minute" />분 입니당
	</h1>
</body>
</html>
  • 액션태그 사용함 = useBean, getProperty
  • useBean : jsp에서 사용 가능한 자바 클래스
    • 태그를 가지고 사용가능한 자바 클래스 
      • 어떤 자바 클래스를 사용하고 싶은가? class속성에 패키지 명 
      • 모든 멤버가 static이 아니면 객체 생성해서 사용해야함
    • 여러번 사용할 수 있지만, id는 유니크 해야함
      • id값은 변수가 된다. 
    • scope : 언제까지 유효한 객체인지 (기본값 : page)
      • 생략하면 : 객체를 무조건 생성한다고 생각하면 됨
    • 무조건 객체 생성하지 않음
      • 이미 객체가 생성되어있으면, 객체 가져옴
      • 생성 안 되어있으면, 생성함
  • set/get Property
    •  getProperty
      • 사용가능한 상태로 만든 자바 객체에 대해서 getter메소드 생성해서 이 자리에 출력하겠다. 
      • 자바 bean 클래스가 가지고 있는 것 중에서 getter만 호출함
        • getter를 호출하고 그 자리에 리턴 결과를 출력해준다. 
    • setProperty
      • 사용가능한 상태로 만든 자바 객체에 대해서 setter를 호출
    • 어떤 클래스에 대해서 set, get주냐 ?
      • name속성에 대해 정해짐 : id값을 줌
    • property : get/set을 뺀 나머지 (첫 글자만 소문자로 바꿔서 지정)

 

3.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="jspbean.Today"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>3번째 방법</title>
<link href="https://fonts.googleapis.com/css?family=Poor+Story:400"
	rel="stylesheet">
</head>
<body>
	<h1 style="font-family: 'Poor Story';">
		지금은 <%pageContext.setAttribute("obj", new Today());%>
		${obj.year}년 
		${obj.month}월 
		${obj.date}일 
		${obj.hour}시 
		${obj.minute}분
		입니당
	</h1>
</body>
</html>
  • 표현식 태그를 간단하게 해주는 것 : EL
  • setter호출 불가
  • obj라고 보관된 객체를 찾음
    • <%pageContext.setAttribute("obj", new Today());%>
    • el만의 구문을 가짐
    • 일반 변수가 아니고, 어떤 객체를 어딘가 보관한 이름이라고 생각하면 됨
    • setAttribute
    • 어떤 객체 안에 보관하느냐 

스코프

  • 객체 공유
    • 객체의 스코프 : 객체가 생성되어 유지되는 기간
    • 여러가지 목적에 의해서, 여러 jsp들이 객체에 보관해 놓으면 다른 얘가 가지고 갈 수 있는
    • 어떤 jsp/servlet를 요청하든 여러 jsp가 공유하도록

  • page 스코프
    • 요청된 서블릿,jsp가 수행한 동안에 유효한 객체
    • 공유 X
    • servlet
      • 객체 생성해서 지역변수에 담으면 됨 - servlet
    • jsp
      • page context에 보관하면 됨
      • use bean속성 사용해서 scope 속성 생략해도 됨
  • request 스코프
    • 요청이 끝날 때까지 공유함
    • forward, include했을 때 의미가 있음
    • 요청이 끝나면 사라짐
    • 객체를 보관한 뒤 jsp에 넘기고 jsp는 꺼내게 만듦
    • 객체 생성을 해서 httpservletRequest에 보관하면 된다. 
      • 요청이 끝나면 사라짐
  • session 스코프
    • 브라우저가 살아있는 동안 공유함
    • session객체가 살아있는 동안 (일정시간 동안)
    • 클라이언트마다 각각 할당 
    • 다음 요청시에도 클라이언트별로 객체를 생성해서 사용하고 싶을 때 - httpsession
  • application 스코프
    • 서버가 죽을 때 까지 유효한 객체
      • 로그 처리
      • 사이트가 운영하는 내내 필요한 객체
    • 하나만 생성해서 모든 클라이언트와 공유
      • ex) 한 달 동안 몇 명이 방문했다.. 
    • servletContext (컨테이너 객체)

 


  • 컨테이너 객체
    • 종류 
      • HttpServletRequest
      • HttpSession
      • ServletContext
        • getservletcontext
          • WAS가 객체 생성해줌
          • reload 되면 다시 생성함
    • 기능
      • setAttribut
      • getAttribut
      • removeAttribute

 

MVC

  • model-view-contorller
  • 요청 받는 얘와 응답하는 얘 나눠서 개발
  • 병렬적으로 개발
  • 개발 생산성 높음
  • 유지보수 편함

 

  •  controller
    • 서버에 요청을 해왔을 때, 요청을 받아서 요청받은 목적에 맞게 기능 수행
    • servlet
  • model 
    • db연동, 값 처리-> view한테 넘김
    • c와 v사이 부가적인 기능 제공 java클래스
    • java Bean
      • jsp에서도 사용 가능하게
    • 도메인모델, 서비스 모델
      • 도메인 모델 - DTO(data transfor object), VO
        • 값 보관해서 누구에게 전달
      • 서비스 모델
        • DAO - DB 연동 로직
        • 비즈니스 로직 - BIZ
  • view
    • 응답 (클라이언트한테 어떻게 보여줄까)
    • ex) 봄, 여름, 가을, 겨울 마다 웹페이지가 바뀌는 것 (배치, 이미지, 등)
    • jsp

 

 

'study > JAVA 전문가' 카테고리의 다른 글

[JSP] EL  (0) 2022.01.05
[ServletJSP] 시험 준비  (0) 2022.01.04
[jsp] 액션태그  (0) 2022.01.03
[fileIUpload,jsp] 서블릿 구현  (0) 2021.12.30
[servlet]요청 재지정  (0) 2021.12.29

한글코드

  • ASCII 코드 체계
    • 한글문자를 제외한 나머지 
      • 영문대소문
      • 숫자 (0~9)
      • 특수문자
        • 눈에 보이는 ( $...)
        • 눈에 보이지 않는 (공백, 엔터, 특별한 기능을 가지는..)
      • 0x00~ 0x7f
  • 역사
    • 1970~1980 중반 - ASCII 각 제조사마다 한글 코드 (비표준화)
    • 1987 - 완성형 한글 표준 코드 발표 (정부)
      • KSC5601 ( EUC-KR, CP949 ) - windows
      • 영문 - 1byte (ASCII)
      • 한글 - 2byte
    • 1990 - 지구상에 있는 각 나라의 언어들의 코드 값을 단일화 (통일)
      • Unicode
        • UTF-16 : 모든 문자들을 2byte로 (java채택)
          • 운영체제에 맞춰서 변환해서 읽고, 내보낼 때 변환해서 내보냄
          • 포함되지 않는 언어들이 많음
        • UTF-8 : 모든 문자를 표현 ( 1byte ~ 4byte )
          • 한글은 3byte
          • 리눅스 - 운영체제가 UTF-8
          • setcharacterencoding 해줘야 함

 


  • for문 같은 긴거는 표현식태그보단, 수행문 태그로!


  • 자바스크립트는 브라우저에서 실행되고, 자바코드는 서버에서 수행됨
    • <!-- 
      	2022.01.03(월)
      	+ script : 자바 스크립트 코드
      	+ jsp 실행 결과는 javascript에 영향을 줄 수 있다. 
      	+ java코드는 서버에서
      	+ script는 브라우저에서 실행 됨	
       -->
      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"%>
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>요청 방식에 따른 처리</title>
      <style>
      	input {
      		margin : 3px;
      	}
      </style>
      </head>
      <body>
      	<% if (request.getMethod().equals("GET")) { %>
      		<h2>원하는 칼라와 날짜를 선택하세요</h2>
      		<form method="post" action="/edu/jspsrc/exam7.jsp">
      			칼라 : <input type="color"  name="fcolor" ><br>
      			날짜 : <input type="date"  name="fdate"><br>
      			<input type="submit" value="전송">
      		</form>
      	<% } else { %>	
      			<script>
      				document.body.style.backgroundColor =
      					         '<%= request.getParameter("fcolor") %>';
      			</script>
      			<h2>선택 날짜는 <%= request.getParameter("fdate") %> 이네요..</h2>
      	<% } %>
      </body>
      </html>
    • <%= request.getParameter("fcolor") %> : 서버에서 수행
      • 수행된 결과가 옴
      • jsp코드는 어디든 상관 없음
    • <script> : 브라우저에서 수행
      • html 수행 이후에 실행되는 부분

  • errorPage
    • <!-- 
      	2022.01.03(월)
      	+ length() : nullpointException오류남 ( 500에러 )
      	+ errpage : 수행 오류가 나면 jsp를 대신 응답해라 
       -->
      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"   errorPage="errorPage.jsp"  %> 
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>Insert title here</title>
      </head>
      <body>
      <h2>errorPage 속성 테스트</h2>
      <hr>
      <%
           String name = request.getParameter("guestName"); //	guestName 대소문자 구분함
      %>
      
      	<h3>당신의 이름은 <%= name %> 이고 이름의 길이는
                 <%= name.length() %> 입니다.</h3>
      </body>
      </html>
      • 어떤 exception이 발생하던, errorPage 응답해라
      • 실행 오류가 발생했을 때, 
      • servlet으로 에러났을 때 에러난거는 안 됨
    • <!-- 
      	2022.01.03(월)
      	+ exam8.jsp에 사용됨
       -->
      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8" %>
      <%@ page isErrorPage="true" %>
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>errorPage</title>
      </head>
      <body style="text-align:center">
      	<h2>오류 발생했어욤ㅠㅠ</h2>
      	<h3>빠른시일내에 복구하겠습니다...</h3>
      	<img src="error.jpg">
      	<%	
      	    String msg = "오류 원인 : " + exception;	
      		System.out.println("----------------------------------------");
      		System.out.println(msg);
      		System.out.println("----------------------------------------");	
      		exception.printStackTrace();
      	%>
      </body>
      </html>
      • exception : 아무 jsp에서 사용할 수 없음
        • 내장 객체
        • <%@ page isErrorPage="true" %> 줘야만 사용 가능
        • 기본값은 false임 -> excpetion 내장 객체 사용 할 수 없음

  • import
    1. <%@ page import="java.util.Date, java.text.SimpleDateFormat"%>
    2. 따로
      • <%@ page import="java.util.Date" %>
      • <%@ pageimport="java.text.SimpleDateFormat"%>
  • data 30분 뒤
    • plusMinutes
    • calender의 add메소드
	Calendar cal = Calendar.getInstance();	//	자동으로 현재 시점으로
	cal.setTime(nowDate);	// setTime 안 해줘도 됨
	cal.add(Calendar.MINUTE, 30);

 


  • include
    • 서블릿으로 변환하기 전에 일어남
    • 같이 서블릿으로 바뀜
    • 소스를 효율적으로 관리할 수 있게 하는 태그의 기능을 함
    • .jspf로 사용할 것을 권장함
      • jsp파일이여도 상관 없음
    • 주의 사항

 

  • forward
    • <jsp:forward page="admin_new.jsp">
        	<jsp:param name="message" value="Hi! Administrator" />
       </jsp:forward>
      • message전달
      • 받은 jsp는 <%=request.getParameter("message")%>로 받음
        1. forward될 때 전달되는 namevalue값 쓸 때 사용함
        2. 클라이언트한테 전달 받을 때 사용
      • param은 종료 태그 없이 사용
        • /> 닫을 때 '/'줘야함
      • 종료태그 필요 없는 얘들 (hr, br,
        • <hr/>, <br/> 사용 가능 - xml은 엄격하게 이렇게 사용해야함
    • jsp의 액션 태그의 구문은 XML기반으로 함
      • 대소문자 구분
      • 종료태그가 없는 경우에는 시작태그명 뒤에 />를 붙인다.
      • 속성에 값을 할당할 때 인용부호(",")를 반드시 사용한다.
  • include
    <!-- 
    	2022.01.03(월)
    	+ include 액션 태그
     -->
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>JSP 예제</title>
    </head>
    <body>
    	<h2>include 지시자와 액션태그 비교</h2>
    	<%-- 
    	<hr>
    	<%@ include file="date.jsp" %>
    	<hr>
    	<%@ include file="date.jsp" %>  
    	--%>
    	<hr>
    	<jsp:include page="date.jsp" />
    	<hr>
    	<jsp:include page="date.jsp" />
    	
    </body>
    </html>
    • include 지시자
      • 소스 포함
      • 서블릿 소스 하나 만들어짐
      • 변수 선언 주의
    • include 액션 태그
      • 실행을 별개로 시키고, 결과만 포함
      • ex) a 실행하다가 중지시켜서 b 실행시켜서 결과를 포함시킴 
      • 서블릿 두 개 생김
      • 서블릿 변환할 때 자바코드로 바뀜. 
        • date별개로 실행시키고 가지고 가는 
      • 버퍼에 차곡차곡 넣었다가 브라우저에게 한번에 줌
    • 에러가 있으면 새로운 얘로 컴파일해서 안 만들어 줌
      • 예전꺼 없으면, 컴파일 에러 생겼다가 classNotFoundException 나옴
    • 변수 두번 선언해서 에러남

<!-- 
	2022.01.03(월)
	+ 내장객체
 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP의 내장 객체들</title>
</head>
<body>
	<h2>JSP의 내장 객체들 점검</h2>

	<h3>[ request ]</h3>
	getMethod() : <%=request.getMethod()%><br> 	
	getRequestURI() : <%=request.getRequestURI()%><br>
	getHeader("user-agent") : <%=request.getHeader("user-agent")%><br>
	
    
	<h3>[ out ]</h3>
	<%
	out.print("<h4>out내장 객체로 출력!!</h4>");
	%>
	
    
	<h3>[ session ]</h3>
	getId() : <%=session.getId()%><br> 
	getCreationTime() : <%=new Date(session.getCreationTime())%><br>
	
    
	<h3>[ response ]</h3>
	getStatus() :<%=response.getStatus()%><br> 
	getBufferSize() : <%=response.getBufferSize()%><br> 
	getContentType() :<%=response.getContentType()%>
	<%
	response.addCookie(new Cookie("myCookie", "myValue")); //	쿠키정보를 같이 응답하고 싶을 때
	%>

	
	<h3>[ application ]</h3>
	getContextPath() : <%=application.getContextPath()%><br> 
	getServerInfo() : <%=application.getServerInfo()%><br> 
	getMajorVersion() : <%=application.getMajorVersion()%><br>
	
	
	<H4>Web Application(/edu) 디렉토리의 파일 리스트</H4>
	<%
	java.util.Set<String> list = application.getResourcePaths("/");
	if (list != null) {
		Object obj[] = list.toArray();
		for (int i = 0; i < obj.length; i++) {
			out.print(obj[i] + ", ");
		}
	}
	%>
</body>
</html>​

 

  • redict 사용하고 싶을 때 response사용해서 
  • request.getHeader("user-agent")
    • 클라이언트가 어떤 종류의 브라우저인지
    • 모바일버전인지, PC버전인지
  • out문 사용할 때 수행문 태그 사용해야한다. 
  • jsp는 세션 객체 생성이 기본
    • 세션 객체 생성 코드는 servlet이 바뀔 때 들어간다. 
  • 버퍼 사이즈가 8kbyte가 넘으면 클라이언트에게 보내고 다시 채워짐
    • 한번에 보내는 최대 사이즈가 8kbyte
  • response.addCookie(new Cookie("myCookie", "myValue"))
  • tomcat은 web-project라는 것을 모른다. 
    • edu를 하나의 서블릿 Context라고 생각함
    • web-project라는 것을 이클립스에서 정의한 것
  • application.getServerInfo() : WAS의 이름, 버전

  • jsp가 새로 만들어졌거나, 최초 요청시 servlet으로 바뀜
  • 선언문 태그 : servlet의 멤버 변수
  • 수행문 태그 : 지역변수 
  • 표현식 태그
    • out.print 메서드 호출 문장으로 바뀜
    • 안의 내용이 아규먼트로 넘어감
  • 그냥 html <h2>이러면 out.write 아규먼트로 들어감

 

 

  • 이런 코드를 보고싶으면
  • E:\work_sapce\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\edu\org\apache\jsp\jspsrc
<%
		int local_v = 0;
		member_v += 10;
		local_v += 10;
	%>
	<h1>JSP의 멤버 변수와 지역 변수</h1>
	<hr>
	<ul>
		<li>멤버 변수 : <%= member_v %></li>
	int local_v = 0;
		member_v += 10;
		local_v += 10;
	
      out.write("\r\n");
      out.write("	<h1>JSP의 멤버 변수와 지역 변수</h1>\r\n");
      out.write("	<hr>\r\n");
      out.write("	<ul>\r\n");
      out.write("		<li>멤버 변수 : ");
      out.print( member_v );

 

'study > JAVA 전문가' 카테고리의 다른 글

[ServletJSP] 시험 준비  (0) 2022.01.04
[JSP] java bean, 스코프, MVC모델  (0) 2022.01.04
[fileIUpload,jsp] 서블릿 구현  (0) 2021.12.30
[servlet]요청 재지정  (0) 2021.12.29
[servlet] 상태정보 유지 기술  (0) 2021.12.29

https://tomcat.apache.org/

 

Apache Tomcat® - Welcome!

The Apache Tomcat® software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication specifications. These specifications are part of the

tomcat.apache.org

 

에 들어가서 

 

다운로드를 합니다. 

 

next

 

agree

 

다음에 쓸 것을 생각하고 

host Manager, Examples를 체크해주고 next해줍니다. 

 

까먹으면 안 되니깐, 

pass는 알기 쉬운 걸로!

 

next, next해줍니다 (설치경로는 알아서!)

 

지금 사용 안 할거라서! 

run체크 해제해주고, show도 해제해줍니다. 

 

설치 경로로 들어가서 tomcat폴더를 눌러준다. 

계속 버튼을 눌러줘야한다. 

 

bin 폴더의 Tomcat9w눌러준다. 

 

start눌러주고

http://localhost:8080/

눌러주고

창이 뜨길 기다린다. 

이 창이 뜨면 성공

 

tomcat을 eclipse에 등록하기

server에 server를 누르고 next누른다. 

apach에서 tomcat서버 설치했던 9.0을 선택해준다. 

 

설치했던 경로를 넣어준다. 

 

server가 보이면 등록완료

 

web프로젝트 만들기

 

tomcat확인 후 next, next누른다.

 

체크후 finish

 

이렇게 프로젝트가 만들어졌다. 

 

web-programming 환경설정

window-preferences-Web-HTML files에ㅔ 인코딩 옵션을 utf-8로 바꿔준다. 

css, jsp도 설정해준다. 

 

Properties들어가서

Java Editor - Project Facets - java를 11로 바꿔준다. 

 

JavaSE-11로 설정 된 것을 볼 수 있다. 

 

test라는 Dynamic Web Project를 이클립스에 등록하기

server에 있는 Tomcat을 마우스 오른쪽 클릭해서 Add adn Remove를 눌른다. 

 

test프로젝트를 configured에 Add해주고 finish해준다. 

 

 

'study > java' 카테고리의 다른 글

Error querying database. Cause: java.lang.UnsupportedOperationException  (0) 2022.02.05
JAVA 상속(2)  (0) 2021.12.04
JAVA 상속  (0) 2021.12.04
[백준] 2750_수 정렬하기 (java)  (0) 2021.11.13
java Ajax 연습하기  (0) 2020.07.25

+ Recent posts