728x90

한글을 사용할 경우에 깨지지 않고 정상적으로 출력하는 방법에 대해 알아보자.

 

한글을 이용해서 post 방식으로 넘긴다면

이런 식으로 깨져서 넘어가고 나타나게 된다.

 

이럴 땐

request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

국제 표준인 UTF-8로 설정을 하면 된다.

 

일단 이름이랑 사는 곳을 입력 받을 jsp를 만들어보자.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<form action="mSignUp" method="post">
    이름 : <input type = "text" name="m_name"><br>
    사는 곳 : <input type="text" name="m_location">
    <input type="submit" value="sign up">
</form>

</body>
</html>

post 방식으로 mSignUp에 mapping 된 곳으로 넘긴다.

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/mSignUp")
public class SignUp extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        PrintWriter out = response.getWriter();

        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        String mName = request.getParameter("m_name");
        String mLoc = request.getParameter("m_location");

        out.print("<p> mName : " + mName + "</p>");
        out.print("<p> mLoc : " + mLoc + "</p>");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

이렇게 mapping 된 Servlet에

request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

 

을 추가하고 실행해보자.

아까와 다르게 한글이 제대로 표시되는 것을 볼 수 있다.

 

이번엔 Servlet이 아닌 jsp로 넘기는 경우를 살펴보자.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<form action="mSignUp.jsp" method="post">
    이름 : <input type = "text" name="m_name"><br>
    사는 곳 : <input type="text" name="m_location">
    <input type="submit" value="sign up">
</form>

</body>
</html>

action을 mSignUp.jsp로 바꾸어 주고

<% request.setCharacterEncoding("UTF-8");%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<%!
    String mName;
    String mLoc;
%>

<%
    mName = request.getParameter("m_name");
    mLoc = request.getParameter("m_location");
%>

이름 : <%= mName%> <br>
사는 곳: <%=mLoc%>

</body>
</html>

이렇게 jsp 파일을 만들어준다.

 

그러면 이렇게 한글이 제대로 출력 되는  것을 볼 수 있다.

 

만약

<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%!
    String mName;
    String mLoc;
%>

<%
    mName = request.getParameter("m_name");
    mLoc = request.getParameter("m_location");
%>

이름 : <%= mName%> <br>
사는 곳: <%=mLoc%>

</body>
</html>

이런 jsp 파일을 사용했다면

 

이렇게 깨져서 나오는 것을 볼 수 있다.

 

이렇게 하나씩 코드를 추가하는 것 말고 filter를 사용해서 한글 출력을 할 수 있는데

filter interface를 구현해서 web.xml에 추가하는 것이다.

 

import jakarta.servlet.*;

import java.io.IOException;

public class myFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("-- filter doFilter() --");

        //request filter
        servletRequest.setCharacterEncoding("UTF-8");
        servletResponse.setCharacterEncoding("UTF-8");

        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("-- filter init() --");
    }

    @Override
    public void destroy() {
        System.out.println("-- filter destroy() --");
    }
}

filter를 implements 해서 doFilter 안에 UTF-8로 인코딩 하는 코드를 달아준다.

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <filter>
        <filter-name>myFilter</filter-name>
        <filter-class>myFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>myFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

그리고 xml에 이렇게 filter 관련된 태그를 달아주면 위처럼 한글이 깨지지 않게 된다.

 

'백엔드 > JSP, Servlet' 카테고리의 다른 글

JSP & Servlet 11일차  (0) 2023.02.05
JSP & Servlet 10일차  (0) 2023.01.16
JSP & Servlet 9일차  (0) 2023.01.15
JSP & Servlet 8일차  (0) 2023.01.04
JSP & Servlet 7일차  (0) 2023.01.04
728x90

클라이언트와 서버의 연결을 유지시켜주는 방법으로 Session에 대해 알아보자.

 

쿠키는 연결 정보를 클라이언트에 저장을 했지만 Session은 서버에 저장하는 방법이다.

Session을 구현하는 방법은

다음과 같다.

 

바로 만들어보도록 하자.

우선 login.jsp이다.

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE HTML>
<html>
<head>
    <title>Title</title>
</head>
<body>

<form action="loginCon" method="post">
    ID : <input type="text" name="mID"><br>
    PW : <input type="password" name="mPW"><br>
    <input type="submit" value="login">
</form>

</body>
</html>

이렇게 body 부분에 form으로 ID와 PW를 받고 post로 loginCon에 넘겨준다.

 

여기에 mapping된 메서드는

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/loginCon")
public class loginCon extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();

        String mID = request.getParameter("mID");
        String mPW = request.getParameter("mPW");

        out.print("mID : " + mID);
        out.print("mPW : " + mPW);

        HttpSession session = request.getSession();
        session.setAttribute("memberId", mID);

        response.sendRedirect("loginOk.jsp");

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

어차피 doPost에서 doGet으로 넘어가기에 doGet에 저렇게 작성을 하고 request에서 mID와 mPW를 각각 받아온다.

그리고 session에 memberId로 mID 속성을 저장하고 loginOk.jsp를 열어준다.

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <%
        PrintWriter printWriter = response.getWriter();
        session = request.getSession();
        printWriter.print("memberId : " + session.getAttribute("memberId") + "<br>");
    %>

    <form action = "logoutCon" method="post">
        <input type = "submit" value="logout">
    </form>

</body>
</html>

 

loginOk.jsp에서는 session에서 memberId를 찾아 출력해주고 logoutCon을 연결해주는 버튼을 달아준다.

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = "logoutCon", value = "/logoutCon")
public class logoutCon extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        session.invalidate();

        response.sendRedirect("login.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

logoutCon은 session을 비워주고 처음화면인 login.jsp로 돌려 보내준다.

 

login.jsp는 session에 저장이 되어 있는지 확인을 해보아야 한다.

그렇기에 앞부분에 조건문을 추가하여 session에 데이터가 있다면 loginOk.jsp를 열어주게 만든다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE HTML>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    if(session.getAttribute("memberId") != null)
        response.sendRedirect("loginOk.jsp");
%>
<form action="loginCon" method="post">
    ID : <input type="text" name="mID"><br>
    PW : <input type="password" name="mPW"><br>
    <input type="submit" value="login">
</form>

</body>
</html>

'백엔드 > JSP, Servlet' 카테고리의 다른 글

JSP & Servlet 12일차  (0) 2023.02.05
JSP & Servlet 10일차  (0) 2023.01.16
JSP & Servlet 9일차  (0) 2023.01.15
JSP & Servlet 8일차  (0) 2023.01.04
JSP & Servlet 7일차  (0) 2023.01.04
728x90

오늘은 클라이언트와 서버의 연결을 유지시켜주는 방법인 Cookie에 대해서 알아본다.

 

  • Cookie란?

서버와 클라이언트의 연결에 대한 흔적을 남기는 것을 Cookie라고 한다.

다음에 연결할 일이 생긴다면 이 Cookie를 참고하게 된다.

  • Cookie 구현

Cookie[] cookies = request.getCookies();
Cookie cookie = null;

for(Cookie c : cookies){
	System.out.println("c.getName(): " + c.getName() + ", c.getValue() :" + c.getValue());
    
    if(c.getName().equals("memberId")){
    	cookie = c;
	}
}

if(cookie == null){
	System.out.println("cookie is null");
    cookie = new Cookie("memberId", mId);
}

response.addCookie(cookie);
cookie.setMaxAge(60 * 60);

response.sendRedirect("loginOk.jsp");

 

이렇게 Cookie를 찾아보고 없으면 새로운 Cookie를 만드는 방식으로 구현을 한다.

 

이제 실습을 해보도록 하자, 바로 프로젝트를 생성을 해주면 된다.

우선 jsp로 페이지를 먼저 만들도록 하자.

loginCon으로 처리를 하도록 페이지를 작성했다.

 

그럼 해당 데이터를 받는 loginCon Servlet을 작성해보자

해당 데이터를 받고 클라이언트에서 모든 Cookie를 검사하고 만약 memberId에 해당하는 쿠키가 없다면 쿠키를 생성해준다.

쿠키의 유지 시간을 60 * 60초로 갱신을 해주고

loginOk.jsp로 보낸다.

loginOk.jsp이다

Cookie 배열에 있는 모든 쿠키를 출력해준다.

 

이제 다시 login.jsp로 돌아가야 한다.

 

만약 쿠키가 남아있다면 login을 하지 않아도 접속이 될 수 있도록 만들어야 할 것이다.

그렇기 때문에

윗 부분에 서블렛 태그로 만약 memberId에 해당하는 Cookie가 있다면 loginOk.jsp를 실행해주는 코드를 추가해준다.

 

그렇다면 만약 쿠키가 남아있다면

이런 화면이 출력되게 된다.

 

이렇게 웹에서 쿠키를 남기는 방법에 대해 알아보았다.

'백엔드 > JSP, Servlet' 카테고리의 다른 글

JSP & Servlet 12일차  (0) 2023.02.05
JSP & Servlet 11일차  (0) 2023.02.05
JSP & Servlet 9일차  (0) 2023.01.15
JSP & Servlet 8일차  (0) 2023.01.04
JSP & Servlet 7일차  (0) 2023.01.04
728x90

Servlet에서 데이터를 공유하는 방법에 대해 공부하자

 

  • Servlet parameter

이렇게 늘 그렇게 했듯이 

xml에 작성된 데이터를 가져오는 방법이다.

 

당연히 한 번 해보도록 하자

프로젝트를 생성한 후

web.xml에 servlet을 mapping 해주고

이렇게 init-parameter들도 넣어준다.

 

이러면 이제 Servlet으로 가서

이렇게 초기값들도 getServletConfig를 이용해 가져와본다.

 

실행을 해보면 당연히

이렇게 초기값들이 잘 출력이 되게 된다.

 

  • context parameter

이것도 jsp 때와 비슷하다.

전체적으로 공유될 수 있는 데이터이며

 

바로 사용을 해보자면

이렇게 xml에 context-param을 적어주고

이렇게 getServletContext로 가져와보면

잘 가져와지는 것을 확인 할 수 있다.

 

  • context attribute

JSP 때와 마찬가지로 데이터를 set하고 get하는 방법을 알아보자

이렇게 setAttribute를 작성해두고

이것을 가져와보기 위해 다른 Servlet을 작성해본다.

다른 Servlet에서 getAttribute를 이용해 데이터를 가져와보고

실행을 해보면

처음에는 이렇게 데이터들을 가져올 수 없어 null이 뜨게 된다.

setAttribute가 작성된 페이지를 켜본 후

새로고침을 해보면 이렇게 원하는 결과가 출력되는 것을 볼 수 있다.

'백엔드 > JSP, Servlet' 카테고리의 다른 글

JSP & Servlet 12일차  (0) 2023.02.05
JSP & Servlet 11일차  (0) 2023.02.05
JSP & Servlet 10일차  (0) 2023.01.16
JSP & Servlet 8일차  (0) 2023.01.04
JSP & Servlet 7일차  (0) 2023.01.04
728x90

request, response 외에 JSP에서 기본적으로 제공하는 객체에 대해 알아보자

 

  • config 객체

Web.xml의 데이터를 JSP에서 데이터를 공유하는 방식이다.

init-param으로 name과 value 쌍을 이루어 값을 초기화 해두고 작업을 하는 JSP에서 얻어 올 수 있다.

Config 객체로 부터 getInitParameter를 이용하여 초기화 된 값을 가져오는 방식이다.

 

한 번 해보도록 할 텐데 JSP 초기 설정하는 방법에서 자꾸 실수해서 오랜만에 여기다가 다시 기록하려 한다.

이렇게 jakarta EE로 server는 tomcat을 설정을 해주고

다음 페이지에서는 Servlet을 설정을 해준 뒤 만들어준다.

 

만든 후 Project Structure에서

web.xml을 추가해준다.

src -> main -> webapp에 jsp를 만들 수 있게 된다.

그럼 이대로 만들어보자

 

우선 web.xml에서

이렇게 mapping을 해준 다음

이렇게 init-param들을 추가해준다.

그 다음에는 jsp파일을 만든 후 초기화된 값들을 가져와보자

이렇게 출력을 위해 <p>태그까지 달고

실행 한 후 접속해보면

이렇게 xml에 설정해 둔 초기값들이 출력되는 것을 볼 수 있다.

  • application 객체

application 객체는 해당 프로젝트 전체에 영향을 미친다.

 

여기에 context param을 이용하면 모든 Servlet에서 모두 공유될 수 있는 데이터를 만들 수 있다.

 

우리가 사용했던 web.xml에 context-param을 추가한다.

application에서 전체적으로 공유하고 싶어하는 데이터를 이렇게 web.xml에 context-param으로 정의를 하고

JSP 파일에도 application.getInitParam을 이용해 데이터를 가져온다.

그러면 공유 객체도 이렇게 잘 가져오는 것이 보여진다.

application 객체는 프로젝트 전체에 영향을 미치기 때문에 속성을 저장하고 다른 곳에서 그렇게 만들어진 속성을 가져갈 수 있다.

이렇게 application.setAttribute를 이용해서 값을 설정해주고

application.getAttribute를 이용해서 값을 가져오는 방식이다.

이렇게 추가된 속성을 가져올 수 있다.

 

'백엔드 > JSP, Servlet' 카테고리의 다른 글

JSP & Servlet 12일차  (0) 2023.02.05
JSP & Servlet 11일차  (0) 2023.02.05
JSP & Servlet 10일차  (0) 2023.01.16
JSP & Servlet 9일차  (0) 2023.01.15
JSP & Servlet 7일차  (0) 2023.01.04
728x90

사용자의 요청 (Request)과 web-server의 응답 (Response)을 담당하는 객체에 대해서 학습합니다.

 

  • request 객체

바로 해보도록 하자

일단 데이터를 받기 위해 html 파일을 만든다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <form action="mSignUp.jsp" method="get">
        name: <input type="text" name="m_name"><br>
        password: <input type="password" name="m_pass"><br>
        hobby:  sport <input type="checkbox" name="m_hobby" value="sport">,
                cooking <input type="checkbox" name="m_hobby" value="cooking">,
                travel <input type="checkbox" name="m_hobby" value="travel"><br>
        <input type="submit" value="sign up">
    </form>

</body>
</html>

당연히 이 안의 내용은 설명하지 않도록 하겠다.

당연히 이런 홈페이지가 출력이 된다.

우리는 여기서 jsp를 이용하여 데이터를 받아야 한다.

action="mSignUp.jsp" method="get"는

mSignUp.jsp를 사용하고 get 방식으로 데이터를 넘긴다는 것이다.

 

이 데이터를 받는 jsp 파일은 

이렇게 만들어진다.

 

태그들을 이용하여 데이터들을 받는데 대부분의 내용은 6일차의 내용과 비슷하고, 변수에 데이터를 입력받는 방식만 살펴본다면

request.getParameter(String s); 를 이용하여 값을 입력받는 것을 볼 수 있는데

Servlet과 똑같이 request 객체에서 뽑아 사용하면 된다.

 

실행을 시키고 데이터를

이렇게 입력해보면

이렇게 잘 출력이 되는 것을 볼 수 있다.

역시 Get방식이라 주소창의 주소가 긴 것을 볼 수 있다.

  • response 객체

위와는 반대로 응답하는 방법을 살펴보자

이런 jsp 파일을 만들고 

response.sendRedirect를 이용하여 secondPage.jsp를 연결해주었다.

sendRedirect는 지정한 페이지로 이동하는 방식이다.

secondPage.jsp의 내용은 이와같다.

이렇게 실행을 해보면

이렇게 First Page!!가 뜨지 않고 바로 Second Page!!가 뜨는 것을 볼 수 있다.

바로 secondPage.jsp로 넘어가기 때문이다.

JSP 응답에서도 이렇게 response 객체를 활용하면 된다.

 

JSP의 request와 response를 공부하면서 Servlet의 request와 response도 비교해보면 좋을 것 같다.

'백엔드 > JSP, Servlet' 카테고리의 다른 글

JSP & Servlet 12일차  (0) 2023.02.05
JSP & Servlet 11일차  (0) 2023.02.05
JSP & Servlet 10일차  (0) 2023.01.16
JSP & Servlet 9일차  (0) 2023.01.15
JSP & Servlet 8일차  (0) 2023.01.04

+ Recent posts