본문 바로가기

회고록(TIL&WIL)

TIL 2023.01.16 Java Web

Web

apache tomcat

낮은 버젼부터 다운로드 tomcat 7은 아카이브 에서 zip 파일로 다운 받기

  1. jdk경로가 JAVA_HOME 환경 변수로 저장되어있어야한다.
  2. 다운 받은 tomcat 의 경로가 CATALINA_HOME 환경변수로 저장되어있어야한다.
  3. 시스템 path 변수에 %JAVA_HOME%\bin 추가
  4. tomcat의 bin 폴더에서 cmd창 열어서 startup.bat 파일을 실행하면 서버가 열림(cmd 닫으면 닫힘)
  5. 테스트로 localhost:8080으로 접속하면 톰캣 기본 화면 등장

apache-tomcat-7.0.109 -> webapps -> ROOT 폴더에 파일을 넣어 두고 읽을 파일의 경로를 입력하면 웹에 해당 파일을 보여줌
ex) localhost:8080/lec1/test.txt
ROOT 바깥, 즉 같은 선상의 경로들에 있는 파일을 읽을 수 있는데 ROOT안의 파일보다 우선순위가 높다.
파일을 지정하는게 아닌 폴더만 불러들일 경우 index.html, index.jsp 파일을 읽는다.

HTML

여러번 띄울때는 이스케이프 문자를 사용해서 띄워쓰기를 해야한다. (  또는  )
자주쓰는 것들은 문자열 표현으로 되어있고 사실 쓰는 것 만 쓰기때문에 필요한 이스케이프문자를 찾아서 이용하면 된다.
&, <, >, 를 직접 작성하고 싶을 때 이스케이프 문자로 표현해야한다. & < >

Eclipse Web 개발 세팅

perspective - Java EE 로 변경

서버 생성

웹 프로젝트 생성


웹서버는 I/O 통해서 일방적으로 웹을 읽어주는 역할을 하되 특정 상황에서 즉 기능이 필요한 경우에는 어플리케이션 서버로 전달하여
기능을 수행하고 다시 웹서버에선 그 결과를 읽어 들여 와서 웹브라우저에 뿌려줌

웹서버에 동작을 시킬 수 있는 기능 모듈을 올려서 기능을 추가하여 실행
tomcat에 apache 웹서버의 최소한 기능의 일부를 이식시켜버림 그래서 html같은 웹서버의 기능을 이용할 수 있게 되는 것
최종적으로 웹서버의 기능을 더 사용하기 위해 nginx를 끼워 넣을 예정

자바의 웹 프로젝트는 소스코드를 만들고 그 클래스파일을 만들기 때문에 최초 실행은 느릴지 몰라도 프로젝트 크기가 크면 클수록 자바로 만드는 프로젝트가 유리하다.

웹 개발 표준

  1. Servlet : 실행 코드 방식의 특징 (컴파일된 실행파일만 보내면되므로 보안에 훨씬 유리)
  2. JSP : 스크립트 코드 방식의 특징 (코드가 소스파일이자 실행파일)

웹 컨테이너 (WAS 컨테이너)

웹 서버의 컴포넌트 중 하나로 자바 서블릿과 상호작용한다.
웹 컨테이너는 서블릿의 생명주기를 관리하고, URL과 특정 서블릿을 맵핑하며 URL 요청이 올바른 접근 권한을 갖도록 보장한다
아파치 톰캣이 웹 컨테이너의 일종이다.

JSP

디렉티브 <%@ %>

page, taglib, include

<%@ page language="java" 
         contentType="text/html; charset=UTF-8" 
         pageEncoding="UTF-8" 
         import="java.util.Date"%>

스크립틀릿 <% %>

자바 코드와 똑같이 위에서 부터 읽어 내려간다. main method 와 같다.

<%
// 자바코드
int su1 = 1234;
out.println(su1);
%>

표현식 <%= %>

<%=su1 %>

선언부 <%! %>

<%!
class Inner{} // 이너클래스
int su2 = 4321; // 전역변수
public void func(){
  System.out.println("선언부");
}
%>
<%func(); %>

이클립스 에서 생성되는 jsp 파일 위치
나중에 파일 업로드했는데 업로드가 제대로 안되는 경우 해당 위치를 확인해봐야할 경우가 생길 수 있다.
E:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\day30\org\apache\jsp

Request 기본 내장 객체

웹 브라우저가 웹서버에 전송한 요청 관련 정보 제공

  • 클라이언트(웹 브라우저)와 관련된 정보 읽기
  • 서버와 관련된 정보 읽기
  • 클라이언트가 전송한 파라미터, 헤더, 쿠키 읽기
  • 속성 처리 가능
<p><%=request.getRemoteAddr() %></p>
<p><%=request.getMethod() %></p>
<p><%=request.getRequestURL() %></p>
<p><%=request.getContextPath() %></p>

<p>id : <%=request.getParameter("id") %></p>

Response 기본 내장 객체

<h1>에러페이지</h1>
<% response.setStatus(404); %>

데이터 전달을 위한 input 태그의 다양한 type

<body>
	<h1>go ex06</h1>
	<form action="ex06.jsp">
		id : <input type="text" name="id" value="default" readonly="readonly"><br>
		name : <input type="text" name="name" placeholder="이름"><br>
		pwd: <input type="password" name="pwd"><br>
		item1<input type="radio" name="ra" value="ra1" checked="checked">
		item2<input type="radio" name="ra" value="ra2">
		item3<input type="radio" name="ra" value="ra3">
		<br>
		item1<input type="checkbox" name="cb" value="cb1" checked="checked">
		item2<input type="checkbox" name="cb" value="cb2">
		item3<input type="checkbox" name="cb" value="cb3">
		<br>
		list
		<select name=sel size="3" multiple="multiple">
			<option value="sel0" selected="selected">opt0</option>		
			<option value="sel1">opt1</option>		
			<option value="sel2">opt2</option>		
		</select>
		<br>
		<textarea rows="10" cols="10" name="ta"></textarea>
		<br>
		<input type="submit" value="이동">
	</form>
</body>

form태그를 통해 전달한 데이터를 request 객체로 받기

<body>
<%
Enumeration en = request.getParameterNames();
while(en.hasMoreElements()){
	System.out.println("Parameter " + en.nextElement()); // 넘어오는 파라미터의 목록
}
Enumeration en2 = request.getHeaderNames();
while(en2.hasMoreElements()){
	System.out.println("Header " + en2.nextElement()); // 넘어오는 헤더의 목록
}
%>

	<h1>사용자 요청 파라미터</h1>
	<p>id : <%=request.getParameter("id") %></p>
	<p>name : <%=request.getParameter("name") %></p>
	<p>pwd : <%=request.getParameter("pwd") %></p>
	<p>ra : <%=request.getParameter("ra") %></p>
	<p>cb : <%
			String[] vals = request.getParameterValues("cb");
			for(String str : vals){
				out.println(str);
			}
			%></p>
	<p>sel : <%=request.getParameter("sel") %>
	<p>ta : <%=request.getParameter("ta") %></p>
</body>

'회고록(TIL&WIL)' 카테고리의 다른 글