본문 바로가기

Study/JSP

[jsp] 기초

가장 기본적인 부분을 갖고 있는 것은 JSP
J2EE에 가장 핵심적인 부분 - Servlet/JSP, EJB 등

JSP - 웹 프로그래밍, 호환이 잘 된다. 프레임 워크의 기술들도 쓸 수 있다. 대용량 프로젝트도 가능하다
전체적인 로직을 다 커버할 수 있어야 한다
ASP - .NET(MS 툴, 호환이 잘 되지 않는다)
PHP - LINUX,(대용량 프로젝트엔 취약하다)

게시판에 대한 알고리즘

웹 어플리케이션 서버(WAS) - JSP, JAVA언어가 서비스 가능하다, 
대체적인 예로 
TOMCAT이 있다

J2EE - 컨테이너 : Servlet, JSP, EJB
        - 서비스 API : XML, JDBC, JTA, JMS, JNDI, JavaMail 

Servlet
~let 끝나는 Language를 가지는 것은 독립된 실행환경을 갖는다.
- 순수한 자바코드를 웹 브라우저에서 실행
-> Servlet을 대안한 Language가 JSP

이클립스
jar 파일 땡겨오는 방법
1. JRE System Library -> exe폴더 > jar /JDK
2. Apache Tomcat -> lib -> jar /
3. web application 

web.xml
url-pattern이 실행됐을 때, servlet-name 실행파일이름이 잇어야한다
이 xml파일을 수정하게 되면 Tomcat은 restart를 꼭 해야한다.

html은 문서가 보여지는 것에 대해 의미를 더 두고 있다면,
xml은 데이터들을 갖고 있는 것에 대해 의미가 더 크다

<servlet>
	<servlet-name>invoker</servlet-name>
	<servlet-class>
		org.apache.catalina.servlets.InvokerServlet
	</servlet-class>
	<init-param>
		<param-name>debug</param-name>
		<param-value>0</param-value>
	</init-param>
	<load-on-startup>2</load-on-startup>
</servlet>
 <servlet-mapping>
	<servlet-name>invoker</servlet-name>
	<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>

 

서블릿 웹 어플리케이션 폴더와 URL 패턴
웹 브라우저(클라이언트) <-> WAS
 -> ROOT 
  -> JSP
  -> WEB-INF
   -> lib : Web 어플리케이션 디렉토리(context)
   -> classes : 서블릿 파일
   -> Web.xml

위의 구조가 이런 식..
Project
-> src(java, servlet source)
-> Webcontent(html, JSP, CSS JavaScript 등)
 -> WEB-INF
  ->lib

<servlet-mapping>
	<servlet-name>helloworld</servlet-name>
   	<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>


웹에선 httpServlet을 상속 받는다.
누구를 상속 받느냐.. 가 중요

 

API 메소드
doGet(request, response)
- request : 요청과 관련되어 있다.
- response : 요청에 대한 응답과 관련되어 있다.

 

Get방식
- 데이터를 공개하며 전달, URL창에서 많이 쓰인다.


Post방식
- 데이터를 공개하지 않고 전달, 로그인 폼 등에서 많이 쓰인다.

instance 생성 (서블릿 객체 생성)
init()  (제일 먼저 호출되고 한번만 호출 되는 함수)
service() : doGet()
                doPost()
 (요청될 때마다 호출)
destroy() (톰캣 해제시 자원 해제)

 

 

예제1> 서블릿에서 한글 깨짐 방지

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 h1 extends HttpServlet {
 protected void doGet(HttpServletRequest request, HttpServletResponse response) 
 	throws ServletException, IOException {

  //html로 보여주겠다는 뜻
  response.setContentType("text/html;charset=euc-kr");
  PrintWriter out = response.getWriter();

  out.println("<html>");
  out.println("<head>");
  out.println("<title>Hello world</title>");  
  out.println("</head>");
  out.println("<body>");
  out.println("<h1>안녕 World!!</h1>");
  out.println("</body>");
  out.println("</html>");
  out.close();
 }
}

예제2> POST 처리 방식의 폼
QueryString.html

<html>
<head>
</head>
<body>
<!-- 포스트 처리 방식 -->
<form method="post" action=" /servlet_exam/Test">
 아 이 디 : <input type="text" name="id"  size="20"> <br>
 비밀번호 : <input type="password" name="pw"  size="20"> <br>
 회원이름 : <input type="text" name="name"  size="20"> <br>
 회원구분 : <input type="radio" name="class"  value="일반회원"> 일반회원
           <input type="radio" name="class"  value="교수님"> 교수님<br>
 전화번호 : <select name="phone1">
                 <option value="010"> 010 </option>    
                 <option value="011"> 011 </option>    
                 <option value="016"> 016 </option> 
                 <option value="017" selected> 017 </option>    
                 <option value="018"> 018 </option>    
                 <option value="019"> 019 </option>
           </select>              
    -                                                          
     <input type="text" name="phone2" size="4" maxlangth="4">
    -
     <input type="text" name="phone3" size="4" maxlangth="4"><br>
     <input type="submit" value="전송">
</form>
</body>
</html>

Test.java

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 Test extends HttpServlet {

 private static final long serialVersionUID = 1L;

 protected void doGet(HttpServletRequest request, HttpServletResponse response) 
 	throws ServletException, IOException {
  process(request,response);
 }

 protected void doPost(HttpServletRequest request, HttpServletResponse response) 
 	throws ServletException, IOException {
  process(request,response);
 }

 public void process(HttpServletRequest request, HttpServletResponse response) 
 	throws ServletException, IOException{
  //응답할때의 한글처리 (포스트 방식일경우)
  response.setContentType("text/html;charset=KSC5601");
  //폼에서 넘어 올때의 한글처리 (요청 오는것에 대한 한글 깨짐 방지, 포스트방식 일 경우)
  request.setCharacterEncoding("KSC5601");

  PrintWriter out = response.getWriter();

  String id = request.getParameter("id");
  String pw = request.getParameter("pw");
  String name = request.getParameter("name");
  String cl = request.getParameter("class");
  String phone1 = request.getParameter("phone1");
  String phone2 = request.getParameter("phone2");
  String phone3 = request.getParameter("phone3");
  
  out.println("<html>");
  out.println("<head><title>연락처</title></head>");
  out.println("<body><h3>연락처</h3>");
  out.println("id:"+id + "<br> password: "+ pw + "<br> 이름:" + name 
  + "<br>회원구분:" + cl+"<br>");
  out.println("전화번호:"+ phone1 +"-" +phone2+"-"+ phone3);
  out.println("</body></html>"); 
 }
}

예제3> GET 처리방식의 폼
Contact.html

<html>
<head>
<title>연락처</title>
</head>
<!-- 겟 처리 방식 -->
<body>
<h3>연락처</h3>
<form method=get action=/servlet_exam/Contact>
 이름 <input type=text name="name"><br>
 메일 <input type=text name="email"> <br>
 <p>
 <input type=submit value=전송>
 <input type=reset value=취소>
</form>
</body>
</html>

Contact.java

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 Contact extends HttpServlet {
 private static final long serialVersionUID = 1L;
 
 protected void doGet(HttpServletRequest request, HttpServletResponse response) 
 	throws ServletException, IOException { 
 }
 protected void doPost(HttpServletRequest request, HttpServletResponse response) 
 	throws ServletException, IOException {
  process(request, response);
 }
 
 public void process(HttpServletRequest request, HttpServletResponse response) 
 	throws ServletException, IOException{
  //한글 깨짐 방지 
  response.setContentType("text/html;charset=KSC5601");
  //폼에서 넘어올 때 한글 깨짐 방지
  request.setCharacterEncoding("KSC5601");
  
  PrintWriter out = response.getWriter();
  
  //각각의 파라미터를 요청받는다
  String name = request.getParameter("name");
  String email = request.getParameter("email");
  
   //겟방식일 경우 한글 처리
    if(request.getMethod().equalsIgnoreCase("get")){
     name = util.StringUtil.toHangul(name);
     email = util.StringUtil.toHangul(email);
    }    
  out.println("<html>");
  out.println("<head><title>연락처</title></head>");
  out.println("<body><h3>연락처</h3>");
  out.println("<a href=mailto:" +email+">"+name+"</a></body></html>"); 
 }
}