MENU

html→サーブレット→jsp で値を受け渡す方法

f:id:kiserukun:20210611090227p:plain

サーブレットを使い簡単な計算プログラムを作りました。

サーブレットは初めてだったので 忘れないうちにアウトプットします。  

ファイル構成

ファイルの位置は以下のようになります。 f:id:kiserukun:20210716211117p:plain

servletパッケージ

CalcServlet.java

package servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CalcServlet
 */
@WebServlet("/CalcServlet")
public class CalcServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

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

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

    private void exec(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        String inputNumber = request.getParameter("number");
        
        Hold hold = new Hold();
        Calc calc = new Calc();
        int value = Integer.parseInt(inputNumber);
        hold.setInputValue(value);
        int result = calc.calculate(value);
        hold.setCalculateResult(result);
        request.setAttribute("hold", hold);
        RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/Result.jsp");
        dispatcher.forward(request, response);
    }
    
}

Hold.java(入力した値を保持しておくクラス)

package servlet;

public class Hold {
    private int inputValue;
    private int calculateResult;
            
    public int getInputValue() {
        return inputValue;
    }
    
    public void setInputValue(int inputValue) {
        this.inputValue = inputValue;
    }
    
    public int getCalculateResult() {
        return calculateResult;
    }
    
    public void setCalculateResult(int calculateResult) {
        this.calculateResult = calculateResult;
    }
}

Calc.java(計算するクラス)

package servlet;

public class Calc {

    public int calculate(int value) {
        return value * value;
    }
}

 

htmlファイル

input.html(入力画面のファイル)

<!DOCTYPE html>
<html>
<head>
<meta charset="SJIS">
<title>計算プログラム</title>
</head>
<body>
<form action="/sample/CalcServlet" method="post">:
<p>計算する値<input type="text" name="number"></p>
<input type="submit" value ="送信">
</form>
</body>
</html>

jspファイル

Result.jsp(結果を表示するファイル)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>  
<%@ page import="servlet.Hold" %>
<%
    Hold hold = (Hold) request.getAttribute("hold");
%>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>計算プログラム</title>
</head>
<body>
    <p>答え</p>
    <form action="/example/input.html">
        <p><%= hold.getCalculateResult() %></p> 
        <a href="/sample/input.html">戻る</a>
    </form>
</body>
</html>

表示結果

このようになりました。 f:id:kiserukun:20210717104325p:plain

 

f:id:kiserukun:20210717104328p:plain

あとがき

サーブレットはとりあえずMVCモデルで 処理をhtmlから受け取った値を処理してjspに値を返すということがわかりました。