반응형
목차
웹 서버
- server + applet
- servlet
- java 안에 html (css, js)
- jsp
- html 안에 java
- el, jst1
- 템플릿 엔진
- velocity
- thymeleaf
톰캣 설치
- 설치
- https://tomcat.apache.org/
- tamcat9 windows installer 다운로드
- 포트번호 8090 (오라클 충돌 방지)
- 경로는 java/tomcat9
- 설치 후 브라우저 접속 (http://localhost:8090)
이클립스 연결
- 퍼스펙티브 javaEE로 변경
- 운영 서버는 auto reloading enabled를 끔
- 재시작이 안되어서 수동으로 해주어야 함
- war 파일
- 톰캣에 배포하기 위한 파일
- export → war file
- 톰캣폴더 내의 webapps에 war 파일 붙여넣기
- 톰캣 스타트
- 파일 구조
- bin
- 실행
- conf
- 설정
- lib
- 라이브러리
- log
- 로그
- temp
- 임시
- webapps
- 어플리케이션
- work
- 톰캣 내부에서 필요한 파일
- bin
- 에러 로그 보는 법
- conf → server.xml
서블릿 사용해보기
- 코드 입력
package pro05.ex01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
@Override
public void init() throws ServletException{
System.out.println("init 메서드 호출");
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
System.out.println("시스템 메서드 호출");
}
@Override
public void destroy() {
System.out.println("destroy 메서드 호출");
}
}
- 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_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>pro05</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
<!-- 서블릿 등록 -->
<servlet>
<servlet-name>first</servlet-name>
<servlet-class>pro05.ex01.FirstServlet</servlet-class>
</servlet>
<!-- 서블릿 매핑 -->
<servlet-mapping>
<servlet-name>first</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
</web-app>
- Add and Remove 꼭 해주기

자동 매핑 사용
- 설정 방식
- xml
- 설정 불편
- 전체구조파악 용이
- java
- 설정 편함
- 전체구조파악 불편
- xml
- 어노테이션 방식 (java 방식)

package pro05.ex01;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class third
*/
@WebServlet("/third") // url 매핑
public class third extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public third() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
}

Servlet 객체
- getParameter(”파라미터 명”)
- 단일 값을 리턴
- getParameterValues(”파라미터 명)
- 다중 값 (배열)을 리턴
- getSession()
- 현재 요청과 관련된 세션 반환
- 세션이 없다면 새로운 세션 반환
- setSession()
- getAttribute()
- setAttribute()
- Response 객체
- 응답
- sendRedirect()
- 클라이언트에게 리다이렉트 응답을 보내고 특정 URL로 다시 요청하게 함
로그인 폼 만들어보기
- 전송 과정
- value값을 전달
- 폼 태그로 전송된 정보를 서블릿에서 받아 출력
- action에 명시된 이름과 매핑되는 서블릿 연결
- name의 id값으로 각 값을 전달
- getParameter
- 단일 값
- getParameterValues
- 다중 값
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="get" action="login">
아이디 : <input type="text" name="user_id"><br>
비밀번호 : <input type="password" name="user_pw"><br>
<input type="submit" value="로그인"><input type="reset" value="다시입력">
<input type="checkbox" name="subject" value="자바" checked>자바
<input type="checkbox" name="subject" value="언어" >C언어
<input type="checkbox" name="subject" value="JSP" >JSP
<input type="checkbox" name="subject" value="안드로이드" >안드로이드
</form>
</body>
</html>
package pro05.ex01;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
System.out.println("init 메서드 호출");
}
/**
* @see Servlet#destroy()
*/
public void destroy() {
System.out.println("destroy 메서드 호출");
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String user_id = request.getParameter("user_id");
String user_pw = request.getParameter("user_pw");
System.out.println("아이디 :" + user_id);
System.out.println("비밀번호 :" + user_pw);
String[] subject = request.getParameterValues("subject");
for(String str : subject) {
System.out.println("선택한 과목:" + str );
}
}
}

환율 계산기
package pro05.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class CalcServlet
*/
@WebServlet("/calc")
public class CalcServlet extends HttpServlet {
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
String command = request.getParameter("command");
String won = request.getParameter("won");
String operator = request.getParameter("operator");
if(command != null && command.equals("calculate")) {
String result = calculate(Float.parseFloat(won), operator);
pw.print("<html><font size =10>변환 결과</font><br>");
pw.print("<html><font size =10>" + result + "</font><br>");
pw.print("<a href='/pro05/calc'>환율 계산기</a>");
return;
}
pw.print("<html><title>환율 계산기</title>");
pw.print("<font size=5>환율 계산기</font><br>");
pw.print("<form name='frmCalc' method='get' action='/pro05/calc'/>");
pw.print("원화 : <input type='text' name='won' size=10/>");
pw.print("<select name='operator'>");
pw.print("<option value='dollar'>달러</option>");
pw.print("<option value='en'>엔화</option>");
pw.print("<option value='wian'>위안</option>");
pw.print("<option value='pound'>파운드</option>");
pw.print("<option value='euro'>유로</option>");
pw.print("</select>");
pw.print("<input type='hidden' name='command' value='calculate'/>");
pw.println("<input type='submit' value='변환'/>");
pw.println("</form>");
pw.print("</html>");
pw.close();
}
private static String calculate(float won, String operator) {
float USD_RATE = 1000;
float JPY_RATE = 1000;
float CNY_RATE = 1000;
float GBP_RATE = 1000;
float EUR_RATE = 1000;
String result = null;
if(operator.equals("dollar")) {
result = String.format("%.6f", won / USD_RATE);
}else if(operator.equals("en")) {
result = String.format("%.6f", won / JPY_RATE);
}else if(operator.equals("wian")) {
result = String.format("%.6f", won / CNY_RATE);
}else if(operator.equals("pound")) {
result = String.format("%.6f", won / GBP_RATE);
}else if(operator.equals("euro")) {
result = String.format("%.6f", won / EUR_RATE);
}
return result;
}
}

728x90
반응형
'BackEnd' 카테고리의 다른 글
| 5/23 - 서블릿, 쿠키와 세션, 필터와 리스너, JSP (0) | 2025.06.01 |
|---|---|
| 5/22 - Servlet, 쿠키, 세션 (0) | 2025.06.01 |
| 5/21 - 서블릿 응답 처리 방법 (0) | 2025.06.01 |
| Bean 등록 (1) | 2025.03.08 |
| springboot - 기초 (0) | 2025.03.07 |