반응형

1.방명록dao

 

2.서블렛의 한계

단점

-> 동기화 사용

package study3;

import java.io.IOException;
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 LikeServlet extends HttpServlet{

	int i = 0;
	
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println(this.toString());
		/*많은 사람들이 동시에 접속해도 동일한 문자열이 계속 찍힌다 -> 동일한 인스턴스가 재사용되고 있다.
		 * 메모리 관리에는 장점이다
		 * 한꺼번에 많이 들어와도 적게 메모리를 소모한다
		 * */
		PrintWriter out = response.getWriter();
		out.println("<html><body>");
		
		/*왜 synchronized ?
		 * 동시 요청 시 여러개의 쓰레드가 하나의 서블릿 인스턴스를 사용할 수 있다.*/
		synchronized(this){
			i = i+1;
			for(int i = 0 ; i < 20000; i ++){
				out.println(this.i);
				
			}
		}
	
		out.println("</body></html>");
		out.flush();
		out.close();
	}
}

 

 

3.서블렛 여러 기능

<ConfigServlet.java>

package study3;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ConfigServlet extends HttpServlet{

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("service");
		
		//컨텍스트 경로
		String l = request.getContextPath();
		System.out.println("getContextPath : "  + l);
		
		//ip 주소 다음 나오는 전체 경로
		String m = request.getRequestURI();
		System.out.println("getRequestURI : "  + m);
		
		//접속한 브라우저의 ip 주소값
		String n = request.getRemoteAddr();
		System.out.println("getRemoteAddr : "  + n);
		
		//접속한 브라우저와 운영체제 정보를 담은 문자열이 얻어진다
		//이것을 이용하여 모바일로 접근한 건지 컴으로 접근 한 건지 알수 있고 
		//모바일용 화면과 컴용 화면을 구분하여 제공할 수 도 있다.
		String o = request.getHeader("User-Agent");
		System.out.println("User-Agent : "  + o);
		

		/*getContextPath : /study3
		getRequestURI : /study3/config
		getRemoteAddr : 0:0:0:0:0:0:0:1
		User-Agent : Mozilla/5.0 (Windows NT 6.2; Win64; x64; Trident/7.0; rv:11.0) like Gecko	*/
		
	}

	/*init
service
service
service
service -> 서블릿의 인스턴스는 재활용 된다. 
인스턴스는 재활용을 위해 내부적으로 적재된다 => init
적재되는 시점에 호출되는 함수가 init - 최초 요청 시 에만 호출된다.*/
	@Override
	public void init(ServletConfig config) throws ServletException {
//		String val = config.getInitParameter("apple");
//		System.out.println(val);
		
		/*WEB-INF 폴더의 절대 경로값을 얻어온다
		 * 브라우저가 접근 못하는 폴더가 업로드 파일을 놓기에 가장 적합
		 * 허락받고 (돈내고) 다운 받을 때 FileInputStream 으로 읽어 내보낸다
		 * FileInputStream : 절대 경로를 필요로한다
		 * getRealPath : 유용하게 쓰인다.*/
		ServletContext application = config.getServletContext();
		String path = application.getRealPath("/WEB-INF/");
		System.out.println(path);
		
//		System.out.println("init");
	}
	/*blabla
C:\workspace3\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\study3\WEB-INF\
service*/
}

<LikeServlet.java>

package study3;

import java.io.IOException;
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 LikeServlet extends HttpServlet{

	int i = 0;
	
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println(this.toString());
		/*많은 사람들이 동시에 접속해도 동일한 문자열이 계속 찍힌다 -> 동일한 인스턴스가 재사용되고 있다.
		 * 메모리 관리에는 장점이다
		 * 한꺼번에 많이 들어와도 적게 메모리를 소모한다
		 * */
		PrintWriter out = response.getWriter();
		out.println("<html><body>");
		
		/*왜 synchronized ?
		 * 동시 요청 시 여러개의 쓰레드가 하나의 서블릿 인스턴스를 사용할 수 있다.*/
		synchronized(this){
			i = i+1;
			for(int i = 0 ; i < 20000; i ++){
				out.println(this.i);
				
			}
		}
	
		out.println("</body></html>");
		out.flush();
		out.close();
	}
}

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_3_1.xsd" id="WebApp_ID" version="3.1">
	<servlet>
		<servlet-name>abcd5</servlet-name>
		<servlet-class>study3.LikeServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>abcd5</servlet-name>
		<url-pattern>/like</url-pattern>
	</servlet-mapping>
	
	
	<servlet>
		<servlet-name>abcd6</servlet-name>
		<servlet-class>study3.ConfigServlet</servlet-class>
		<init-param>
			<param-name>apple</param-name>
			<param-value>blabla</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>abcd6</servlet-name>
		<url-pattern>/config</url-pattern>
	</servlet-mapping>
	
	
</web-app>
반응형

'Language Study > Java' 카테고리의 다른 글

##자바 헷갈리는 이론  (0) 2019.08.01
제주에서 자바_Week3_3  (0) 2019.07.31
제주에서 자바_Week3_1  (0) 2019.07.29
제주에서 자바_Week2_3  (0) 2019.07.25
제주에서 자바_Week2_2  (0) 2019.07.24

+ Recent posts