Post

반응형

JSP 태그, request, response, 지시자, 액션태그


JSP 태그


  • JSP는 html코드에 java를 사용하여 다이나믹 웹을 만들 수 있다.
  • html에서 java를 사용하기 위해 jsp 태그를 사용한다.
  • jsp 태그
    • 지시자 : <%@ @> 페이지 속성
    • 주석 : <%-- --%>
    • 선언 : <%! %> 변수, 메소드 선언
    • 표현식 : <%= %> : 결과값 출력
    • 스크립트릿 : <% %> java 코드
    • 액션태크 : <jsp:action> </jsp:action> : 자바빈 연결

JSP 동작 원리


  • client가 web에 jsp 요청 시 jsp 컨테이너가 jsp파일을 servlet파일(.java)로 변환
  • 그리고 servlet파일(.java)은 컴파일 된 후 클래스 파일(.class)로 변환되고 html 파일로 응답함.
  • jsp가 요청을 받을 시 servlet, class 파일로 변환되고 메모리에 올려지고, 요청 응답을 한다.
  • 다시 요청을 받을 시 메모리에 이미 올려져있으므로, 메모리에 올려진 데이터를 재활용해서 응답 한다. 

JSP 내부 객체


  • 개발자가 객체를 생성하지 않고 바로 사용할 수 있는 객체.
  • JSP컨테이너에 의해 Servlet으로 변화될 때 자동으로 객체가 생성 됨.
  • 내부객체 종류
    • 입출력 객체 : request, response, out
    • 서블릿 객체 : page, config
    • 세션 객체 : session
    • 예외 객체 : exception

JSP 스크립트릿, 선언, 표현식


  • <% java 코드 기술 %>
  • jsp페이지에서 java 언어를 사용하기 위한 요소
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
int i = 0;
for(i = 0; i < 10++i)
{
       out.println(i+":"+"HelloWorld"+"<br/>");
}
%>
</body>
</html>
cs


  • <% java 선언 기술 %>
  • jsp페이지에서 변수 또는 메소드를 선언할 때 사용함.
  • 변수는 '<%' 사용시 에러 안나는데 함수는 에러남.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
int a = 10;
int b = 20;
%>
<%!
public int sum(int a, int b)
{
       return a+b;   
}
%>
<%
out.println(a+"+"+b+"="+sum(a, b)+"<br/>");
%>
</body>
</html>
cs


  • <%= java 코드 기술 %>
  • 변수의 값 또는 메소드 호출 결과값을 출력하기 위해 사용됨.
  • 결과값은 String 타입이며 ;를 사용할 수 없다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
int a = 10;
int b = 20;
%>
<%=%></br>
<%=%></br>
</body>
</html>
cs


JSP 지시자


  • JSP 페이지의 전체적인 속성을 지정할 때 사용.
  • <%@ 속성 %>
  • page : JSP페이지 속성. import 할 때도 쓴다.
1
2
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
cs


  • include : 다른 page의 내용을 삽입함.
  • JspEx.jsp, IncludeEx.jsp 파일을 만들고 JspEx.jsp 소스에 include 지시자를 사용한다.
  • 출력결과  JspEx.jsp 페이지 IncludeEx.jsp 페이지 라고 나오는 것을 확인할 수 있다.
JspEx.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page import="java.util.Arrays" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
JspEx.jsp 페이지
<%@ include file="IncludeEx.jsp" %>
</body>
</html>
cs


IncludeEx.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
IncludeEx.jsp 페이지
</body>
 
</html>
cs


taglib 지시자


  • 사용자가 만든 tag들을 태그 라이브러리라고 함.
  • 유명한 라이브러리로 JSTL이 있음.

JSP 주석


  • <%-- 주석 -->
  • JSP 주석은 페이지 소스 보기로 보이지 않음.
  • JSP 안에서 java 주석을 사용해도 됨.

request 객체


  • web client가 server로 정보를 요청하는 것을 request라고 함.
  • 요청정보는 request 객체가 관리함.
  • 메소드
    • getServerName() : 서버 이름 얻어옴
    • getServerPort() : 서버 포트 번호 얻어옴
    • getContextPath() : 웹어플리케이션의 컨텍스트 패스를 얻음.
    • getMethod() : get, post 방식 구분
    • getSession() : session 객체 얻음.
    • getProtocol() : protocol 객체 얻음.
    • getRequestURL() : 요청 URL을 얻음.
    • getRequestURI() : 요청 URI를 얻음.
    • getQueryString() : 쿼리스트링을 얻음.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
out.println("ServerName:"+request.getServerName()+"<br/>");
out.println("ServerPort:"+request.getServerPort()+"<br/>");
out.println("ContextPath:"+request.getContextPath()+"<br/>");
out.println("Get or Post?:"+request.getMethod()+"<br/>");
out.println("URL:"+request.getRequestURL()+"<br/>");
out.println("URI:"+request.getRequestURI()+"<br/>");
out.println("QueryString:"+request.getQueryString()+"<br/>");
%>
</body>
</html>
cs


Parameter메소드


  • JSP 코드로 요청받은 정보의 값을 얻어온다.
  • 메소드
    • getParameterNames() : Parameter 이름 구함
    • getParameter(String name) : Parameter 이름으로 값을 찾음.
    • getParameterValues(String name) : 배열같이 여러개의 값을 가지고 있을 때 이름을 구함.

form.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="JspEx.jsp" method="post">
이름:<input type="text" name="name" size="10"><br/>
아이디:<input type="text" name="id" size="10"><br/>
비밀번호:<input type="password" name="pw" size="10"><br/>
취미:<input type="checkbox" name="hobby" value="read">독서
<input type="checkbox" nam="hobbpy" value="cook">요리
<input type="checkbox" nam="hobbpy" value="run">조깅
<input type="checkbox" nam="hobbpy" value="swim">수영
<input type="checkbox" nam="hobbpy" value="sleep">취침<br/>
<input type="radio" name="major" value="kor">국어
<input type="radio" name="major" value="checked">영어
<input type="radio" name="major" value="mat">수학
<input type="radio" name="major" value="des">디자인<br/>
<select name="protocol">
<option value="http">http</option>
<option value="ftp" selected="selected">ftp</option>
<option value="smtp">smtp</option>
<option value="pop">pop</option>
</select><br/>
<input type="submit" value="전송">
<input type="reset" value="초기화">
</form>
</body>
</html>
cs


JspEx.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%@page import ="java.util.Arrays" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equivb="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
String name, id, pw, major, protocol;
String[] hobbys;
%>
<%
request.setCharacterEncoding("EUC-KR");
name = request.getParameter("name");
id = request.getParameter("id");
pw = request.getParameter("pw");
major = request.getParameter("major");
protocol = request.getParameter("protocol");
hobbys = request.getParameterValues("hobby");
%>
이름:<%= name %><br/>
id:<%=id %><br/>
pw:<%=pw %><br/>
major=<%=major %><br />
protocol=<%=protocol %><br />
</body>
</html>
cs



response 객체의 이해


  • 요청의 응답 정보를 가지고 있는 객체.
  • 메소드
    • getCharacterEncoding() : 응답할 때 문자의 인코딩 형태를 구함.
    • addCookie(Cokkie) : 쿠키 지정.
    • SendRedirect(URL) : 지정한 URL로 이동.
    • 아래 예제는 id가 admin일 경우 admin. 페이지로 이동하고 일반 유저일 경우 user 페이지로 이동하게 해놨다. 

form.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="JspEx.jsp">
id를 입력해주세요
<input type="text" name="id" size="10">
<input type="submit" value="전송">
</form>
</body>
</html>
 
cs


JspEx.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equivb="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
String str = request.getParameter("id");
if(str.equals("admin"))
{
       response.sendRedirect("admin.jsp?id="+str);     
}
else
{
       response.sendRedirect("user.jsp?id="+str);      
}
       
%>
</body>
</html>
cs


JSP 액션태그


  • JSP 파일에서 어떤 동작을 하도록 지시하는 태그.
  • forward, include, param 태그 등.. 이 있다.

forward 태그


  • 다른 페이지로 이동할 때 사용
  • 다른 페이지로 이동해도 이동한 페이지 url로 변경되지 않음.
  • <jsp:forward page="sub.jsp"/>
1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equivb="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>jspEx.jsp 페이지</h1>
<jsp:forward page="user.jsp"/>
</body>
</html>
cs


include 태그


  • 현재 페이지에 다른 페이지를 삽입함.
  • <jsp:include page="otherpagename.jsp"/>
1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equivb="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>jspEx.jsp 페이지</h1>
<jsp:include page="user.jsp"/>
</body>
</html>
cs


param 태그


  • 데이터를 전달하는 태그.
  • 이름과 값으로 이루어져 있다.
  • forward, include 태그와 같이 사용하면 페이지를 넘길 때 Param을 넘겨줄 수 있다.
  • <jsp:param name="id" value="id" />

JspEx.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equivb="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="user.jsp">
<jsp:param name="id" value="id" />
<jsp:param name="pw" value="!@#!@#" />
</jsp:forward>
</body>
</html
cs


user.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
       String id, pw;
%>
<%
id = request.getParameter("id");
pw = request.getParameter("pw");
%>
유저정보
id : <%=id %>
pass : <%=pw%>
</body>
</html>
cs


반응형

'이전게시판 > JSP' 카테고리의 다른 글

JDBC로 OLACLE 접속  (0) 2018.10.22
JSP 쿠키, Session, 예외 페이지, 자바빈  (0) 2018.10.21
Servlet 값 초기화, 리스너  (0) 2018.10.20
Servlet Get,Post 동작  (0) 2018.10.19
Servlet 설정, 예제  (0) 2018.10.18
JSP 설치, 설정, 실행  (0) 2018.10.18

Post

반응형

Servlet 값 초기화, 리스너


ServletConfig


  • 특정 Servlet이 생성될 때 초기에 필요한 데이터가 있음.
  • WebContent/WEB-INI/web.xml에 기술하고 Servlet 파일에서는 Servlet.Config 클래스를 이용해서 접근.
  • 아래 예제에서 InitParam 주소를 IP로 mapping 하고 있다.
  • 또 Parameter id, pw에 값을 초기화할 수도 있다.

WebContent\web.xml
<?xml version="1.0" encoding="UTF-8"?>
  <display-name>LifeCycle</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
 
  <servlet>
  <servlet-name>InitParam</servlet-name>
  <servlet-class>com.java.w.InitParam</servlet-class>
 
  <init-param>
  <param-name>id</param-name>
  <param-value>id</param-value>
  </init-param>
  <init-param>
  <param-name>pw</param-name>
  <param-value>12345</param-value>
  </init-param>
   </servlet>
  <servlet-mapping>
  <servlet-name>InitParam</servlet-name>
  <url-pattern>/IP</url-pattern>
  </servlet-mapping>
</web-app>

InitParam.java
package com.java.w;

import java.io.IOException;
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 InitParam
*/
@WebServlet("/InitP")
public class InitParam extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public InitParam() {
        super();
        // TODO Auto-generated constructor 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());
        
        String id = getInitParameter("id");
        String pw = getInitParameter("pw");
        System.out.println("id ="+id);
        System.out.println("pw ="+pw);        
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}



Servlet에서 Parameter를 직접 초기화 할 수도 있다.


  • @WebServlet("/InitP") 되어있는 소스코드를 아래와 같이 수정한다.
  • @WebServlet(urlPatterns= {"/InitP"}, initParams={@WebInitParam(name="id",  value="id"), @WebInitParam(name="pw", value="1234")})



Servlet 데이터 공유


  • 여러 Servlet에서 특정 데이터를 공유할 수 있다.
  • web.cml파일에 context parameter 을 넣는다.
  • 여러 Servlet이 사용하므로 코드 상단에 추가해야한다.
  • ServletContext 메소드를 이용해서 데이터를 불러온다.

web.xml
<context-param>
<param-name>id</param-name>
<param-value>abc</param-value>
</context-param>
<context-param>
<param-name>pw</param-name>
<param-value>123</param-value>
</context-param>



jsp
String id = getServletContext().getInitParameter("id");
String pw = getServletContext().getInitParameter("pw");
              
System.out.println("id="+id);
System.out.println("pw="+pw);

웹 어플리케이션 감시


웹어플리케이션을 감시하는 Listener를 만들수 있다.
ServletContextListener을 상속하면 감시 클래스가 된다.
웹 어플리케이션 시작, 종료 시 호출된다.(호출함수:contextInitialized, contextDestroyed)

WebContent\web.xml
<?xml version="1.0" encoding="UTF-8"?>
  <display-name>LifeCycle</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
 
       <listener>
       <listener-class>
       com.java.w.ServetlL
       </listener-class>
       </listener>
</web-app>

package com.java.w;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ServetlL implements ServletContextListener{
       @Override
       public void contextDestroyed(ServletContextEvent sce) {
              // TODO Auto-generated method stub
                     System.out.println("contextDestroyed");
       }
       @Override
       public void contextInitialized(ServletContextEvent sce) {
              // TODO Auto-generated method stub
              System.out.println("contextInitialized");
                     
       }
}


Servlet Listener


  • web.xml 에서 Lisner를 선언하지 않고  Servelt 소스코드에서(class 이름 위에)@WebListener 라고 명시해도 Listener 클래스가 된다


반응형

'이전게시판 > JSP' 카테고리의 다른 글

JDBC로 OLACLE 접속  (0) 2018.10.22
JSP 쿠키, Session, 예외 페이지, 자바빈  (0) 2018.10.21
JSP 태그, request, response, 지시자, 액션태그  (0) 2018.10.20
Servlet Get,Post 동작  (0) 2018.10.19
Servlet 설정, 예제  (0) 2018.10.18
JSP 설치, 설정, 실행  (0) 2018.10.18

Post

반응형

오늘 한 일


  • Servlet 동작, Get,Post 실습

오늘 느낀 점


  • git 블로그 찾아볼 것

내일 할 일 (계획)


  • git 블로그 생성하기
  • JSP 공부하기


반응형

'이전게시판 > TIL' 카테고리의 다른 글

2018.12.08_TIL  (0) 2018.12.08
2018.12.07_TIL  (0) 2018.12.08
18.10.21_TIL  (0) 2018.10.21
18.10.20_TIL  (0) 2018.10.20
18.10.18_TIL  (0) 2018.10.18
18.10.17_TIL  (0) 2018.10.17
18.10.16_TIL  (0) 2018.10.16
TIL(Today I Learn) 시작  (0) 2018.10.15

Post

반응형

Servlet Get,Post 동작


Get, Post방식


  • Client가 요청할 때 Get, Post 방식이 있다.
  • Get방식은 URL 값으로 정보가 전송되어 보안에 약함
  • Post방식은 header를 이용해 정보가 전송되어 보안에 강함.


Get방식


  • html내 form 태그의 method 속성이 get일 경우 호출됨.
  • HttpServletRequest 요청 처리 객체
  • HttpServletResponse 응답 처리 객체
  • response.setContentType("text/html") text/html로 응답을 보내겠다는 의미
  • html문법을 쓸 수 없기 때문에 PrintWriter class로 html 문법 사용 가능


Post방식


  • jsp파일에 method가 post인 form을 생성한다.
  • form action은 이동할 url 값으로 설정한다.
<form action="hw" method="post">
       <input type="submit" value="post">

</form>


Context Path


  • WSA에서 웹 어플리케이션을 구분하기 위한  Path.
  • 이클립스에서 프로젝트를 생성하면, 자동으로 server.xml에 추가됨.
  • http://localhost:8090/ex/hw

<Context docBase="ex" path="/ex" reloadable="true" source="org.eclipse.jst.jee.server:ex"/></Host>

Servlet 작동순서


  • 클라이언트에서 servlet 요청이 들어오면 서버에서는 servlet 컨테이너를 만들고 요청이 있을 때마다 스레드 생성.
  • 보통 web Server는 요청이 많을수록 객체를 생성해서 느려진다.
  • Servlet은 JVM 위에 MultiThread로 처리할 수 있어서 부하가 적다.
  • Servlet 객체 생성(최초)->Init() 호출(최초)->service(), doGet(), doPost() 호출(요청시)->destroy() 호출(마지막 한번, 서버 재가동 등..)
  • Init()호출 전 선처리 @PostConstruct 가 호출됨.
  • destory()호출 후 후처리 @PreDestroy가 호출됨.

form 태그


  • 서버쪽으로 정보를 전달할 때 사용.
  • ex) <form action = "Form" method="post">
  • action : 요청하는 컴포넌트 이름(join.jsp , info.gtml)
  • post : 요청을 처리하는 방식(get, post)
  • Get : local:8090/컨텍스트/path/MemberJoin?id="abcd"&name="ww"
  • Post : local:8090/컨텍스트/path/MemberJoin
  • 아래는 jsp, servlet 예제

jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="FormEx" method="post">
이름:<input type="text" name="name" size="10"><br/>
아이디:<input type="text" name="id" size="10"><br/>
비밀번호:<input type="password" name="pw" size="10"><br/>
취미:<input type="checkbox" name="hobby" value="read">독서
<input type="checkbox" nam="hobbpy" value="cook">요리
<input type="checkbox" nam="hobbpy" value="run">조깅
<input type="checkbox" nam="hobbpy" value="swim">수영
<input type="checkbox" nam="hobbpy" value="sleep">취침<br/>
<input type="radio" name="major" value="kor">국어
<input type="radio" name="major" value="checked">영어
<input type="radio" name="major" value="mat">수학
<input type="radio" name="major" value="des">디자인<br/>
<select name="protocol">
<option value="http">http</option>
<option value="ftp" selected="selected">ftp</option>
<option value="smtp">smtp</option>
<option value="pop">pop</option>
</select><br/>
<input type="submit" value="전송">
<input type="reset" value="초기화">
</form>
</body>
</html>


servlet
package com.java.w;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
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 FormEx
 */
@WebServlet("/FormEx")
public class FormEx extends HttpServlet {
       private static final long serialVersionUID = 1L;
      
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FormEx() {
        super();
        // TODO Auto-generated constructor 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());
       }
       /**
        * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
        */
       protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              // TODO Auto-generated method stub
              doGet(request, response);
              
              System.out.println("doPost");
              
              String id = request.getParameter("id");
              String pw = request.getParameter("pw");
              String[] hobbys = request.getParameterValues("hobby");
              String major = request.getParameter("major");
              String protocol = request.getParameter("protocol");
              response.setContentType("text/html; charset=EUC-KR");
              PrintWriter writer = response.getWriter();
              
              writer.println("");
              writer.println("아이디:"+id+"
"); writer.println("비밀번호:"+pw+"
"); writer.println("취미:"+Arrays.toString(hobbys)+"
"); writer.println("전공:"+major+"
"); writer.println("프로토콜:"+protocol); writer.println(""); writer.close(); } }


한글처리


  • Tomcat 서버의 기본 문자 처리 방식은 IOS-8859-1 방식.
  • 별도의 인코딩을 하지 않으면 한글이 깨져보임
  • server.xml 수정
    • <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8090"  protocol="HTTP/1.1" redirectPort="8443"/>
  • servlet 인코딩 세팅 추가
    • request.setCharacterEncoding("UTF-8");



반응형

'이전게시판 > JSP' 카테고리의 다른 글

JDBC로 OLACLE 접속  (0) 2018.10.22
JSP 쿠키, Session, 예외 페이지, 자바빈  (0) 2018.10.21
JSP 태그, request, response, 지시자, 액션태그  (0) 2018.10.20
Servlet 값 초기화, 리스너  (0) 2018.10.20
Servlet 설정, 예제  (0) 2018.10.18
JSP 설치, 설정, 실행  (0) 2018.10.18

Post

반응형

오늘 한 일


  • JSP, Servlet 기초 예제 들음
  • to-do-list add 버튼 클릭 시 아이템 추가

오늘 느낀 점


  • 검색하다가 javascript에 클로저, 이벤트 위임이라는게 있다는걸 알았다. 내 홈페이지 수정 좀 해야할 듯..
  • gitpage + jekyll 이나 hexo로 블로그 만들고 싶다

내일 할 일 (계획)


  • git 블로그 생성하기
  • JSP 공부하기


반응형

'이전게시판 > TIL' 카테고리의 다른 글

2018.12.08_TIL  (0) 2018.12.08
2018.12.07_TIL  (0) 2018.12.08
18.10.21_TIL  (0) 2018.10.21
18.10.20_TIL  (0) 2018.10.20
18.10.19_TIL  (0) 2018.10.19
18.10.17_TIL  (0) 2018.10.17
18.10.16_TIL  (0) 2018.10.16
TIL(Today I Learn) 시작  (0) 2018.10.15

Post

반응형

Servlet 설정, 예제


Servlet 이란


  • JSP는 Html 위에서 JSP 문법을 사용하는 서버Side 파일.
  • JSP와 다르게 순수 Java코드만 사용.
  • 모델1은 JSP가  Model, View, Controller 기능을 전부 수행하지만
  • 모델2는 JSP가 View, Servlet이 Controller 기능을 각 각 따로수행하는 것으로 이해했다.
  • 모델2에서 JavaBeans가 Model이라고 한다.

 

Servlet 파일 생성


  • 프로젝트 생성 후 Java Resources 폴더 오른쪽클릭-New-Servlet 클릭
  • JavaPackage, Class Name을 작성(각각 com.TestProject, HelloServlet 이라고 적음)
  • 그리고 Next를 눌러서 URL mappings 에 이름을 변경한다.
  • usr mappings 값은 java 소스코드에 접근하기 위한 urlName 이다.
  • ex ) http://localhost:8090/<ProejctName>/<urlName>

Servlet 파일 작성


  • Java에서 html 태그를 쓰기위해서 PrintWriter 객체를 사용.
  • doGet함수에서 다음과 같이 소스를 작성한다.
  • 서버를 실행시켜 http://localhost:8090/<ProejctName>/<urlName> 도메인으로 접속하면 'Hello World'가 보인다.
  • but 아래 예제를 실행하면 크롬에서는 태그 자체가 보인다.
  • response.getWriter().append("Served at: ").append(request.getContextPath());
  • 위 소스를 지우면 또 잘 보이고, html 문서 새로 만들어서 동일하게 출력하게 만들었는데도 잘된다.
  • java 파일 변환과정에서 크롬이 잘못해석하는 변환이 있는건가?싶다.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              // TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
              
PrintWriter out = response.getWriter();
out.print(" <br>");
out.print("<html>");
out.print("<head>");
out.print("</head>");
out.print("<body>");
out.print("<p>Hello World</p>");
out.print("</body>");
out.print("</html>");
}

Servlet class 파일 확인


  • java 파일을 class 파일로 변환한 것을 확인해본다.
  • 자신의 javaProjectPath\build\classes\com\ProjectName\ 폴더안에 class 파일이 있는것을 확인할 수 있다.


반응형

'이전게시판 > JSP' 카테고리의 다른 글

JDBC로 OLACLE 접속  (0) 2018.10.22
JSP 쿠키, Session, 예외 페이지, 자바빈  (0) 2018.10.21
JSP 태그, request, response, 지시자, 액션태그  (0) 2018.10.20
Servlet 값 초기화, 리스너  (0) 2018.10.20
Servlet Get,Post 동작  (0) 2018.10.19
JSP 설치, 설정, 실행  (0) 2018.10.18

Post

반응형

JSP 설치, 설정, 실행


웹컨테이너란?


  • 웹서버에서 서블릿클래스, JSP파일을 실행시킬 수 있는 환경을 뜻한다.
  • 개발자는 jsp로 작업을 하고, 웹 컨테이너는 기계가 이해할 수 있도록 java, class, obj 파일을 만드는 역활을 한다.

웹컨테이너 환경을 제공해 주는 프로그램?


  • ApacheTomcat
  • Apache는 http웹 서버이다. 
  • Tomcat은 Web Application Service 이다. 웹 서버 기능도 할 수 있다.
  • 하지만 Apache는 정적인 데이터를 처리하고, Tomcat은 동적 데이터 처리해야 한다.
  • 목적에 따라 둘을 달리 쓰는 것이다.


Apache Tomcat 설치


  • 다운로드 링크 : https://tomcat.apache.org/
  • 나는 8.5.28 기준으로 설치하였다.
  • Zip 파일 클릭해서 다운로드 받는다.

웹컨테이너 설정


  • Server Tab이 있어야 한다. 없으면 메뉴에서 Window-Show View-Server를 찾아서 클릭한다.
  • Server Tab이 생기고 'No server are available. Click this... ' 라는 메시지가 보인다. 클릭하고 알맞은 versions 을 선택한다.
  • Apache Tomcat이 있는 폴더를 선택.
  • Server Tab에 'Tomcat v8.5 Server at localhost' 텍스트를 더블클릭하면 설정창이 뜬다. 
  • Server Locations 항목에서 'User Tomcat installation' 선택
  • Server Option 항목에서 'Publish module context to separate XML files' 선택(실제 tomcat 있는 폴더와 동기화 한다는 뜻)
  • Ports 항목에서 HTTP/1.1 Port Number를 8090으로 변경(8080은 DB 사용시 사용할 것)
  • 저장한 다음 Server Tab에 있는 디버그 아이콘 중에 Publish to the server 아이콘을 클릭. 서버와 동기화 완료.
  • 디버그 아이콘을 클릭하면 서버가 실행된다.(Start the Server)
  • 서버 실행을 확인방법은 http://localhost:8090/ 이 주소로 접속해서 tomcat 관련 페이지가 보이면 실행되는 것이다.

프로젝트 생성, JSP 파일 생성


  • 프로젝트 화면에서 오른쪽 클릭-New-Other-Dynamic Web Project 선택
  • 마지막 생성화면에서 'Generate web.xml deployment descriptor' 체크.
  • 프로젝트 생성 후 프로젝트 오른쪽 클릭-New-JSP File 클릭.
  • JSP파일은 WebContent 폴더 안에 생성되어야 한다.
  • 그러면 익숙한 html이 보인다. JSP는 html 위에서 jsp문법을 추가한 것.

JSP 파일 실행



<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
       <p>Hello JSP World!</p>
</body>
</html>

  • Project 오른쪽 마우스 클릭 후 Run As - Run on Server 클릭하면 서버가 다시 올라간다.
  • 서버 접속은 local:8090/ProjectName/jsp file name이다.
  • 페이지 소스코드 보기로 보면 jsp 문법은 보이지 않고, html만 보인다.

.java, .class 파일 확인


  • 맨처음 Apache 폴더에서 work\Catalina\localhost\<ProjectName>\org\apache\jsp 폴더에 들어가면
  • 우리가 만들었던 jsp 파일을 이용해 웹컨테이너가 java, class 파일을 만든것을 확인할 수 있다.
  • ex) D:\apache-tomcat-8.5.34\work\Catalina\localhost\testProject\org\apache\jsp

반응형

'이전게시판 > JSP' 카테고리의 다른 글

JDBC로 OLACLE 접속  (0) 2018.10.22
JSP 쿠키, Session, 예외 페이지, 자바빈  (0) 2018.10.21
JSP 태그, request, response, 지시자, 액션태그  (0) 2018.10.20
Servlet 값 초기화, 리스너  (0) 2018.10.20
Servlet Get,Post 동작  (0) 2018.10.19
Servlet 설정, 예제  (0) 2018.10.18

Post

반응형

오늘 한 일


  • To-Do List 작업
  • Java 기초 공부

오늘 느낀 점


  • To-Do List 작업할 때 css, javascript 에 익숙하지 않다보니 시간이 걸린다.
    • 한동안 이렇게 시간이 걸릴 듯.. 좌절하지 말고 조금씩 하자.
  • to-do list 저장하려면 서버가 필요한데.. 개인서버 구축하고 싶다.
  • 반응형은 나중에 찾아볼 것(일단 구현이 우선!)

내일 할 일 (계획)


  • To-Do List 개발
  • JSP


반응형

'이전게시판 > TIL' 카테고리의 다른 글

2018.12.08_TIL  (0) 2018.12.08
2018.12.07_TIL  (0) 2018.12.08
18.10.21_TIL  (0) 2018.10.21
18.10.20_TIL  (0) 2018.10.20
18.10.19_TIL  (0) 2018.10.19
18.10.18_TIL  (0) 2018.10.18
18.10.16_TIL  (0) 2018.10.16
TIL(Today I Learn) 시작  (0) 2018.10.15

Post

반응형

자바기초 정리


String


java String 선언 시 두가지 방법이 존재
String str = new String();
String srt = "value";

첫번째 방법은 String 자료형이 heap에 할당됨.
두번째 방법은 String 값이 string constant pool이라는 영역에 할당된다. 만약 이미 선언되어있다면 그 값을 가져온다.
메모리를 아끼려면 2번째 방법(String 리터널) 방법으로 사용하는게 좋을 듯..

StringBuffer 


문자열을 추가하거나 변경할 때 주로 사용한다.
String과 다른 점은 String은 문자열 연산 시 객체 생성을 하지만 StringBuffer는 한번만 객체 생성이 된다.
또 String 보다 메모리 사용량도 많고 속도도 느다고 한다.
(일단 같은 문자열을 length() 함수로 출력했을 때 메모리는 같았다.)


String, StringBuffer, StringBuilder의 차이점


String은 메모리공간이 변하지 않는다. 그래서 문자열을 붙이면, 그 문자열을 참조한다. 그래서 문자열 연산이 많을 경우 성능이 좋지 않다.
StringBuffer, StringBuilder는 문자열 연산이 있을 때 크기를 변경해 문자열을 변경한다. 그래서 연산이 많을 때 사용하면 좋다.
둘의 차이점은 StringBuffer는 동기화를 지원하지만 StringBuilder는 멀티스레드 환경에서 사용하면 위험하다.

문자열 연산 시 StringBuffer가 더 효과있는지 확인하기 위해 테스트해보았다.
테스트 결과 문자열 연산 시 StringBuffer가 String보다 5배 더 빨랐다.

package Example;
import java.text.SimpleDateFormat;
public class HelloWorld {
       public static void main(String args[])
       {
              String str = new String("Hello Java");
              String nowTime = getCurrentTime("YYYY.MM.DD. HH:mm:ssSSS");
              for(int i = 0; i < 10000; ++i)
              {
                     System.out.println(str+" Hello Java");
              }
              String nowTime2 = getCurrentTime("YYYY.MM.DD. HH:mm:ssSSS");
              
                           
              StringBuffer strBuf = new StringBuffer("Hello Java");
              String nowTime3 = getCurrentTime("YYYY.MM.DD. HH:mm:ssSSS");
                           
              for(int i = 0; i < 10000; ++i)
              {
                     System.out.println("strBuf"+"Hello Java");
              }
              String nowTime4 = getCurrentTime("YYYY.MM.DD. HH:mm:ssSSS");
              
              System.out.println("1:" + nowTime);
              System.out.println("2:" + nowTime2);
              System.out.println("3:" + nowTime3);
              System.out.println("4:" + nowTime4);
       }
       
       public static String getCurrentTime(String timeFormat)
       {
              return new SimpleDateFormat(timeFormat).format(System.currentTimeMillis());
       }
}

ArrayList


배열은 크기가 고정이지만 List는 가변이다.
원래는 Generics(<>)를 사용하지 않아 item들이 Object로 인식되어 잘못된 형변환을 하는 경우가 있었다.
현재는 자료형을 명확히 적어주기 때문에 형변환에 의한 오류가 없어졌다.

package Example;
import java.util.ArrayList;
public class HelloWorld {
       public static void main(String args[])
       {
              ArrayList<Integer> arrList = new ArrayList();
              arrList.add(2);
              arrList.add(1);
              arrList.add(4);
              arrList.add(3);
              System.out.println(arrList);
              System.out.println(arrList.get(2));             // 2번째 요소 선택(4)
              System.out.println(arrList.size());             // 크기 출력(4)
              arrList.remove(2);                                     // 2번째 요소 삭제
              System.out.println(arrList);                    // 다시 출력
                           
       }
       
}

반응형

Post

반응형

오늘 한 일


  • 내 홈페이지에 명언버튼 추가. 버튼 클릭 시 명언이 변경되도록 수정했다.
  • Java 기초 공부

오늘 느낀 점


  • 글자에 네온사인 효과를 적용하고 싶었지만, 모르는 문법이 많아서 Commit 하기 부담;;
    • css translate에 대해서 찾아보자
  • Web To-do List를 만들어보고 싶다.
  • Java 설치 에러가 나서 너무 오래걸렸다.. 에러를 줄이는 방법=>설치 포스팅을 꼼꼼히 잘보자.

내일 할 일 (계획)


  • To-Do 리스트 개발( 소스 참고보다 직접 필요한 것을 찾아가며 만들자 )
  • Java 기초 보기 ( https://wikidocs.net/book/31 )
  • 시간되면 JSP

반응형

'이전게시판 > TIL' 카테고리의 다른 글

2018.12.08_TIL  (0) 2018.12.08
2018.12.07_TIL  (0) 2018.12.08
18.10.21_TIL  (0) 2018.10.21
18.10.20_TIL  (0) 2018.10.20
18.10.19_TIL  (0) 2018.10.19
18.10.18_TIL  (0) 2018.10.18
18.10.17_TIL  (0) 2018.10.17
TIL(Today I Learn) 시작  (0) 2018.10.15
▲ top