Context/Application Scope - javax.servlet.ServletContextContext/Application scope begins when a webapp is started and ends when it is shutdown or reloaded. Parameters/attributes within the application scope will be available to all requests and sessions. The Context/Application object is available in a JSP page as an implicit object calledapplication. In a servlet, you can the object by callinggetServletContext(). or by explicitly callinggetServletConfig().getServletContext().
Request Scope - javax.servlet.http.HttpServletRequestRequest scope begins when an HTTP request is received by a servlet and end when the servlet has delivered the HTTP response. With respect to the servlet life cycle, the request scope begins on entry to a servlet’s service() method and ends on the exit from that method. Request object is available in a JSP page as an implicit object calledrequest. A request object attribute can be set in a servlet and passed to a JSP within the same request.
Session Scope -javax.servlet.http.HttpSessionA session scope starts when a client (e.g. browser window) establishes connection with a webapp and continues till the point where the client, again read browser window, closes. Hence, session scope may span across multiple requests from the same client. In a servlet, you can get Session object by callingrequest.getSession()and in a JSPsession.
JSP page Scope - javax.servlet.jsp.PageContextThe page scope restricts the scpoe and lifetime of attributes to the same page where it was created. It is available in a JSP page as an implicit object calledpageScope.
1. 컨텍스트/애플리케이션 범위 - javax.servlet.ServletContext 컨텍스트/애플리케이션 범위는 웹앱이 시작될 때 시작되고 종료되거나 다시 로드될 때 끝난다. 애플리케이션 범위 내의 매개변수/속성은 모든 요청 및 세션에서 사용할 수 있다. 컨텍스트/응용 프로그램 개체는 JSP 페이지에서 application 이라는 암시적 개체로 사용할 수 있다 . 서블릿에서 getServletContext()를 호출하여 객체를 만들 수 있다 . 또는 명시적으로 getServletConfig().getServletContext() 를 호출한다.
2. 요청 범위 - javax.servlet.http.HttpServletRequest 요청 범위는 서블릿이 HTTP 요청을 수신할 때 시작되고 서블릿이 HTTP 응답을 전달했을 때 끝난다. 서블릿 수명 주기와 관련하여 요청 범위는 서블릿의 service() 메서드에 들어갈 때 시작하여 해당 메서드에서 나갈 때 끝난다. 요청 객체는 JSP 페이지에서 요청 이라는 암시적 객체로 사용할 수 있다 . 요청 객체 속성은 서블릿에서 설정되고 동일한 요청 내에서 JSP로 전달될 수 있다.
3. 세션 범위 -javax.servlet.http.HttpSession 세션 범위는 클라이언트(예: 브라우저 창)가 웹앱과 연결을 설정할 때 시작되어 클라이언트가 다시 브라우저 창을 읽는 지점까지 계속된다. 따라서 세션 범위는 동일한 클라이언트의 여러 요청에 걸쳐 있을 수 있다. 서블릿에서 request.getSession() 을 호출 하고 JSP 세션 에서 Session 객체를 가져올 수 있다 .
4. JSP 페이지 범위 - javax.servlet.jsp.PageContext 페이지 범위는 속성의 scpo 및 수명을 생성된 동일한 페이지로 제한한다. JSP 페이지에서 pageScope 라는 암시적 객체로 사용할 수 있다 .
① Application Scope : ServletContext → getServletContext( );
② Session Scope : HttpSession → requestgetSession( );
③ Request Scope : HttpServletRequest → doGet(request, );
정보: 서블릿 [FirstServlet]을(를) 가용하지 않은 상태로 표시합니다. 2월 08, 2022 11:25:03 오전 org.apache.catalina.core.StandardWrapperValve invoke 심각: 서블릿 [FirstServlet]을(를) 위해 할당하던 중 예외 발생 java.lang.ClassNotFoundException: com.servlet.FirstServlet at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1415) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1223) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:533) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:149) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1071) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:789) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:128) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:366) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:639) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:847) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1680) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)
0-0. Windows Key → 시스템 환경 변수 편집 검색 후 실행
0-1. [시스템 속성] → [고급] → [환경 변수] 선택
0-2. [환경 변수] → [시스템 변수] → [새로 만들기] → CATALINA_HOME 생성 및 경로 입력
1. [환경 변수] → [시스템 변수] → [새로 만들기] 2. [시스템 변수 편집] → 변수 이름 : CATALINA_HOME / 변수 값 : C:\특정 경로\apache-tomcat-8.5.75 3. [시스템 변수 편집] →확인 버튼 마우스로 클릭 4. [환경 변수] → 확인 버튼 마우스로 클릭
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
int b, sum = 0;
cin >> s >> b;
for (int i=0; i<s.size(); i++) { // 문자열 크기만큼 반복
if (s[i] >= '0' && s[i] <= '9') { // 수가 문자가 아닌 경우
sum = sum*b + (s[i] - 48); // 문자 0 의 아스키코드 : 48
}
else
sum = sum*b + (s[i] - 65 + 10); // 문자 A 의 아스키코드 : 65
}
cout << sum;
return 0;
}
상근이는 보통 사람들이 사는 것과는 조금 다른 삶을 사는 사람이다. 상근이는 이런 사람들의 시선이 부담스럽기 때문에, 자신만의 숫자를 개발하기로 했다. 바로 그 이름은 팩토리얼 진법이다. 팩토리얼 진법은 각 자리에 올 수 있는 숫자는 0부터 9까지로 10진법과 거의 비슷하다. 하지만, 읽는 법은 조금 다르다. 팩토리얼 진법에서는 i번 자리의 값을 ai×i!로 계산한다. 즉, 팩토리얼 진법에서 719는 10진법에서 53과 같다. 그 이유는 7×3! + 1×2! + 9×1! = 53이기 때문이다.
팩토리얼 진법으로 작성한 숫자가 주어졌을 때, 10진법으로 읽은 값을 구하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 최대 5자리인 팩토리얼 진법 숫자가 주어진다. 입력의 마지막 줄에는 0이 하나 주어진다.
출력
각 테스트 케이스에 대해서, 입력으로 주어진 팩토리얼 진법 숫자를 10진법으로 읽은 값을 출력한다.
Python 코드
from sys import stdin # readline을 사용하기 위해 import
from math import factorial # factorial을 사용하기 위해 import
while True: # 0을 입력할 때까지 반복
number = stdin.readline().rstrip() # 팩토리얼 진법 숫자 입력
number_len = len(number) # 입력한 팩토리얼 진법 숫자의 길이를 저장하는 변수 선언
decimal_number = 0 # 팩토리얼 진법 숫자를 10진법으로 읽은 값을 저장할 변수 선언
if number == '0': # 입력한 팩토리얼 진법 숫자가 0이라면
break # 반복문 탈출
for i in range(number_len): # 팩토리얼 진법 숫자의 길이만큼 반복
decimal_number += int(number[i]) * factorial(number_len -i)
# 팩토리얼 진법 숫자에서 i번 자리의 값을 10진법으로 계산해
# decimal_number에 더한다.
print(decimal_number) # 팩토리얼 진법 숫자를 10진법 숫자로 읽은 값을 출력
심각: APR 기반의 Apache Tomcat Native 라이브러리가 호환되지 않는 버전 [1.1.20]이(가) 설치되어 있습니다. Tomcat은 버전 [1.2.14]을(를) 요구합니다.
2. 버전을 맞춰서 다시 실행해보니 아래와 같이 에러 발생
Can't load IA 32-bit .dll on a AMD 64-bit platform
3. tcnative-1.dll 1.2.14 version 64비트 파일로 다시 복사 후 실행 결과 아래와 같은 에러 발생
경고: APR 기반 Apache Tomcat Native 라이브러리를 로드하지 못했습니다. 보고된 오류는 [C:\Program Files\Eclipse Adoptium\jdk-8.0.312.7-hotspot\bin\tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform]입니다. java.lang.UnsatisfiedLinkError: C:\Program Files\Eclipse Adoptium\jdk-8.0.312.7-hotspot\bin\tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
2월 07, 2022 1:05:36 오후 org.apache.catalina.core.ApplicationContext log 정보: 서블릿 [WorldServlet]을(를) 가용하지 않은 상태로 표시합니다. 2월 07, 2022 1:05:36 오후 org.apache.catalina.core.StandardWrapperValve invoke 심각: 서블릿 [WorldServlet]을(를) 위해 할당하던 중 예외 발생 java.lang.ClassNotFoundException: com.servlet.WorldServlet at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1415) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1223) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:533) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:149) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1071) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:789) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:128) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:366) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:639) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:847) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1680) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)
4. tcnative-1.dll 파일 버전을 1.2.30으로 복사하니 console에서 에러는 안뜬다.
정보: APR 기반의 Apache Tomcat Native 라이브러리의 예전 버전 [1.2.14](이)가 설치되어 있습니다. Tomcat은 최소 버전으로서 [1.2.30]을(를) 추천합니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
var name ="홍길동";
var age =20;
var height= 179.9;
var weight =69.5;
var isMarried = true;
var phone=["010","011"];
var email=["naver@naver.com","naver@gmail.com"];
var address = null; // null은 값이 정해져 있지 않는 경우
var pets={
"cat":"야오옹",
"dog":"멍머엉"
};
var f = function(){};
var f2 = null;
var f3;
console.log(typeof name); // "string"
console.log(typeof age); // "number"
console.log(typeof height); // "number"
console.log(typeof weight); // "number"
console.log(typeof isMarried); // "boolean"
console.log(typeof phone); // "object"
console.log(typeof email); // "object"
console.log(typeof address); // "object"
console.log(typeof pets); // "object"
console.log(typeof cat); // "object"
console.log(typeof dog); // "object"
console.log(typeof f); // "function"
console.log(typeof f2); // "object"
console.log(typeof f3); // "undefined"
</script>
</head>
<body>
</body>
</html>
var
javascript ES5버전까지의 변수 선언 방식
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
// var 키워드
// 변수 선언
var num;
console.log("var:", num); //undefined
// 변수 초기화
num = 10;
console.log("var:", num); //10
num = "홍길동";
console.log("var:", num); //홍길동
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
// var 키워드
// 변수 선언
// 변수 초기화
// 1. var는 변수명 중복이 가능하다.
var num = 10;
var num = 10;
console.log("var:", num); //undefined
// 2. 함수 scope
if(true){
var m = 20;
console.log("블럭안:", m);
}
console.log("블럭밖:", m);
function fun() {
var x = 10;
console.log("fun:", x);
}
fun();
// console.log(x); //에러 , 함수 블록 불러서
console.log("///////////////////")
// 3. 호이스팅
console.log(n); // undefined
var n = 10;
console.log(n); // 10
</script>
</head>
<body>
</body>
</html>
let
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
// let 키워드 (ES6)
// 변수 선언
let num;
console.log("let:", num); //undefined
// 변수 초기화
num = 10;
console.log("let:", num); //10
num = "홍길동";
console.log("let:", num); //홍길동
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
// let 키워드 (ES6)
// 변수 선언
// 변수 초기화
// 1. let은 변수명 중복이 안된다.
/* let num = 10;
let num = 20; // 에러 이유?
console.log("let:", num); *///undefined
//Uncaught SyntaxError: Identifier 'num' has already been declared
// 2. 블럭 scope
if(true){
let m = 20;
console.log("블럭안:", m);
}
/* console.log("블럭밖:", m); 에러이유? 블럭 안에서 선언된 것은 안에서만 사용 가능*/
// Uncaught ReferenceError: m is not defined
// at let2.html:23
function fun() {
let x = 10;
console.log("fun:", x);
}
fun();
// console.log(x); // 에러이유? 블럭 안에서 선언된 것은 안에서만 사용 가능
console.log("///////////////////")
// 3. 호이스팅 불가
/* console.log(n); */ // 에러이유? hosting을 수행하지만 초기화 되기 전을 참조
let n = 10;
console.log(n);
</script>
</head>
<body>
</body>
</html>