열심히 끝까지
디바이스 융합 자바(Java) day76 - 다국어 처리(국제화) 본문
다국어 처리(국제화) ]
: 하나의 페이지를 여러가지의 언어로 서비스하는 것
- 과거에는 언어별로 페이지를 다르게 제작함
>> 페이지가 여러 개 있는, 국제화라고 하지 않음
-> 프레임 워크의 다국어처리기능을 사용
{ 순서 }
# == 주석
1) 메세지 파일 제작(.file)
- ".properties" 확장자로 제작 고정
- 언어 선택을 Locale 정보로 수행
>> 파일 명에 언어에 해당하는 Locale 코드를 추가
ex ) xxx_en.properties, xxx_ko.properties, ...
- 파일 내부에는 메세지 키 + 메세지 값을 작성
ex ) message.introduction.h2 = login
- 유니코드로 작성
2) 스프링설정파일(DispatcherServlet.xml)에게 메세지 파일들을 읽어들일 수 있도록 클래스(MessageSource) 추가(<bean> 등록)
- DispatcherServlet.xml에 MessageSource 클래스를 <bean> 등록
> root 설정하는 것이 applicationContext.xml
>> id는 변경하지 말 것
<!-- 다국어 처리 -->
DispatcherServlet-servlet.xml----------
<!-- 다국어 처리 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>message.messageSource</value>
</list>
</property>
</bean>
"<value>message.messageSource</value>"의 원래 값은
<value>message.messageSource_en.properties</value>
<value>message.messageSource_ko.properties</value>
라고 쓰는게 정석임(그동안 공부한 것에 의하면)
하지만 properties는 당연히 쓴다고 가정하고
<value>message.messageSource_en</value>
<value>message.messageSource_ko</value>
작성하기로 했음.
근데 또 언어를 다 작성하게 되면 추가 되기만 하면 값을 추가해주어야했기 때문에
<value>message.messageSource</value>
다음과 같이 작성하기로 합의
그래서 다른 언어를 추가해도 따로 값을 추가하지 않아도 됨
3) Locale 정보를 알아서 판단해줄 LocaleResolver 등록(어떤 언어를 보여줄 지 등록)
- SessionLocaleResolver : 세션에서 언어를 판단해주는 Resolver
4) [추가사항] Locale 정보를 변경해서 사용하고 싶을 때, 어떻게 하는가?
- Locale 정보를 변경해줄
LocaleChangeInterceptor 클래스 등록
: lang 파라미터로 Locale 정보를 변경 가능
- mvc를 namespaces 에서 추가할 것
DispatcherServlet-servlet.xml----------
<!-- 세션 Resolver -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
</mvc:interceptors>
5) 사용해보자!!
커스텀태그 쓸 때처럼
<%@ taglib prefix="spring" %> 등록을 하고
ex ) <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
아래 작성
<spring : message code="메세지 키" />
messageSource_en.properties----------
# login.jsp
message.header.h1 = Spring Project
message.header.p = spring project by
message.introduction.h2 = login
message.introduction.id = ID
message.introduction.password = PASSWORD
message.introduction.login = LOGIN
message.introduction.sign = SIGN IN
# sign.jsp
message.sign.h2 = SIGN IN
message.sign.id = ID
message.sign.password = PASSWORD
message.sign.name = NAME
message.sign.role = ROLE
message.sign.role1 = MEMBER
message.sign.role2 = ADMIN
message.sign.login = go to login
# main.jsp
message.main.h2 = MAIN
message.main.hi = HELLO ,
message.main.logout = logout
message.main.write = write on board
message.main.sc = search content
message.main.sb = search
message.main.num = num
message.main.title = title
message.main.writer = writer
message.main.content = content
message.main.cnt = cnt
message.main.regdate = regdate
# insertBoard.jsp
message.write.h2 = write
message.write.title = title
message.write.writer = writer
message.write.content = content
message.write.file = file
message.write.upload = upload file
message.write.main = go to main
# board.jsp
board.h2 = board
board.title = title
board.writer = writer
board.content = content
board.file = file
board.regdate = regdate
board.update = write update
board.delete = board delete
# mypage.jsp
mypage.h2 = MY PAGE
mypage.id = ID
mypage.pw = PASSWORD
mypage.name = NAME
mypage.role = ROLE
mypage.update = UPDATE
mypage.mdelete = unregister
messageSource_ko.properties----------
# login.jsp
message.header.h1 = \uC2A4\uD504\uB9C1 \uD504\uB85C\uC81D\uD2B8
message.header.p = \uC2A4\uD504\uB9C1 \uD504\uB85C\uC81D\uD2B8 \uBE14\uB85C\uADF8
message.introduction.h2 = \uB85C\uADF8\uC778
message.introduction.id = \uC544\uC774\uB514
message.introduction.password = \uD328\uC2A4\uC6CC\uB4DC
message.introduction.login = \uB85C\uADF8\uC778
message.introduction.sign = \uD68C\uC6D0\uAC00\uC785
# sign.jsp
message.sign.h2 = \uD68C\uC6D0\uAC00\uC785
message.sign.id = \uC544\uC774\uB514
message.sign.password = \uBE44\uBC00\uBC88\uD638
message.sign.name = \uC774\uB984
message.sign.role = \uC5ED\uD560
message.sign.role1 = \uBA64\uBC84
message.sign.role2 = \uAD00\uB9AC\uC790
message.sign.login = \uB85C\uADF8\uC778
# main.jsp
message.main.h2 = \uBA54\uC778
message.main.hi = \uC548\uB155\uD558\uC138\uC694 ,
message.main.logout = \uB85C\uADF8\uC544\uC6C3
message.main.write = \uAE00\uC4F0\uAE30
message.main.sc = \uAC80\uC0C9\uC5B4 \uC785\uB825
message.main.sb = \uAC80\uC0C9\uD558\uAE30
message.main.num = \uBC88\uD638
message.main.title = \uC81C\uBAA9
message.main.writer = \uC791\uC131\uC790
message.main.content = \uAE00 \uB0B4\uC6A9
message.main.cnt = \uC870\uD68C\uC218
message.main.regdate = \uC791\uC131\uC77C
# insertBoard.jsp
message.write.h2 = \uAE00\uC4F0\uAE30
message.write.title = \uC81C\uBAA9
message.write.writer = \uC791\uC131\uC790
message.write.content = \uB0B4\uC6A9
message.write.file = \uD30C\uC77C
message.write.upload = \uD30C\uC77C \uC5C5\uB85C\uB4DC
message.write.main = \uBA54\uC778\uC73C\uB85C \uAC00\uAE30
# board.jsp
board.h2 = \uC0C1\uC138 \uAE00
board.title = \uC81C\uBAA9
board.writer = \uC791\uC131\uC790
board.content = \uB0B4\uC6A9
board.file = \uD30C\uC77C
board.regdate = \uC791\uC131\uC77C
board.update = \uAE00 \uBCC0\uACBD
board.delete = \uAE00 \uC0AD\uC81C
# mypage.jsp
mypage.h2 = \uB9C8\uC774 \uD398\uC774\uC9C0
mypage.id = \uC544\uC774\uB514
mypage.pw = \uBE44\uBC00\uBC88\uD638
mypage.name = \uC774\uB984
mypage.role = \uC5ED\uD560
mypage.update = \uB0B4 \uC815\uBCF4 \uBCC0\uACBD
mypage.mdelete = \uD68C\uC6D0 \uD0C8\uD1F4
login.jsp----------
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE HTML>
<!--
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>login</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Header -->
<header id="header" class="alt">
<span class="logo"><img src="images/logo.svg" alt="" /></span>
<h1><spring:message code="message.header.h1" /></h1>
<p><spring:message code="message.header.p" /><a href="https://programming-studyroom.tistory.com/"> @rhoyoorim</a></p>
</header>
<!-- Nav -->
<nav id="nav">
<ul>
<li><a href="#intro" class="active">Introduction</a></li>
<li><a href="#first">First Section</a></li>
<li><a href="login.do?lang=ko">한국어</a></li>
<li><a href="login.do?lang=en">English</a></li>
</ul>
</nav>
<!-- Main -->
<div id="main">
<!-- Introduction -->
<section id="intro" class="main">
<div class="spotlight">
<div class="content">
<header class="major">
<h2><spring:message code="message.introduction.h2" /></h2>
</header>
<form action="login.do" method="post">
<table class="alt">
<tbody>
<tr>
<td><spring:message code="message.introduction.id"/></td>
<td colspan="2"><input type="text" name="mid" required></td>
</tr>
<tr>
<td><spring:message code="message.introduction.password"/></td>
<td colspan="2"><input type="password" name="mpw" required></td>
</tr>
<tr>
<td colspan="3" align="right"><input type="submit" class="button primary" value="<spring:message code="message.introduction.login" />"> <a href="signin.do" class="button primary"><spring:message code="message.introduction.sign" /></a> </td>
</tr>
</tbody>
</table>
</form>
</div>
<span class="image"><img src="images/pic01.jpg" alt="" /></span>
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<section>
<h2>Aliquam sed mauris</h2>
<p>Sed lorem ipsum dolor sit amet et nullam consequat feugiat consequat magna adipiscing tempus etiam dolore veroeros. eget dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula erat egestas velit, vitae tincidunt odio.</p>
<ul class="actions">
<li><a href="generic.html" class="button">Learn More</a></li>
</ul>
</section>
<section>
<h2>Etiam feugiat</h2>
<dl class="alt">
<dt>Address</dt>
<dd>1234 Somewhere Road • Nashville, TN 00000 • USA</dd>
<dt>Phone</dt>
<dd>(000) 000-0000 x 0000</dd>
<dt>Email</dt>
<dd><a href="#">information@untitled.tld</a></dd>
</dl>
<ul class="icons">
<li><a href="#" class="icon brands fa-twitter alt"><span class="label">Twitter</span></a></li>
<li><a href="#" class="icon brands fa-facebook-f alt"><span class="label">Facebook</span></a></li>
<li><a href="#" class="icon brands fa-instagram alt"><span class="label">Instagram</span></a></li>
<li><a href="#" class="icon brands fa-github alt"><span class="label">GitHub</span></a></li>
<li><a href="#" class="icon brands fa-dribbble alt"><span class="label">Dribbble</span></a></li>
</ul>
</section>
<p class="copyright">© Untitled. Design: <a href="https://html5up.net">HTML5 UP</a>.</p>
</footer>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>
main.jsp----------
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML>
<!--
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>main</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Nav -->
<nav id="nav">
<ul>
<li><a href="#intro" class="active">Introduction</a></li>
<li><a href="#first">First Section</a></li>
<li><a href="main.do?lang=ko">한국어</a></li>
<li><a href="main.do?lang=en">English</a></li>
</ul>
</nav>
<!-- Main -->
<div id="main">
<!-- Introduction -->
<section id="intro" class="main">
<div class="spotlight">
<div class="content">
<header class="major">
<h2><spring:message code="message.main.h2" /></h2>
</header>
<h2><spring:message code="message.main.hi" /> <a href="mypage.do">${user.name}</a> ! :D <a href="logout.do"><spring:message code="message.main.logout" /></a></h2>
<table>
<thead>
<tr>
<th> <a href="binsert.do"><input type="button" class="button small" style="float: right;" value="<spring:message code="message.main.write" />"></a></th>
</tr>
</thead>
</table>
<!-- 검색 -->
<!-- main.do를 하는 이유는 메인 페이지를 보기 위해서 -->
<form action="main.do" method="post">
<table>
<thead>
<tr>
<th>
<select name="searchCondition">
<c:forEach var="v" items="${scMap}">
<!-- 키 값과 VALUE값 볼수 있게 작업 -->
<option value="${v.value}">${v.key}</option>
</c:forEach>
<!--
<option value="TITLE">제목</option>
<option value="WRITER">작성자</option>
-->
</select>
</th>
<th><input type="text" name="searchContent" placeholder="<spring:message code="message.main.sc" />"></th>
<th><input type="submit" class="button" value="<spring:message code="message.main.sb" />"></th>
</tr>
</thead>
</table>
</form>
<div class="table-wrapper">
<!--
<form action="binsert.do" method="post">
<table>
<tr>
<td><input type="text" name="title" value="제목" required></td>
<td><input type="text" name="writer" value="${name}" required readonly></td>
<td><input type="text" name="content" value="글쓰기" required></td>
<td><input type="submit" class="button primary" value="글쓰기"></td>
</tr>
</table>
</form>
-->
<table>
<thead>
<tr>
<th><spring:message code="message.main.num" /></th>
<th><spring:message code="message.main.title" /></th>
<th><spring:message code="message.main.writer" /></th>
<th><spring:message code="message.main.content" /></th>
<th><spring:message code="message.main.cnt" /></th>
<th><spring:message code="message.main.regdate" /></th>
</tr>
</thead>
<tbody>
<c:forEach var="b" items="${datas}">
<tr>
<td><a href="board.do?bid=${b.bid}">${b.bid}</a></td>
<td>${b.title}</td>
<td>${b.writer}</td>
<td>${b.content}</td>
<td>${b.cnt}</td>
<th>${b.regdate}</th>
</tr>
</c:forEach>
</tbody>
<tfoot>
<tr>
<td colspan="5"></td>
<td align="right"><a href="logout.do"><spring:message code="message.main.logout" /></a></td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<section>
<h2>Aliquam sed mauris</h2>
<p>Sed lorem ipsum dolor sit amet et nullam consequat feugiat consequat magna adipiscing tempus etiam dolore veroeros. eget dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula erat egestas velit, vitae tincidunt odio.</p>
<ul class="actions">
<li><a href="generic.html" class="button">Learn More</a></li>
</ul>
</section>
<section>
<h2>Etiam feugiat</h2>
<dl class="alt">
<dt>Address</dt>
<dd>1234 Somewhere Road • Nashville, TN 00000 • USA</dd>
<dt>Phone</dt>
<dd>(000) 000-0000 x 0000</dd>
<dt>Email</dt>
<dd><a href="#">information@untitled.tld</a></dd>
</dl>
<ul class="icons">
<li><a href="#" class="icon brands fa-twitter alt"><span class="label">Twitter</span></a></li>
<li><a href="#" class="icon brands fa-facebook-f alt"><span class="label">Facebook</span></a></li>
<li><a href="#" class="icon brands fa-instagram alt"><span class="label">Instagram</span></a></li>
<li><a href="#" class="icon brands fa-github alt"><span class="label">GitHub</span></a></li>
<li><a href="#" class="icon brands fa-dribbble alt"><span class="label">Dribbble</span></a></li>
</ul>
</section>
<p class="copyright">© Untitled. Design: <a href="https://html5up.net">HTML5 UP</a>.</p>
</footer>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>
mypage.jsp----------
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE HTML>
<!--
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>mypage</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Nav -->
<nav id="nav">
<ul>
<li><a href="#intro" class="active">Introduction</a></li>
<li><a href="#first">First Section</a></li>
<li><a href="mypage.do?lang=ko">한국어</a></li>
<li><a href="mypage.do?lang=en">English</a></li>
</ul>
</nav>
<!-- Main -->
<div id="main">
<!-- Introduction -->
<section id="intro" class="main">
<div class="spotlight">
<div class="content">
<header class="major">
<h2><spring:message code="mypage.h2" /></h2>
</header>
<form action="mupdate.do" method="post">
<table class="alt">
<tbody>
<tr>
<td><spring:message code="mypage.id" /></td>
<td colspan="2">${member.mid}</td>
</tr>
<tr>
<td><spring:message code="mypage.pw" /></td>
<td colspan="2"><input type="password" name="mpw" value="${member.mpw}" required></td>
</tr>
<tr>
<td><spring:message code="mypage.name" /></td>
<td colspan="2"><input type="text" name="name" value="${member.name}" required></td>
</tr>
<tr>
<td><spring:message code="mypage.role" /></td>
<td colspan="2">${member.role}</td>
</tr>
<tr>
<td colspan="3" align="right"><input type="submit" class="button primary" value="<spring:message code="mypage.update" />"> </td>
</tr>
</tbody>
</table>
</form>
<a href="main.do"><spring:message code="message.write.main" /></a> | <a href="mdelete.do?mid=${member.mid}"><spring:message code="mypage.mdelete" /></a>
</div>
<span class="image"><img src="images/pic01.jpg" alt="" /></span>
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<section>
<h2>Aliquam sed mauris</h2>
<p>Sed lorem ipsum dolor sit amet et nullam consequat feugiat consequat magna adipiscing tempus etiam dolore veroeros. eget dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula erat egestas velit, vitae tincidunt odio.</p>
<ul class="actions">
<li><a href="generic.html" class="button">Learn More</a></li>
</ul>
</section>
<section>
<h2>Etiam feugiat</h2>
<dl class="alt">
<dt>Address</dt>
<dd>1234 Somewhere Road • Nashville, TN 00000 • USA</dd>
<dt>Phone</dt>
<dd>(000) 000-0000 x 0000</dd>
<dt>Email</dt>
<dd><a href="#">information@untitled.tld</a></dd>
</dl>
<ul class="icons">
<li><a href="#" class="icon brands fa-twitter alt"><span class="label">Twitter</span></a></li>
<li><a href="#" class="icon brands fa-facebook-f alt"><span class="label">Facebook</span></a></li>
<li><a href="#" class="icon brands fa-instagram alt"><span class="label">Instagram</span></a></li>
<li><a href="#" class="icon brands fa-github alt"><span class="label">GitHub</span></a></li>
<li><a href="#" class="icon brands fa-dribbble alt"><span class="label">Dribbble</span></a></li>
</ul>
</section>
<p class="copyright">© Untitled. Design: <a href="https://html5up.net">HTML5 UP</a>.</p>
</footer>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>
insertBoard.jsp----------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE HTML>
<!--
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>insertBoard</title>
<meta charset="utf-8" />
<meta name="viewport"
content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript>
<link rel="stylesheet" href="assets/css/noscript.css" />
</noscript>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Nav -->
<nav id="nav">
<ul>
<li><a href="#intro" class="active">Introduction</a></li>
<li><a href="#first">First Section</a></li>
<li><a href="binsert.do?lang=ko">한국어</a></li>
<li><a href="binsert.do?lang=en">English</a></li>
</ul>
</nav>
<!-- Main -->
<div id="main">
<!-- Introduction -->
<section id="intro" class="main">
<div class="spotlight">
<div class="content">
<header class="major">
<h2><spring:message code="message.write.h2" /></h2>
</header>
<form action="binsert.do" method="post"
enctype="multipart/form-data">
<table class="alt">
<tbody>
<tr>
<td><spring:message code="message.write.title" /></td>
<td colspan="2"><input type="text" name="title"
value="<spring:message code="message.write.title" />" required></td>
</tr>
<tr>
<td><spring:message code="message.write.writer" /></td>
<td colspan="2"><input type="text" name="writer"
value="${user.name}" required readonly></td>
</tr>
<tr>
<td><spring:message code="message.write.content" /></td>
<td colspan="2"><input type="text" name="content"
value="<spring:message code="message.write.content" />" required></td>
</tr>
<tr>
<td><spring:message code="message.write.file" /></td>
<td colspan="2">
<input type="file" name="uploadFile"
value="<spring:message code="message.write.upload" />" onchange="loadFile(this);"></td>
</tr>
<tr>
<td colspan="3" align="right"><input type="submit"
class="button primary" value="<spring:message code="message.write.h2" />"></td>
</tr>
</tbody>
</table>
</form>
<a href="main.do"><spring:message code="message.write.main" /></a>
</div>
<span class="image"><img src="images/pic01.jpg" alt="미리보기"
id="preview" /></span>
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<section>
<h2>Aliquam sed mauris</h2>
<p>Sed lorem ipsum dolor sit amet et nullam consequat feugiat
consequat magna adipiscing tempus etiam dolore veroeros. eget
dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula
erat egestas velit, vitae tincidunt odio.</p>
<ul class="actions">
<li><a href="generic.html" class="button">Learn More</a></li>
</ul>
</section>
<section>
<h2>Etiam feugiat</h2>
<dl class="alt">
<dt>Address</dt>
<dd>1234 Somewhere Road • Nashville, TN 00000 • USA</dd>
<dt>Phone</dt>
<dd>(000) 000-0000 x 0000</dd>
<dt>Email</dt>
<dd>
<a href="#">information@untitled.tld</a>
</dd>
</dl>
<ul class="icons">
<li><a href="#" class="icon brands fa-twitter alt"><span
class="label">Twitter</span></a></li>
<li><a href="#" class="icon brands fa-facebook-f alt"><span
class="label">Facebook</span></a></li>
<li><a href="#" class="icon brands fa-instagram alt"><span
class="label">Instagram</span></a></li>
<li><a href="#" class="icon brands fa-github alt"><span
class="label">GitHub</span></a></li>
<li><a href="#" class="icon brands fa-dribbble alt"><span
class="label">Dribbble</span></a></li>
</ul>
</section>
<p class="copyright">
© Untitled. Design: <a href="https://html5up.net">HTML5 UP</a>.
</p>
</footer>
</div>
<!-- 사진 미리보기 js -->
<script type="text/javascript">
function loadFile(input){
//console.log('로그1');
if(input.files && input.files[0]){ // 파일을 여러 개 들어올 것을 예상해서
//console.log('로그2');
var fr=new FileReader();
fr.onload=function(event){
//console.log=('로그3');
document.getElementById('preview').src = event.target.result;
};
fr.readAsDataURL(input.files[0]);
}
else{
// 필수 속성이니까 공백값을 주는 것이 기본
//console.log('로그4');
document.getElementById('preview').src="";
}
}
</script>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>
board.jsp----------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML>
<!--
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>board</title>
<meta charset="utf-8" />
<meta name="viewport"
content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript>
<link rel="stylesheet" href="assets/css/noscript.css" />
</noscript>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Nav -->
<nav id="nav">
<ul>
<li><a href="#intro" class="active">Introduction</a></li>
<li><a href="#first">First Section</a></li>
<li><a href="board.do?lang=ko && bid=${data.bid}">한국어</a></li>
<li><a href="board.do?lang=en && bid=${data.bid}">English</a></li>
</ul>
</nav>
<!-- Main -->
<div id="main">
<!-- Introduction -->
<section id="intro" class="main">
<div class="spotlight">
<div class="content">
<header class="major">
<h2><spring:message code="board.h2" /></h2>
</header>
<div class="table-wrapper">
<form action="bupdate.do" method="post"
enctype="multipart/form-data">
<table class="alt">
<tbody>
<tr>
<td><spring:message code="board.title" /></td>
<td colspan="2"><input type="text" name="title"
value="${data.title}" required></td>
</tr>
<tr>
<td><spring:message code="board.writer" /></td>
<td colspan="2">${data.writer}</td>
</tr>
<tr>
<td><spring:message code="board.content" /></td>
<td colspan="2"><input type="text" name="content"
value="${data.content}" required></td>
</tr>
<tr>
<td><spring:message code="board.file" /></td>
<td colspan="2"><input type="file" name="uploadFile" onchange="loadFile(this);"></td>
</tr>
<tr>
<td><spring:message code="board.regdate" /></td>
<td><input type="datetime-local" name="regdate"
value="${data.regdate}"></td>
</tr>
<tr>
<td colspan="3" align="right"><input type="submit"
class="button primary" value="<spring:message code="board.update" />"><a href="bdelete.do?bid=${data.bid}"><input type="button"class="button primary" value="<spring:message code="board.delete" />"></a></td>
</tr>
</tbody>
</table>
</form>
<a href="main.do"><spring:message code="message.write.main" /></a>
</div>
</div>
<span class="image"><img src="images/${data.fileName}"
alt="" /></span>
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<section>
<h2>Aliquam sed mauris</h2>
<p>Sed lorem ipsum dolor sit amet et nullam consequat feugiat
consequat magna adipiscing tempus etiam dolore veroeros. eget
dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula
erat egestas velit, vitae tincidunt odio.</p>
<ul class="actions">
<li><a href="generic.html" class="button">Learn More</a></li>
</ul>
</section>
<section>
<h2>Etiam feugiat</h2>
<dl class="alt">
<dt>Address</dt>
<dd>1234 Somewhere Road • Nashville, TN 00000 • USA</dd>
<dt>Phone</dt>
<dd>(000) 000-0000 x 0000</dd>
<dt>Email</dt>
<dd>
<a href="#">information@untitled.tld</a>
</dd>
</dl>
<ul class="icons">
<li><a href="#" class="icon brands fa-twitter alt"><span
class="label">Twitter</span></a></li>
<li><a href="#" class="icon brands fa-facebook-f alt"><span
class="label">Facebook</span></a></li>
<li><a href="#" class="icon brands fa-instagram alt"><span
class="label">Instagram</span></a></li>
<li><a href="#" class="icon brands fa-github alt"><span
class="label">GitHub</span></a></li>
<li><a href="#" class="icon brands fa-dribbble alt"><span
class="label">Dribbble</span></a></li>
</ul>
</section>
<p class="copyright">
© Untitled. Design: <a href="https://html5up.net">HTML5 UP</a>.
</p>
</footer>
</div>
<!-- 사진 미리보기 js -->
<script type="text/javascript">
function loadFile(input){
//console.log('로그1');
if(input.files && input.files[0]){ // 파일을 여러 개 들어올 것을 예상해서
//console.log('로그2');
var fr=new FileReader();
fr.onload=function(event){
//console.log=('로그3');
document.getElementById('preview').src = event.target.result;
};
fr.readAsDataURL(input.files[0]);
}
else{
// 필수 속성이니까 공백값을 주는 것이 기본
//console.log('로그4');
document.getElementById('preview').src="";
}
}
</script>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>
다국어 처리 한국어버전
다국어 처리 영어 버전
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)' 카테고리의 다른 글
디바이스 융합 자바(Java) day79 - Mybatis 프레임워크를 Spring에 연동 (0) | 2022.10.05 |
---|---|
디바이스 융합 자바(Java) day78 - Mybatis 프레임워크(설치 및 설정) (1) | 2022.10.04 |
디바이스 융합 자바(Java) day75 - 에러 페이지 설정 (0) | 2022.09.28 |
디바이스 융합 자바(Java) day74 - 파일 업로드 및 파일 미리보기 추가 (0) | 2022.09.27 |
디바이스 융합 자바(Java) day73 - 2-Layered 아키텍쳐 (0) | 2022.09.26 |