:: Tomcat서버의 기본 문자 방식은 IOS-8859-1이므로 별도 한글 인코딩을 하지 않으면 한글이 깨지는 현상이 발생.

:: Get방식과 Post방식에 따라 한글처리 방식에 차이가 있음.


[ Get ]

:: server.xml에서 해당 태그의 인코딩 부분 수정

1
<Connector URIEncoding="EUC-KR" port="8181"



[ Post ]

:: request.setCharacterEncoding() 메소드 이용

1
2
3
4
protected void doPost(HttpServletRequest request){
    System.out.println("doPost");
    request.setCharacterEncoding("EUC-KR");
}




※ html파일에 <meta charset="EUC-KR"> 부분이 UTF-8인지 확인할 것.



[ 이클립스 설정 ]


1. Windows → Preferences → Web → JSP files에서 Encoding 을 Unicode(UTF-8)로 변경
2. Windows → Preferences → Web → HTML files에서도 변경

3. Windows → Preferences → General → Editors → Text Editors → Spelling 에서 Encoding을 MS949에서 UTF-8로 변경

4. server에서 server.xml파일을 열면 Connector를 검색해서 

   <Connector connectionTimeout="20000" port="1111" protocol="HTTP/1.1" redirectPort="8644"/> 이부분 앞에 인코딩 추가.

   <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="4160" protocol="HTTP/1.1" redirectPort="8443"/>


'프로그래밍 > JSP' 카테고리의 다른 글

JSP  (0) 2019.03.05
Servlet(1)  (0) 2019.03.05
HTML form태그  (0) 2019.03.04
컨텍스트 패스(Context Path)  (0) 2019.02.22
doGet 과 doPOST  (0) 2019.02.20


[ HTML form태그 ]


:: 서버쪽으로 정보를 전달할 때 사용하는 태그


[ form 태그 내부에서 사용하는 태그 ]


① input

:: 태그의 종류를 지정


속성(type, name, value)

- type : 태그 종류 지정( text, password, submit, checkbox, radio, reset 등등)

- name : input 태그 이름

- value : name에 해당하는 값( name = value)


 1) type = text

:: 일반적인 데이터를 입력하기 위해 사용됨

1
<input type="text" name="name" size="10" >



 2) type = password

:: 로그인, 회원가입 페이지 등에서 비밀번호 입력하기 위해 사용

1
<input type="password" name="name" size="10" >



 3) type = submit

:: form 내의 데이터를 전송할 때 사용


 4) type = reset

:: form 내의 데이터를 초기화 할 때 사용

1
<input type="reset" value="초기화" >


 

 5) type = checkbox

:: 데이터 값을 여러 개 전송해야 할 때 사용

1
2
3
4
5
<input type="checkbox" name="check" value="red" >빨간색
<input type="checkbox" name="check" value="yellow" >노란색
<input type="checkbox" name="check" value="blue" >파란색
<input type="checkbox" name="check" value="green" >녹색 



 6) type = radio

:: 데이터 값을 여러 개의 데이터 중 한 개의 값을 전송할 때 사용

1
2
3
4
5
<input type="radio" name="onlyone" value="red" >빨간색
<input type="radio" name="onlyone" value="yellow" >노란색
<input type="radio" name="onlyone" value="blue" >파란색
<input type="radio" name="onlyone" value="green" checked="checked" >녹색 



 7) select

:: 리스트 형태의 데이터를 사용

1
2
3
4
5
6
7
<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



[ form 태그 ]

:: input태그들의 값을 서버로 전송하기 위한 정보를 담음

1
<form action="FormEx" method="post">


- action="FormEx" : 요청하는 컴포넌트 이름(ex. join.jsp, info.html, HWorld)

- method="post" : 요청을 처리하는 방식(ex. get, post)


Get 

: http://ip주소:port번호/컨텍스트/path/MemberJoin?id="abcdefg"&name="닉네임"


POST

: http://ip주소:port번호/컨텍스트/path/MemberJoin



[ Servlet Parameter ]

:: form 태그의 submit 버튼을 눌러 데이터를 서버로 전송하면 해당 servlet파일 에서는 HttpServletRequest 객체를 이용하여 Parameter값을 얻을 수 있음


<관련 메소드>

1. getParameter(name)

2. getParameterValues(name)

3. getParameterNames()


※ EX)



이름:<input type="text" name="name" size="10"



String name= request.getParameter("name");







'프로그래밍 > JSP' 카테고리의 다른 글

Servlet(1)  (0) 2019.03.05
한글처리  (0) 2019.03.04
컨텍스트 패스(Context Path)  (0) 2019.02.22
doGet 과 doPOST  (0) 2019.02.20
Servlet  (0) 2019.02.20

[ Context Path ]

:: 컨텍스트 패스(Context Path)란 WAS(Web Application Server)에서 웹어플리케이션을 구분하기 위한 path

:: 이클립스에서 프로젝트를 생성하면 자동으로 server.xml에 추가됨.


'프로그래밍 > JSP' 카테고리의 다른 글

한글처리  (0) 2019.03.04
HTML form태그  (0) 2019.03.04
doGet 과 doPOST  (0) 2019.02.20
Servlet  (0) 2019.02.20
JSP와 MVC패턴  (0) 2019.02.19

[ 요청과 응답 ]

:: httpServletRequest > 클라이언트의 요청 처리 객체

:: httpservletResponse > 클라이언트의 응답 처리 객체



[ doGET ]

:: html내 form태그의 method속성이 get인 경우 호출

:: 웹 브라우저의 주소창을 이용하여 servlet을 요청한 경우에도 호출




[ doPOST ]

:: html내 form태그의 method속성이 post인 경우 호출



[ get방식 ]


:: get방식은 클라이언트가 서버에 요청할 때 웹브라우저의 주소창에 url뒤에 데이터를 붙여서 서버에 보내게된다. 

  보안이 필요한 작업을 할 경우 권장하지 않음.

:: 주소창에 입력할 수 있는 문자의 수에는 한계가 있기 때문에 대용량의 데이터를 보낼 때 사용하기 부적절하다. 

:: 캐싱 할 수 있다.


[ post방식 ]

:: post방식은 클라이언트가 서버에 요청할 때 웹브라우저의 주소창에 데이터가 표시되지 않고 body에 데이터를 넣어서 보내기 때문에 기본 보안은 된다.

:: content-type을 명시해주어야 한다.

:: 전송하는 길이에 제한이 없다.

:: 캐싱 할 수 없다.


※ 캐싱이란?

: 한번 접근 후에 다시 요청을 할 때 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는것.



'프로그래밍 > JSP' 카테고리의 다른 글

HTML form태그  (0) 2019.03.04
컨텍스트 패스(Context Path)  (0) 2019.02.22
Servlet  (0) 2019.02.20
JSP와 MVC패턴  (0) 2019.02.19
jsp환경 구축  (0) 2019.02.19

[ JSP Servlet 작동 순서 ]


웹브라우저  - (요청)>

웹 서버  -(요청에 대한 객체 생성),(요청 보냄)> 

웹 어플리케이션 서버(WAS) -(요청)> 

Servlet 컨테이너(요청에 대한 스레드 생성, Servlet객체 생성)



[ Servlet 라이프사이클(생명주기) ]


:: Servlet은 빠른 응답 속도 때문에 사용도가 높음.

:: 최초 요청 시 객체가 만들어져 메모리에 로딩되고, 이후 요청 시에는 기존 객체를 재활용하게 되어 동작 속도가 빠름.

:: 웹 어플리케이션이 종료되거나 java파일이나 class파일을 수정할 때 Servlet객체가 새로 갱신됨.


1. Servlet 객체 생성(최초 한번)

2. init() 호출 (최초 한번)

3. Servlet(), doGet(), doPost() 호출 (요청시 매번)

4. destroy() (마지막 한번, 자원 해제: servlet수정, 서버 재가동 등등)



 

[ JSP Servlet 생성 ]


1. Project 생성

2. 프로젝트 우클릭 -> New -> Servlet -> 패키지명과 클래스명 지정 -> url 매핑 문자 변경 또는 유지 -> finish


- doGet, doPost가 존재


[ web.xml에 서블릿 매핑]

:: 매핑을 하지 않으면 주소가 길어지기 때문에 경로를 간단하게 매핑하기 위해 사용


 ex) 기존     http://localhost:8080/helloworld/servelt/com.javalec.ex.Helloworld

      매핑 후 http://localhost:8080/helloworld/HWorld


1. web.xml 생성

:: 프로젝트 우클릭 -> Java EE Tools -> Generate Deployment Descriptor Stub선택

:: WEB-INF아래에 web.xml 생성됨 

:: 매핑 코드 작성

<servlet>
    <servlet-name>JspProject</servlet-name>
    <servlet-class>com.javalec.ex.servlet.JspProjectServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>JspProject</servlet-name>
    <url-pattern>/jsp</url-pattern>
</servlet-mapping>


- <servlet-name>

:: 임의의 이름을 만들어줌

- <servlet-class>

:: 매핑할 클래스 파일명을 패키지명을 포함해서 정확하게 입력

- <url-pattern>

:: servlet-class를 매핑할 임의의 이름을 입력하며 "/"로 시작해야 한다.


접속은 http://localhost:(portnumber)/context명/매핑문자


[ java코드에 annotation을 이용한 매핑 ]


:: @WebServlet("/jsp")를 servlet클래스 위에 annotation으로 붙여주면 됨

:: 매핑명은 직접 입력하여 홈페이지 접속




※ xml이나 시스템 설정을 바꾼 후에는 서버를 재시작 해주어야 적용됨



[ Servlet 선처리, 후처리 ]


Servlet 객체 생성

--------------------------------> 선처리 : @PostConstruct

init() 호출


service(), doGet(), doPost() 호출


destroy() 호출

---------------------------------> 후처리 : @PreDestroy


※ service()는 요청이 들어오면 호출되어 브라우저에서 지정한 방식에 따라 doGet을 호출할지, doPost를 호출할지 결정하고

해당 메소드를 호출합니다. 호출할때 Request, Response객체를 인자로 넘깁니다.










'프로그래밍 > JSP' 카테고리의 다른 글

컨텍스트 패스(Context Path)  (0) 2019.02.22
doGet 과 doPOST  (0) 2019.02.20
JSP와 MVC패턴  (0) 2019.02.19
jsp환경 구축  (0) 2019.02.19
웹 어플리케이션 영역  (0) 2018.08.05

[ JSP특징 ]


:: Java Server Page의 약자로 Java언어를 기반으로 하는 Server Side  스크립트 언어

:: 확장자는 .jsp

:: html페이지에 java코드를 넣어 동적인 웹페이지를 생성하는 웹 어플리케이션 도구

(클라이언트의 요청에 동적으로 작동하고 응답은 html를 이용)

:: servlet으로 변환되어 실행

:: MVC패턴에서 View의 역할


[ MVC 패턴 ]    

                                  (데이터를 가져옴)

request -> Controller(servlet) ------------> model -------------------------> servlet -> view(JSP)  -> response


 

    


'프로그래밍 > JSP' 카테고리의 다른 글

doGet 과 doPOST  (0) 2019.02.20
Servlet  (0) 2019.02.20
jsp환경 구축  (0) 2019.02.19
웹 어플리케이션 영역  (0) 2018.08.05
MVC패턴  (0) 2018.07.31

1. JDK 다운로드

:: java.sun.com 에 들어가서 javaSE에서 원하는 버전을 default경로에 설치

:: 실행파일 더블클릭하여 설치


2. bin/java.exe 는 java파일을 JVM이 받아들일 수 있게 .class파일로 변환 시켜주는 프로그램으로 

   매번 해당 경로에서 실행하기 번거롭기 때문에 환경 변수에 등록하여 어디서든 실행 가능하게 설정.

:: 시스템 속성 - > 고급 -> 환경변수 user에 새로만들기 JAVA_HOME을 이름으로 경로는 jdk폴더 경로로 입력

:: 시스템 변수에 path -> 편집 -> 새로만들기 -> jdk경로 붙여넣기 후에 \bin 입력

:: 저장

:: win + R -> cmd -> java, javac 입력하면 옵션창이 뜨면 성공

:: version 확인 - java -version, javac -version

:: java버전에 운영체제 bit확인 (32bit는 client vm)[나중에 webapplivationserver(was) 설치시 bit 맞춰주어야함]


3. 작성된 코드로 실행 가능


:: 메모장에 코드 작성 [ class이름과 동일한 이름으로 파일 저장]

:: 파일이 있는 경로로 이동

:: 명령프롬프트에 javac로 컴파일해야하니 javac [파일이름].java -> java [파일이름]

:: 출력


4. 이클립스 설치

:: 이클립스 홈페이지 접속

:: Eclipse IDE for  Java Developers패키지를 운영체제 bit에 맞게 다운로드

:: 더블클릭으로 실행

:: 원하는 경로에 workspace지정


5. Tomcat 설치(웹서버)

:: tomcat.apache.org에서 원하는 버전 zip파일로 다운로드

:: 압축을 푼다


6. 이클립스 환경설정

:: windows -> show view -> other -> server를 검색하고 선택 후 오픈

:: 하단 블록에 파란글씨로 no server ...... 글씨 클릭해서 내가 다운받은 server를 선택하고 다음

:: 경로는 tomcat 압축 해제한 파일을 타고 들어가면 bacup, bin, conf 등등의 폴더가 있는 경로로 지정 후 finish

:: 생성된 서버 더블클릭

:: serverlocation 항목을 두번째꺼로 체크( 내가 설정한 곳과 같은 경로로 지정됨)

:: serveroption 항목에 publish mode 체크

:: port 항목에 http/1.1 의 port를 8080이외의 것으로 바꾼다

  왜냐하면 oracle서버 내부적으로 http프로토콜을 8080을 쓰기 때문에 port번호가 중첩되어 충돌이 발생할 수 있다.

:: http://localhost:(portnumber)/ 를 입력하여 tomcat페이지가 나오면 성공




'프로그래밍 > JSP' 카테고리의 다른 글

Servlet  (0) 2019.02.20
JSP와 MVC패턴  (0) 2019.02.19
웹 어플리케이션 영역  (0) 2018.08.05
MVC패턴  (0) 2018.07.31
Tiles  (0) 2018.07.31

[JAVA]

- 운영체제에 독립적(운영체제에 관계없이 실행이 가능)이기 때문에 다양한 기종의 컴퓨터와 운영체제가 공존하는 인터넷

   환경에 적합한 언어

- 객체지향적인 언어, c++의 장점을 채택하여 적용

- 풍부한 클래스 라이브러리(API)를 통해 프로그램밍에 필요한 요소들을 기본적으로 제공하기 때문에 이것만 잘 사용해도

  자바 프로그램을 작성할 수 있다.


[JVM]

- 일종의 에뮬레이터인 자바가상머신(JVM)을 통해 운영체제에 독립적인 특징을 가질 수 있다.

- 자바 응용프로그램은 운영체제, 하드웨어가 아닌 JVM과 통신하여 JVM이 자바 응용프로그램 으로부터 전달받은 명령을

  해당 운영체제가 이해할 수 있도록 변환하여 전달.

- 운영체제에 종속적이기 때문에 Sun에서는 여러 운영체제에 설치할 수 있는 서로 다른 버전의 JVM을 제공


[객체지향]

☞키워드

- 클래스, 오브젝트, 상속, 캡슐화, 다형성의 특징을 가진다.


º 클래스 

- 추상(abstract) 

:: 사용자가 구체적인 내용을 생각하지 않고도 사용할 수 있도록 하는 기능

프로시저 추상화 : 함수

데이터 추상화 : 구조체, 배열, 포인터

- 클래스(class)== 개념(concept) == 타입(type)

- 표현하고자 하는 대상의 공통적인 특징을 서술한 것


º 오브젝트(객체)

- 오브젝트(Object) == 실체(instance) == 변수(variable)

- 오브젝트는 클래스의 인스턴스이다. 즉, 클래스가 실체로 만들어진 것.


º 상속

- 하나의 클래스가 가지고 있는 특징들을 그대로 다른 클래스가 물려 받는 것.


º 캡슐화

- 데이터와 데이터를 다루는 방법(조작)의 묶음

- 캡슐화에 이름을 부여하면 추상화


º 다형성

- 여러 가지 형태를 가질 수 있는 능력을 의미

- 조상크래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있다.



☞객체, 지향

객체 = 객관적으로 존재하는 실체

지향 = 주 되는 것으로 삼는 것

즉, 객체위주


☞ 추상화

- 대상에서 특징만을 뽑아낸 것


[자동 메모리 관리] (Garbage Collection)

- JAVA프로그램이 실행되면 가비지컬렉터(Garbage Collector)가 자동적으로 메모리를 관리해주기 때문에

  프로그래머는 따로 메모리를 관리하지 않아도 된다. 

'프로그래밍 > Java' 카테고리의 다른 글

spring MVC 게시판  (0) 2018.09.21
Spring MVC  (0) 2018.09.11
Spring 데이터 베이스 연동 지원  (0) 2018.09.11
Spring AOP  (0) 2018.09.10
Spring정리  (0) 2018.09.05

테이블 스페이스 사용에 대한 권한이 없어서 발생하는 오류로

관리자 계정에서 user에게 권한을 할당


alter user <username> QUOTA 100M ON 유저명;


GRANT UNLIMITED TABLESPACE TO 유저명;


'프로그래밍 > Database' 카테고리의 다른 글

시퀀스 생성, 초기화  (0) 2018.10.23

package spring.download;


import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.net.URLEncoder;

import java.util.Map;


import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.springframework.util.FileCopyUtils;

import org.springframework.web.servlet.view.AbstractView;


public class DownloadView extends AbstractView {


   public DownloadView() {

      setContentType("application/download; charset=utf-8"); // 여기서 다운로드를 위한 타입으로 설정함

   }


   @Override

   protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {

      File file = (File) model.get("downloadFile"); // 모델데이터중 downloadFile이라는 이름으로 전달된 모델을 가져와서 파일객체로 변환


      response.setContentType(getContentType()); // 타입설정

      response.setContentLength((int) file.length()); // 다운로드되는 파일의 크기 설정


      String userAgent = request.getHeader("User-Agent");



      boolean ie = userAgent.indexOf("MSIE") > -1; // 이게 익스플로?는 다르게해야되서 분리하기 위함임

      String fileName = null;

      if (ie) { 

         fileName = URLEncoder.encode(file.getName(), "utf-8");

      } else {

         fileName = new String(file.getName().getBytes("utf-8"),

               "iso-8859-1");

      

      }

      response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\";");



      response.setHeader("Content-Transfer-Encoding", "binary");

      OutputStream out = response.getOutputStream();


      FileInputStream fis = null;

      try {

         fis = new FileInputStream(file);

         FileCopyUtils.copy(fis, out);

      } finally {

         if (fis != null)

            try {

               fis.close();

            } catch (IOException ex) {

            }

      }

      out.flush();

   }


}




package spring.controller;


import java.io.File;


import org.springframework.beans.BeansException;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.context.WebApplicationContext;

import org.springframework.web.servlet.ModelAndView;


@Controller

public class DownloadController implements ApplicationContextAware {


   private WebApplicationContext context = null;


   @RequestMapping("/download.do")

   public ModelAndView download(String name) throws Exception {

      System.out.println("ddsdadsf");

      File downloadFile = getFile(name);

      return new ModelAndView("download", "downloadFile", downloadFile); // 뷰이름, 모델데이터명, 값

   }


   private File getFile(String name) {

      String path = "D:\\신경오\\"+name;

      return new File(path);

   }


   @Override

   public void setApplicationContext(ApplicationContext applicationContext)

         throws BeansException {

      this.context = (WebApplicationContext) applicationContext;

   }


}






'프로그래밍 > Spring' 카테고리의 다른 글

Properties파일 읽기  (0) 2020.05.22
intellij Spring MVC & Gradle 프로젝트 생성  (0) 2020.05.22
Spring MVC & Gradle & Mariadb 연동  (0) 2020.05.21
Spring_AOP  (0) 2020.05.20
SpringMVC_Annotation  (0) 2020.05.20

+ Recent posts