1) core태그 - forEach
1-1) List객체 요소조회가능
1-2) map ,배열도 가능
2) JSTL형식화 태그 fmt
2-1) fmt태그 - formt
2-2) fmt태그 - parse
2-3) fmt태그 - 인코딩
3)functions 태그 fn
4) model2의 이해
5) model2 사용해보기
5-1)controller생성 , joinForm생성(회원가입)
5-2) jsp파일과 인코딩을위한filter
1) core태그 forEach
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
앞에 글에서부터 이어지는 forEach 예시임
1-1) List객체의 요소조회해보기
<h3>forEach태그를 이용해 List객체의 요소 출력해보기</h3>
<%
List<Integer> list = new ArrayList<>();
for(int i=1;i<=10;i++){
list.add(i*10);
}
pageContext.setAttribute("list", list);
%>
<!-- varStatus : 인덱스번호를 반환해줌 -->
<!-- items : 해당변수의 요소출력 (자바의 향상된for문과 동일 -->
<c:forEach var="i" items="${list}" varStatus="s">
[${s.index}]:${i} ,
</c:forEach><br>
<!-- list를 2줄로 출력 -->
<c:forEach var="i" items="${list}" varStatus="s">
<c:if test="${s.index == 5}"><br></c:if>
[${s.index}]:${i} ,
</c:forEach>
1-2)map , 배열 등도 조회가능
<%@page import="java.util.Arrays"%>
<%@page import="java.time.LocalDateTime"%>
<%@page import="java.time.LocalDate"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>forEach를 이용해 Collection 객체 조회</title>
</head>
<body>
<h3>forEach태그를 이용해 Map객체 출력하기</h3>
<%
Map<String,Object> map = new HashMap<>();
map.put("name","홍길동");
map.put("today", LocalDateTime.now());
map.put("age",20);
pageContext.setAttribute("map", map);
%>
<c:forEach var="m" items="${map}" varStatus="s">
${s.count}:${m.key}=${m.value}<br>
<!-- HashMap이므로 순서는알수없다 키값쌍만 잘 나오면 됨! -->
</c:forEach>
<h3>map객체를 EL을 이용해 출력</h3>
이름(\${map.name}):${map.name}<br>
나이(\${map.age}):${map.age}<br>
날짜(\${map.today}):${map.today}<br>
<h3>forEach를 이용해 배열객체출력</h3>
<c:set var="arr" value="<%=new int[]{10,20,30,40,50}%>"/>
<c:forEach var="a" items="${arr}" varStatus="s">
arr[${s.index}] = ${a} <br>
</c:forEach>
<h3>배열객체를 EL을 이용해 출력하기</h3>
arr[0]=${arr[0]}<br>
arr[1]=${arr[1]}<br>
arr[2]=${arr[2]}<br>
arr[3]=${arr[3]}<br>
arr[4]=${arr[4]}<br>
<h3>List객체를 EL을 이용해 출력</h3>
<c:set var="list" value="<%= Arrays.asList(10,20,30,40,50,60)%>" />
list[0]=${list[0]}<br>
list[2]=${list[2]}<br>
list[4]=${list[4]}<br>
<h3>forEach태그를 이용해 배열객체의 두번쨰 요소(1번인덱스)부터 세번쨰요소만(2번인덱스) 출력하기</h3>
<c:forEach var="a" items="${arr}" varStatus="s" begin="1" end="2">
<!-- 여기서 begin end 는 인덱스를 의미하게됨 -->
arr[${s.index}] = ${a}
</c:forEach>
<h3>forEach태그를 이용해 배열객체의 짝수인덱스요소만</h3>
<c:forEach var="a" items="${arr}" varStatus="s" step="2">
arr[${s.index}] = ${a}
</c:forEach>
<h3>forEach태그를 이용해 배열객체의 홀수인덱스요소만</h3>
<c:forEach var="a" items="${arr}" varStatus="s" begin="1" step="2" >
arr[${s.index}] = ${a}
</c:forEach>
</body>
</html>
2) JSTL형식화 태그 fmt
다음과같은 taglib를 불러와서 사용해야함!
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL형식화 태그</title>
</head>
<body>
<h3>숫자관련 형식 지정</h3>
<!-- ₩(ㄹ + 한자버튼) -->
<!-- formatNumber : 숫자를 타입에맞게 설정해줌 currency(money) percent(%) pattern(커스텀가능) -->
<fmt:formatNumber value="500000" type="currency" currencySymbol="₩" />원<br>
<fmt:formatNumber value="0.15" type="percent" /><br>
<fmt:formatNumber value="50000.345" pattern="###,###.00" /><br>
<!-- pattern="###,###.00" 3자리마다 , 를 찍고 반올림 후 소수점 두자리까지만표시 -->
<!-- setLocal value="지역" : 지역설정 -->
<h3>지역설정하기</h3>
<fmt:setLocale value="en_US"/>
<fmt:formatNumber value="500000" type="currency"/><br>
<fmt:setLocale value="ko_KR"/>
<fmt:formatNumber value="500000" type="currency"/><br>
</body>
</html>
2-1) fmt태그의 format을 이용한 날짜관련태그
formatDate
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jstl 형식화태그 fmt</title>
</head>
<body>
<h3>날짜관련태그</h3>
<c:set var="today" value="<%= new java.util.Date() %>"/>
년월일 : <fmt:formatDate value="${today}" type="date"/><br>
시분초 : <fmt:formatDate value="${today}" type="time"/><br>
년월일시분초 : <fmt:formatDate value="${today}" type="both"/><br>
년월일시분초-short : <fmt:formatDate value="${today}" type="both"
timeStyle="short" dateStyle="short"/><br>
년월일시분초-long : <fmt:formatDate value="${today}" type="both"
timeStyle="long" dateStyle="long"/><br>
년월일시분초-full : <fmt:formatDate value="${today}" type="both"
timeStyle="full" dateStyle="full"/><br>
년월일시분초-GMT : <fmt:formatDate value="${today}" type="both"
timeStyle="full" dateStyle="full" timeZone="GMT"/><br>
형식지정 : <fmt:formatDate value="${today}" pattern="yyyy년 MM월 dd일 a HH:mm:ss E요일"/><br>
<p>pattern속성은 SimpleDateFormat에서 사용하는 형식화문자와 같다고보면 됨</p>
<!--
~~Format클래스
format() : 객체 => 형식화된 문자열
parse() : 형식화된문자열 => 객체
-->
</body>
</html>
2-2) pmt태그의 parse(형식화된문자열=>객체)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jstl 형식화태그 parse관련</title>
</head>
<body>
<h3>Format된 숫자를 숫자로 변경</h3>
<%-- var="num1"속성값으로 등록됨(화면출력X)--%>
<fmt:parseNumber value="20,000" var="num1" pattern="##,###"/>
<!-- pattern과 맞는 값이 들어오면 number로변경시켜줌 -->
<fmt:parseNumber value="10,000" var="num2" pattern="##,###"/>
${num1}+${num2}=${num1+num2}<br>
<%--var속성이없으면 화면출력됨--%>
<fmt:parseNumber value="20,000" pattern="##,###"/><br>
<fmt:parseNumber value="10,000" pattern="##,###"/><br>
<h2>문제 : 20,000 + 10,000 = 30,000 출력해보기
num1변수와num2 이용</h2>
<fmt:formatNumber var="fNum1" value="${num1}" pattern="##,###"/>
<fmt:formatNumber var= "fNum2" value="${num2}" pattern="##,###"/>
<fmt:formatNumber var= "result" value="${num1+num2}" pattern="##,###"/>
답 : ${fNum1}+${fNum2} = ${result}<br>
<h3>Format된 날짜(문자형)를 날짜형으로 변경하기</h3>
<fmt:parseDate value="2025-12-25 16:00:00" pattern="yyyy-MM-dd HH:mm:ss" var="day"/>
${day}<br>
<h3>문제 : 2025-12-25일의 요일출력하기</h3>
<fmt:formatDate value="${day}" pattern="yyyy-MM-dd E요일"/>
</body>
</html>
2-3)fmt태그 - 인코딩 (Encoding)
<%-- request.setCharacterEncoding("UTF-8"); --%>
<fmt:requestEncoding value="UTF-8"/>
두개는 같은의미로 UTF-8 로 인코딩해주는것임 ( 인코딩을 안하면 한글 등이 깨질수있음)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>fmt태그 : 인코딩</title>
</head>
<body>
<%-- request.setCharacterEncoding("UTF-8"); --%>
<fmt:requestEncoding value="UTF-8"/>
<form name="f" method="post">
이름 : <input type="text" name="name" value="${param.name}"><br>
입사일 : <input type="text" name="hiredate" value="${param.hiredate}">
yyyy-MM-dd형태로 입력<br>
급여 : <input type="text" name="salary" value="${param.salary}"><br>
담당업무 : <input type="checkbox" name="job" value="서무">서무
<input type="checkbox" name="job" value="개발">개발
<input type="checkbox" name="job" value="비서">비서
<input type="checkbox" name="job" value="인사">인사 <br>
<button>전송</button>
</form>
<h3>입사일을 yyyy년MM월 dd일 E요일의 형태로출력 , 급여,연봉을 세자리마다,로출력해주기</h3>
이름:${param.name}<br>
<%--먼저 입력받은문자를 날짜로 만들어 준 후 다시 포맷팅을 해줘야함
예외처리를 통해 잘못입력되면 다른 출력을 해주자
--%>
<c:catch var="formatexception">
<fmt:parseDate var="pDate" value="${param.hiredate}" pattern="yyyy-MM-dd"/>
</c:catch>
입사일:
<c:if test="${formatexception != null}"> <!-- 예외발생 시 exception은 null이 아니다 -->
입사일은 yyyy-MM-dd 형태입력바랍니다<br>
</c:if>
<c:if test="${formatexception == null}">
<fmt:formatDate value="${pDate}" pattern="yyyy년MM월dd일 E요일"/><br>
</c:if>
급여 : <fmt:formatNumber value="${param.salary}" pattern="#,###"/><br>
<!-- pattern ="#,### (3자리마다 ,를 찍어준다) #:숫자가없으면출력안함 -->
연봉: <fmt:formatNumber value="${param.salary*12}" pattern="#,###"/><br>
<%--paramValues.job ㅣ 배열객체 --%>
담당업무 :
<c:forEach var="i" items="${paramValues.job}">
${i}
</c:forEach>
</body>
</html>
3) function태그
taglib는 다음과같이 사용된다
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="str1" value="Functions <태그>를 사용합니다. " />
<c:set var="str2" value="사용" />
<c:set var="tokens" value="2,3,4,5,6,7,8,9,10" />
length(str1)=${fn:length(str1)}:str1문자열의 길이 <br>
toUpperCase(str1)=${fn:toUpperCase(str1)}:str1문자열을 대문자로 변경<br>
toLowerCase(str1)=${fn:toLowerCase(str1)}:str1문자열을 소문자로 변경<br>
substring(str1,3,6)=${fn:substring(str1,3,6)}:str1의 3~5인덱스 부분문자열<br>
substringAfter(str1,str2)=${fn:substringAfter(str1,str2)}:
str1에서 str2 부분 이후의 부분문자열<br>
substringBefore(str1,str2)=${fn:substringBefore(str1,str2)}:
str1에서 str2 부분 이전의 부분문자열<br>
contains(str1,str2)=${fn:contains(str1,str2)}:str1내에 str2 문자열 존재?<br>
trim(str1) = ${fn:trim(str1)}:공백제거 <br>
replace(str1," ","-")=${fn:replace(str1," ","-")} : 공백을 -으로 치환<br>
split(tokens,",")=${fn:split(tokens,",")}<br>
<c:set var="arr" value="${fn:split(tokens,',')}" />
<c:forEach var="i" items="${arr}">${i} </c:forEach><br>
join(arr,"-")=${fn:join(arr,"-")} : 배열을 '-'으로 하나의 문자열로 연결<br>
=============<br>
<c:forEach var="i" items="${arr}">
<c:if test='${i == 1}'> true <br> </c:if>
<c:if test='${i != 1}'> false <br> </c:if>
</c:forEach><br>
=============<br>
=============<br>
</body>
</html>
functions 태그 응용
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<pre><code>
<!--
paramValues.job : job 파라미터의 값들을 배열로리턴
${fn:join(배열,',')} : 배열의요소를 ,로 연결해 문자열로리턴
-->
<c:set var="jobs" value="${fn:join(paramValues.job, ',')}"/>
급여 : <input type="text" name="salary" value="${param.salary}"><br>
담당업무 : <input type="checkbox" name="job" value="서무"
<c:if test="${fn:contains(jobs,'서무')}">checked</c:if>>서무
<input type="checkbox" name="job" value="개발"
<c:if test="${fn:contains(jobs,'개발')}">checked</c:if>>개발
<input type="checkbox" name="job" value="비서"
<c:if test="${fn:contains(jobs,'비서')}">checked</c:if>>비서
<input type="checkbox" name="job" value="인사"
<c:if test="${fn:contains(jobs,'인사')}">checked</c:if>>인사 <br>
<button>전송</button>
</form>
</pre></code>
4) model2 의 이해
/webapp/ex15_model2/hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Model2 이해</title>
</head>
<body>
${hello}
<!--hello : request영역의 속성명 -->
</body>
</html>
\webapp\WEB-INF\url.properties
(프로젝트명 /xxxx.do 를 호출 시 오른쪽이름을 가진 jsp가 호출?)
/hello.do=hello
/loginForm.do = loginForm
java\ex15_model2\Controller.java
package ex15_model2;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Properties;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//http://localhost:8080/jspStudy/hello.do 요청
//hello.do 라는 파일은 존재하지않음
// *.do => a.do .....adadakk/gg.do ..요청시 Controller 서블릿호출
@WebServlet(urlPatterns = {"*.do"},
initParams = {@WebInitParam(name="properties",value="url.properties")})
public class Controller extends HttpServlet {
private static final long serialVersionUID = 1L;
private Properties pr = new Properties();
private Action action = new Action();
private Class[] paramType = new Class[]
{HttpServletRequest.class,HttpServletResponse.class};
@Override
public void init(ServletConfig config) throws ServletException{
//config : properties = url.properties 값이 저장
FileInputStream f = null;
String props = config.getInitParameter("properties");
//props : url.properties 가 저장
try {
//config.getServletContext().getRealPath("/") : 웹어플리케이션폴더
//f = WEB-INF/ url.properties 파일 읽기
f=new FileInputStream
(config.getServletContext().getRealPath("/")+"WEB-INF/"+props);
pr.load(f); // url.properties에 작성한 /hello.do=hello를 가지고있게됨
f.close();
}catch(IOException e) {
e.printStackTrace();
}
}
public Controller() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
Object[] paramObjs = new Object[] {request,response};
ActionForward forward = null;
String command = null;
try {
// request.getRequestURI() : jspStudy/hello.do
// request.getContextPath().length() : /jspStudy의 길이
//command = /hello.do
//methodName = hello
command = request.getRequestURI().substring(request.getContextPath().length());
String methodName = pr.getProperty(command);
//action.getClass() : Action클래스의정보를 가져옴
//getMethod(메서드명,파라미터타입) : 클래스정보에서 method정보
Method method = action.getClass().getMethod(methodName, paramType);
//invoke(호출대상객체,매개변수값(인자)) : 지정된 매개변수사용해 메서드호출
forward = (ActionForward)method.invoke(action, paramObjs);
//forward = return new ActionForward(false,"ex15_model2/hello.jsp");
}
catch (NullPointerException e) {
forward = new ActionForward();
}
catch (Exception e) {
throw new ServletException(e);
}
if(forward!= null) {
if(forward.isRedirect()) {
response.sendRedirect(forward.getView());
}
else {
//forward.getView() : "ex15_model2/hello.jsp"
//disp : 다음호출할 페이지
RequestDispatcher disp = request.getRequestDispatcher(forward.getView());
disp.forward(request, response);
//ex15_model2/hello.jsp페이지를 호출
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
/java/ex15_model2/ActionForward.java
package ex15_model2;
public class ActionForward {
private boolean redirect;
private String view;
public ActionForward() {}
public ActionForward(boolean redirect, String view) {
this.redirect = redirect;
this.view = view;
}
//getter setter
public boolean isRedirect() {
return redirect;
}
public void setRedirect(boolean redirect) {
this.redirect = redirect;
}
public String getView() {
return view;
}
public void setView(String view) {
this.view = view;
}
}
/java/ex15_model2/Action.java
package ex15_model2;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Action {
public ActionForward hello(HttpServletRequest request,
HttpServletResponse response) {
request.setAttribute("hello", "helloWorld");
return new ActionForward(false,"ex15_model2/hello.jsp");
}
public ActionForward loginForm(HttpServletRequest request,
HttpServletResponse response) {
request.setAttribute("id", "admin");
return new ActionForward(false,"ex15_model2/loginForm.jsp");
//여기서 return한 ActionForward의 view부분으로이동하게될것임
}
}
http://localhost:8080/jspStudy/hello.do 로 접근 하면
request의 속성이 출력될것임 ${hello}
다만들었다면 (추가변경시)Action클래스와 url.properties만 건드려주면된다
5)model2 사용 ( 새로운프로젝트 model2study)
5-1) joinForm 생성(회원가입)
DynamicProject(model2Study2생성)
cos.jar
mariaddb-java-client-3.5.1.jar
sitemesh-3.-.1.jar은
model1study프로젝트에서 복붙한 후
WEB-INF / lib 에 붙여넣자
mskimrequest.jar 파일(Servlet)
/model2Study/src/main/java/controller/MemberController.java
package controller;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import gdu.mskim.MskimRequestMapping;
import model.member.MemberDto;
//http://localhost:8080/model2Study/member/joinForm로 접속해봐
// /member/로 접근할수있다!
// /member/에 없는 정보를 접근하려고한다면 view에서찾는다
@WebServlet(urlPatterns = { "/member/*" }, initParams = { @WebInitParam(name = "view", value = "/view/") })
public class MemberController extends MskimRequestMapping {
private MemberDto dto = new MemberDto();
}
/model2Study/src/main/webapp/view/member/joinForm.jsp
(model1프로젝트에 있을거임)
action 부분(join.jsp-->join) 변경하자
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
<link rel="stylesheet" href="../css/main.css">
</head>
<body>
<%--onsubmit : 나의 form 내부에 submit버튼 클릭되면
form 태그에 이벤트 발생(target == form)
return input_check(this) : input_check()함수 호출 , 매개변수this : form객체를 의미 --%>
<form action="join" name="f" method="post" onsubmit="return input_check(this)">
<input type="hidden" name="picture" value=""><!-- 업로드된 이미지의 이름이 들어갈태그 -->
<table>
<caption>회원가입</caption>
<tr>
<td rowspan="4" valign="bottom">
<img src="" width="100" height="120" id="pic"><br>
<%--
href = "javascript:win_upload()" : 자바스크립트의 win_upload()호출
--%>
<font size="1"><a href="javascript:win_upload()">사진등록</a></font>
</td><th>아이디</th>
<td><input type="text" name="id">
<button type="button" onclick="idchk()">중복검색</button>
</td></tr>
<tr><th>비밀번호</th><td><input type="password" name="pass"></td></tr>
<tr><th>이름</th><td><input type="text" name="name"></td></tr>
<tr><th>성별</th>
<td>
<label for="gender1">남</label>
<input type="radio" name="gender" id="gender1" value="1">
<label for="gender2">여</label>
<input type="radio" name="gender" id="gender2" value="2">
</td></tr>
<tr><th>전화번호</th><td colspan="2"><input type="text" name="tel"></td></tr>
<tr><th>이메일</th><td colspan="2"><input type="text" name="email"></td></tr>
<!-- button태그의 기본type : submit임 -->
<tr><td colspan="3"><button>회원가입</button></td></tr>
</table><!-- -zzz -->
</form>
<script>
function input_check(f){
//f : <form...>
//f.id : <input name="id">name이 id인태그
if(f.id.value.trim() == ""){
alert("아이디입력")
f.id.focus(); //name이id인 곳에 포커스를 둠
return false; //기본이벤트 취소
}
if(f.pass.value.trim() == ""){
alert("비밀번호입력")
f.pass.focus();
return false;
}
if(f.name.value.trim() == ""){
alert("이름입력")
f.name.focus();
return false;
}
return true;//아이디비번이름이 입력됐다면 true
}
function win_upload(){
let op = "width=500,height=500 ,top=50 ,left=150";
open("pictureForm.jsp","",op);
//pictureForm.jsp를 연다
}
</script>
</body>
</html>
5-2) jsp파일과 인코딩을위한filter , Membercontroller
/model2Study/src/main/webapp/view/alert.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<script>
alert("${msg}");
location.href = "${url}";
</script>
/java/filter/CharEndodingFilter.java
(인코딩을 위한 Filter)
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
//다음Filter로인해 우리는 인코딩을 request받을때마다 쓰지않아도됨
@WebFilter("/*")
public class CharEndodingFilter implements Filter {
private String encoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
encoding = filterConfig.getInitParameter("encoding");
if (encoding == null) {
encoding = "UTF-8"; // 인코딩방식이없다면 UTF-8 로설정
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
// chain : 다음으로넘기기위한메서드
}
@Override
public void destroy() {
}
}
MemberController 에 내용추가(중요함)
package controller;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import gdu.mskim.MskimRequestMapping;
import gdu.mskim.RequestMapping;
import model.member.Member;
import model.member.MemberDto;
//http://localhost:8080/model2Study/member/joinForm로 접속해봐
@WebServlet(urlPatterns = { "/member/*" },
initParams = { @WebInitParam(name = "view", value = "/view/") })
//서블릿(MskimRequestMapping)에 존재하지않는다면 view폴더 하위의 member폴더 하위에서찾는다
public class MemberController extends MskimRequestMapping {
private MemberDto dto = new MemberDto();
/*
* 1.파라미터정보를 Member객체에 저장 (인코딩필요) (Filter이용)
* 2.Member객체를 이용해 db에insert(member테이블저장)
* 3.가입성공 : 성공메시지 출력 후 loginForm 이동
* 가입실패 : 실패메시지출력 후 joinForm 이동
*/
@RequestMapping("join") // http://localhost:8080/model2Study/member/join 시 호출
public String join(HttpServletRequest request, HttpServletResponse rsponse) {
Member mem = new Member();
mem.setId(request.getParameter("id"));
mem.setPass(request.getParameter("pass"));
mem.setName(request.getParameter("name"));
mem.setGender(Integer.parseInt(request.getParameter("gender")));
mem.setTel(request.getParameter("tel"));
mem.setEmail(request.getParameter("email"));
mem.setPicture(request.getParameter("picture"));
if (dto.insert(mem)) {// 삽입
request.setAttribute("msg", mem.getName()+"님 회원가입완료");
request.setAttribute("url", "loginForm");
}
else {
request.setAttribute("msg", mem.getName()+"님 회원가입시 오류발생");
request.setAttribute("url", "loginForm");
}
return "alert"; //view하위의 alert페이지로 이동해라(alert페이지 출력과 페이지이동을 위한페이지)
}
}
'JSP' 카테고리의 다른 글
주말 (49일차에 이어짐 id.pw찾기 , loginForm관련 , picture절대경로만들기) (0) | 2025.04.12 |
---|---|
부트캠프49일차(model2 {login ,main ,info ,update,delete,list,layout (1) | 2025.04.11 |
부트캠프47일 (EL , JSTL) (0) | 2025.04.09 |
부트캠프47일(pw찾기 , 비밀번호수정폼) (0) | 2025.04.09 |
부트캠프46일차 (delete , 사진등록 , id,pw찾기) (0) | 2025.04.08 |