##########다국어 처리############
-------------------------------------------------------------------------------------
스프링에서 제공하는 다국어 처리 방식은 struts프레임워크와 유사 
기본적으로 메세지 파일의 확장자는 ".properties"이며 파일명은 
해당언어의 ■ Locale 정보를 이용해 작성한다. 

*로케일이 뭐지 ?
ex )  messageSource_en.properties
원하는 언어들의 메세지 파일을 다 작성했다면 
스프링 설정 파일에 해당 메세지 파일을 읽어들일 수 있도록 
MessageSource클래스를 <bean> 으로 등록해야한다. 
-------------------------------------------------------------------------------------
스프링 메시지소는 국제화(i18n)을 제공하는 인터페이스다. 
메세지 설정 파일을 통해 각 국가에 해당하는 언어로 메세지를 제공할 수 있다.
ApplicationContext는 MessageSource를 구현하고 있다. 
메세지 설정 파일은 프로퍼티 파일을 사용하며 
파일이르메 [파일이름][언어][국가].properties형식으로 추가해주면된다. 
-------------------------------------------------------------------------------------
id값이 basenames라고 되어있는데 이것은 springframework에서 지원하는
고정값이므로 마음대로 바꾸어서느 안된다. 
그리고 내부의 <property> 엘리먼트의 name 속성에는 두가지 값이 존재한다.
basename & basenames의 두가지. 우리는 여러 언어를 등록할거라서 
basenames를 사용해주어야 한다. 
-------------------------------------------------------------------------------------
메세지파일을 조금더 효율적으로 관리하기 위해 value태그에는 
모든걸 포함한 MessageSource 만쓴다. 즉 상위 개념을 써주는 것인데,
우리가 파일 1개에 모든 언어를 기록하는것이아니라 몇개씩 나누어쓰기때문에
50개로 나누어쓴다면 50개르 다써야하는 일이생기므로 
새 언어가 추가 또는 삭제된다 해도 스프링설정파일을 수정할 필요가 없기 때문!
-------------------------------------------------------------------------------------
LocalResolver 등록 
-------------------------------------------------------------------------------------
웹 브라우저가 =========> 서버에 어떠한 요청을 보내게되면,
기본 브라우저의 Local정보가
Http 요청 메세지 헤더에 자동으로 설정된 상태로 전송이 된다.
이때 스프링은 [LocaleResolver를 통해서 클라이언트의 Locale 정보를 추출]
하고 추출한 Locale 정보에 해당하는 언어의 메세지를 적용시켜 보여준다. 
스프링은 4개의 LocalResolver를 지원하는데, 만약 스프링 설정파일에 
LocalREsolver 가 따로 등록된게 아니라면 
기본값으로 AcceptHeanderLocalResolver가 적용된다.
------------------------------------------------------------------------------------- 
브라우저의 useragent 값이나 쿠키, 세션을 통해 locale 값을 처리한다.
그래서 우선 해당 xml에 아래처럼 추가해준다.

출처: https://unabated.tistory.com/entry/다국어-처리-localeResolver-messageSource [랄라라]


    @RequestMapping("/choiceLan.do")
    public String choiceLang(@RequestParam("lang") String lang,OnEmp onemp, HttpSession session,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("선택한 언어:"+lang);
        System.out.println("전달 데이터 확인 : " + onemp);
        // 해당되는 선택 언어가 message폴드 하위에 있는 다국어 선택 파일을 
        // 지정해서, 해당 위치/시간에 해당하는 언어가 나오게 된다.
        Locale locale = new Locale(lang);
        localResolver.setLocale(request,response, locale);
        return "OnEmp/Login/login";
    }  

참고문헌 localeResolver 란 :: 쥬니의 개발블로그 (tistory.com)

 

localeResolver 란

스프링 localeResolver 기본설정 @Configuration @EnableAutoConfiguration @ComponentScan public class I18nConfig extends WebMvcConfigurerAdapter { @Bean public LocaleResolver localeResolver() { // 쿠키..

juntcom.tistory.com

Spring Framework 메세지 국제화(다국어 지원) 사용하기 (tistory.com)

 

Spring Framework 메세지 국제화(다국어 지원) 사용하기

스프링 프레임웍에서 다국어 지원기능을 사용해 보겠습니다. 기본적으로 텍스트로 저장되는 properties 파일을 언어별로 만들어서 사용합니다. 이번에 해볼것은 다음과 같습니다. 1. 메세지 프로

offbyone.tistory.com

랄라라 :: 다국어 처리 - localeResolver, messageSource (tistory.com)

 

다국어 처리 - localeResolver, messageSource

스프링에서 다국어를 처리하려면 LocaleChangeInterceptor + messageSource 조합으로 가능하다. 국가별로 페이지들 별도로 만드는짓은 더이상 하지 말자. 만약 서버단에서 위의 조합으로 다국어 처리된

unabated.tistory.com

 

'2. 웹' 카테고리의 다른 글

[github] dynamic 프로젝트 생성하기  (0) 2021.11.04
포트폴리오 준비  (0) 2021.11.02
[Spring] 환경설정 web-xml 뜯어보기  (0) 2021.11.02
MVC패턴이란 무엇일까?  (0) 2021.11.02
[spring] 스프링환경설정2 web.xml  (0) 2021.09.18

github web 

1.  repository 생성 
2.  생성된 repository create 아무 파일 해야 main이 생성됨 (?) 맞나요 ㅠㅠ 


github-desktop

1. file- clone 클릭 

eclipse
4.  open project file system(원래는 import해야되는데. 지금안돼서.ㅠㅠ_)
5.  탐색기(window-git- finish ) 
6. 프로젝트 우클릭 => 프로퍼티 클릭 => > project Facts = > dynaminc, java, javascript 선택 
7. 커밋!!!!!!예쓰 끝! 

 

web.xml 이란 ? 

web.xml이란 webapplication의 deployment Descriptor로서 xml형식의 파일이다. 

모든 web application은 반드시 web.xml파일을 가진다.

web-inf폴더의 하위를 보면 이 xml파일을 찾을 수 있고, 내부에설정된 내용은

web application시작 시 메모리에 로딩된다. 

 

[브라우저]가 [java servlet]에 접근하기 위해 was(tomcat)에 필요한 정보를 알려줘야 

해당하는 servlet을 호출할 수 있고 이것을 정하는 곳이 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>onbiz</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>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/views/error/error404.jsp</location>
  </error-page>
  <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>
  <session-config>
  	<session-timeout>10</session-timeout>
  </session-config>
</web-app>

 

web.xml 의 역할은 무엇이있을까?

Diaspatcher-servlet : 클라이언트의 요청을 가로채어 컨트롤러에 보낸다( 클라이언트 요청을 최초로 받는 클래스)

contextLoarderListner

encodingFilter 

 

이렇게 세가지가 있다. 


1. welcome-file-list : 웰컴 파일이란 디렉토리의 기본 웹 페이지이다.

클라이언트가 서블릿 이름을 생략하고 디렉토리까지만 지정해서 요청한다면 웹 서버는 해당 디렉토리에서 웰컴 파일을 찾아서 응답한다. 여러 개의 웰컴 파일이 있으면 위에서부터 아래로 순차적으로 조회하고 먼저 찾은 것을 클라이언트에게 보낸다. <welcome-file-list>태그 안에 순서대로 작성한다. 

 

2. filter 

인코딩을 UTF-8로 설정하여 필터링하겠다는 설정이다.
https://gmlwjd9405.github.io/2018/10/29/web-application-structure.html

3. errorpage 

에러가 생겼을 경우 location을 설정하여 사용자가 정의한 인터페이스로 에러를 보여주는 것을 설정한다.

4. listner

 

[서블릿/JSP] 리스너(Listner)란? 이벤트 리스너의 개념 설명. 구현 및 등록하기

리스너란? 이벤트, 리스너, 이벤트핸들러 간략 개념정리 리스너는 단어의 뜻으로 보자면 (소리를) 듣는 사람, 청취자입니다. 프로그래밍에서의 리스너는 무언가 소리를 듣는 사람을 뜻하기 보다

dololak.tistory.com

이해한 바로 요약해보자면, 클라이언트가 요청한 내용을 객체에 담아 가져오도록 하기 위해 리스너를 설정한다.

스프링에서 현재 HttpServletRequest 가져오는 방법

  • 이벤트 - 발생한 특정 사건(마우스 클릭, 키보드 입력, 클라이언트로부터의 HTTP 요청, 웹어플리케이션 시작, 웹어플리케이션 종료 등)
  • 이벤트 소스 - 이벤트가 발생한 대상(근원지)으로 마우스, 키보드, 웹어플리케이션(ServletContext) 등
  • 리스너, 핸들러 - 이벤트가 발생되기를 기다렸다가 발생시 실행되는 메서드나 함수. 또는 메서드를 가진 객체



출처: https://dololak.tistory.com/616 [코끼리를 냉장고에 넣는 방법]

 

5. session-config

세션유지시간을 설정하며 단위는 분이다. <session-timeout> 태그 사이에 작성한다. 

 

MVC패턴이란?

 

MVC패턴은 Model, View, Controller의 약어로, 프로그램을 개발하는 중 발생했던 문제를 정리하여 상황에 따라 간편하게 사용하여 쓸 수 있는 것을 정리하여 특정한 규약을 통해 쉽게 쓸 수 있는 형태로 만든 디자인패턴 중 하나. 

비지니스 처리 로직과 사용자 인터페이스 요소들을 분리시켜 서로 영향없이 개발 하기 수월하다는 장점이 있다.

예를 들어 그냥 jQuery를 이용한다면 $('#lucid')로 DOM을 선택할 수 있는 것을 그냥 순수Javascript를 사용한다면 document.getElementsByid('lucid')로 길게 써가며 찾아야 하겠죠. 예를 들어 어떠한 data를 만들고 이 data를 수정할 로직을 짠다. 그리고 그 data를 보여주는 부분을 만들 때 이거 하나하나가 로직이 분리가 안되있고 한꺼번에 정의가 되어있다면? 나중에 유지보수하기가 힘들겁니다. 그걸 "돕기" 위해 디자인패턴이라는게 나오는 것이며 이렇듯 "좀 더 쉽고 편리하게" 사용할 수 있게 만든 특정한 방법들을 디자인 패턴이라고 합니다. 그 디자인 패턴이라는 것은 스트래티지 패턴, 옵저버 패턴 등등 정말 여러가지가 있고 그 중에 하나가 바로 MVC패턴입니다.

 


1. Model이란 ?

 

규칙 1: 사용자가 편집하기 원하는 모든 데이터가 담겨있어야 한다. 

규칙 2 : view나 controller에 대해서 어떤 정보도 알지 말아야 한다. (UI를 직접조정할 수 없다는 의미) 

규칙 3 : 데이터에 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야 한다

규칙 4: 재상요이 가능해야 하며 다른 인터페이스에서도 변하지 않아야 한다. 

 


2. Controller란 ? 

Model내의 [Data]와 사용자의 인터페이스[View] 를 잇는 매개역할을 합니다.

규칙 1 : 모델이나 뷰에 대해서 알고 있어야 한다. 

규칙 2 : 모델이나 뷰의 변경을 모니터링 해야 한다 (모델이나 뷰의 변경통지를 받으면 이를 해석하여 

각각의 구성요소에 통지를 해야 한다. )

 

 


3. view란 ?

 input텍스트, 체크박스 항목과 같은 사용자의 인터페이스영역입니다. 사용자가 데이터를 입력하거나, 요청한

데이터를 출력해주는 역할을 담당합니다.

규칙 1  : 모델이 가지고 있는 임의의 정보를 화면에 노출해서는 안된다. 

규칙 2 : 모델이나 컨트롤러와 같이 다른 구성요소들을 알아선 안된다. 

자신을 제외하고는 다른 요소의 참조와 동작요소를 알아선안된다. 

 MVC 패턴을 왜 사용할까?

View, Controller, Model이 각각 분리되어 자신의 역할에 집중할 수 있기 때문에 

역할을 나누어 프로그램을 만들게 된다면 

유지보수성, 확장성, 유연성이 증가하기 때문에 이를 위해 사용한다. 

 

[출처 : https://m.blog.naver.com/jhc9639/220967034588]  

 

<?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>springweb3</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>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

welcom-file-list란, 디렉토리의 기본 웹 페이지이다.

클라이언트가 서블릿 이름을 생략하고 디렉토리까지만 지정해서 요청한다면 웹 서버는 해당 디렉토리에서 웰컴 파일을 찾아서 응답한다.

 

1. 여기서 servlet 태그에 작성하는 dispatcher는 web.xml에서 읽어줄 명을 작성해주는 것(?) 이부분잘모르겠다.

async-supported 는 비동기처리를 위한 태그인것으로 보인다.

 <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <async-supported>true</async-supported>
  </servlet>

 

 

-- ex1) job이 'SALESMAN'인 데이터를 출력하되, 칼럼은 ENAME, JOB, SAL을 선택하세요.
--myquery (where job = "소문자로 입력시 출력이안된다.")
SELECT ename, job, SAL 
FROM emp 
WHERE job = 'SALESMAN';
--답
SELECT ename, job, sal 
FROM emp
WHERE job = 'SALESMAN';


-- ex2) 부서번호(deptno)가 20이고, sal가 4000미만인 데이터를 출력하세요.
--myquery 
SELECT * 
FROM emp 
WHERE deptno = 20 AND sal < 4000;
--답
SELECT *
FROM emp
WHERE deptno = 20
AND sal < 4000;


-- ex3) 연봉(sal)이 2000에서 3000사이 이거나, 직책(job)이 'SALESMAN'인 사원번호(EMPNO), 
--       사원명(ENAME), 직책(JOB), 연봉(SAL)을 출력하세요
--myquery
SELECT empno, ename, job, sal 
FROM emp
WHERE sal BETWEEN 2000 AND 3000
OR job = 'SALESMAN'; --"SALESMAN"은 ''로 쓰지않으면 오류나온다.

--정답
SELECT ename, job, sal
FROM emp
WHERE (sal >=2000 AND sal <= 3000)
OR (job = 'SALESMAN');

-- ex4) 부서번호가 10이 아닌 경우 처리.
--myquery
SELECT * FROM EMP e
WHERE deptno != 10;

--답
SELECT *
FROM EMP
WHERE DEPTNO !=10;


-- ex5) job이 CLERK가 아닌 데이터를 출력하세요.
--myquery 
SELECT * FROM emp 
WHERE job != 'CLERK';

--답 
SELECT *
FROM EMP e
WHERE NOT (job = 'CLERK');

--ex6) comm이 null이 아닌 데이터를 
-- [ename]과 [sal의 comm의 합산한 급여]로 출력하세요.
--myquery 
SELECT ename,sal, comm, sal+comm "합산"
FROM emp 
WHERE comm IS NOT NULL;

--답 
SELECT ename, sal, comm, sal+comm "합산"
FROM EMP e 
WHERE COMM IS NOT NULL;

--ex)7 comm이 null인 데이터 중 
--ename과 sal + comm 합산 급여를 출력 
SELECT ename, sal, comm, sal + comm 
FROM emp 
WHERE comm IS NULL;

 

 

로그인 기능 중 보안을 위해 세션설정을 해야하는경우가 있는데, 
이럴때 세션 시간 설정은   session.setMaxInactiveInterval() 설정이외의
방법은 어떤게 있을까 고민하던 중 다양한 방법을 정리해둔 블로그를 발견

 

출처: 미리 밝힙니다.

[개발/JSP]세션 시간 변경하기(Session Timeout) (tistory.com)

 

[개발/JSP]세션 시간 변경하기(Session Timeout)

업무를 진행 하던 중 세션시간을 늘려야 하는 경우가 생겨 어디서부터 접근을 해야 변경이 될까 라는 궁금증에 이와 같은 글을 쓰게 되었습니다. 우선 세션 설정을 하기 위해선 아래와 같은 3

bluesmile-dev.tistory.com

 

우선 세션 설정을 하기 위해선 아래와 같은 3가지 방법이 있습니다.

 

1. 특정 경우에 타임아웃 설정

ex) 클라이언트가 20분동안 요청이 없으면 세션 제거

<%     session.setMaxInactiveInterval(20*60); // 초 단위 %>

 

2. DD(Deployment Descriptor)에서 전체 세션 타임아웃을 설정

ex) 클라이언트가 15분동안 요청이 없으면 세션 제거

(파일위치 : WEB-INF/web.xml)

<web-app>     <session-config>         <session-timeout>15</session-timeout> // 분 단위     </session-config> </web-app>

 

3. 설정하지 않으면 WAS 기본 디폴트 값으로 적용

ex) Tomcat(conf/web.xml)은 30분입니다.

 

만약 1번과 2번이 적용되어 있다면 1번 방법으로 설정한 값으로 적용됩니다.

즉, 어플리케이션에서 10분으로 설정을 했다면 컨테이너나 웹서버에서 20 - 30분으로 설정을 해도 아무 소용이 없다는 의미입니다.

(우선순위 : 어플리케이션 > 컨테이너 > 웹서버)

*세션 유지시간은 해당 세션을 생성한 사용자의 브라우저 요청이 있을 때마다 갱신됩니다.

 

 

 

 

 

좋아요12

공유하기

글 요소

구독하기

■쿠키 (Cookie) 

▶. 쿠키는 [웹 브라우저가 보관하고 있는 데이터]로서 [웹 서버에 요청]을 보낼 때 함께 전송된다.

세션이 아닌 쿠키를 사용하는 이유:세션은 서버에 저장되고, 서버자원을 사용하기 때문에 
사용자가 많을 경우 소모되는 자원이 상당하다. 이러한 자원관리 차원에서 쿠키와 세션을 
적절한 요소 및 기능에 병행 사용하여,서버 자원의 낭비를 방지하며 웹사이트의 속도를 
높일 수 있다.

▶.쿠키의 동작 순서★★★★★★★★★★

클라이언트가 페이지를 요청한다. (사용자가 웹사이트 접근)
웹 서버는 쿠키를 생성한다.
생성한 쿠키에 정보를 담아 HTTP 화면을 돌려줄 때,
같이 클라이언트에게 돌려준다.
넘겨 받은 쿠키는 클라이언트가 가지고 있다가(로컬 PC에 저장)
다시 서버에 요청할 때 요청과 함께 쿠키를 전송한다.
동일 사이트 재방문시 클라이언트의 PC에 해당 쿠키가 있는 경우,
요청 페이지와 함께 쿠키를 전송한다.

1) 쿠키 생성 : 웹서버 ==> 브라우저(쿠키 저장소) : response.addCookie(new Cookie(name,value)); 
2) 쿠키 저장 : 브라우저의 [쿠키 저장소]에 저장처리 
3) 쿠키 전송 : [브라우저]==> [웹서버] (요청객체를 통해서전달) : request.getCookies();


▶.사용 예시

방문했던 사이트에 다시 방문 하였을 때 [아이디와 비밀번호 자동 입력]
[팝업창을 통해 "오늘 이 창을 다시 보지 않기" 체크]
[장바구니]

▶. 특징 (세션과비교) 
저장위치 : 클라이언트(접속자 pc) 
저장형식: text 
만료시점 : 쿠키 저장시 설정 (브라우저가 종료되어도 만료시점이 지나지 않으면 자동삭제 안됌)
사용하는 자원: 클라이언트 리소스 
용량제한 : 총 300개/하나의 도메인당 20개/ 하나의 쿠키당 4kb
속도: 세션보다 빠름
보안: 세션보다 좋지않음 

▶. 쿠키의 구성
1) 구성요소
- ★[이름]: 각각의 쿠키를 구별하는 데 사용되는 이름
- ★[값 ]: 쿠키의 이름과 관련된 값
- ★[유효시간] : 쿠키의 유지 시간
- ★[도메인] : 쿠키를 전송할 도메인
- ★[경로] : 쿠키를 전송할 요청 경로

2) 쿠키 이름의 제약(특수문자와 한글 처리)
- 쿠키의 이름은 [아스키 코드의 알파벳과 숫자만을 포함]할 수 있다.
- [콤마, 세미콜롬, 공백 등의 문자는 포함할 수 없다].
- [$로 시작]할 수 없다.
==> encoding 처리를 하여야 한다.

3) 쿠키의 encoding과 decoding처리..
한글과 같은 문자을 처리할 때
저장시 encoding으로 저장하고, 
불러올 시 decoding으로 불러와야 된다.
Encoding 처리 : URLEncoder.encoder("한글데이터", "utf-8");
Decoding 처리 : URLDecoder.decoder("한글데이터", "utf-8");


▶.쿠키값의 삭제
1) 쿠키값은 일단 [서버와 클라이언트가 끊어지면] 사라진다.
서버가★ 재기동 또는 클라이언트의 ★브라우저를 다 닫으면 서버와 연결이 끊어진다.
2) 클라이언트 프로그램으로 삭제할 수 있지만, jsp는 서버프로그램으로 삭제 하여야 하므로
해당 쿠키를 다시 client로 보내기 전에 ★유효시간을 0로 설정하여 response객체로 
전달하여 삭제 브라우저의 저장 위치에서 삭제되게 한다.
ex) ck.setMaxAge(0);
response.addCookie(ck);

 

출처: 쌍용교육센터 교육자료 ,
출처: https://hahahoho5915.tistory.com/32 [넌 잘하고 있어]

+ Recent posts