プログラミング学習時のメモ・Java

初めに

引っかかった仕様とかメモっていくやつ
ローカル環境とか paiza.io とか使って確認できればうれしいな

Java

配列

・配列のコピー

新しい"配列b"に既存の"配列a"を代入すると、値そのものではなく保存場所のアドレス値がコピーされる
参照先が共通なので、同じ入れ物にアクセスしていることになる

サンプルコード


int[] a = {10, 20, 30};
int[] b = a;
a[0]++;
System.out.println("出力結果:b="+b[0]);
出力結果:b=11
保存場所を別々に確保したい場合、個別に値を代入する必要がある

サンプルコード


int[] a = {10, 20, 30};
int[] b = new int[3];
for(int i=0; i < a.length; i++){
	b[i] = a[i];
}
a[0]++;
System.out.println("出力結果:b="+b[0]);
出力結果:b=10

ArrayListの配列数

配列の長さは.lengthだけどArrayListの配列の長さは.size()で取得できる

Servlet・JSP

・POST送信のエンコード

ServletにPOST送信すると、取得した値が文字化けする
ServletのdoPostメソッド上で明示的にrequest.setCharacterEncoding("UTF-8")を行うと治った
request.getCharacterEncoding()が未指定(null)だとLatin-1(ISO-8859-1)でエンコードするのが原因
GETリクエストの文字コードはデフォでUTF-8なのにどうして……
環境: Eclipse 4.23.0(2022-03)/ Tomcat9 Java17

サンプルコード(JSP⇔Servlet)

・Serv.java

import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Serv")
public class Serv extends HttpServlet {
	public Serv() {
		super();
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		ServletContext sc = getServletContext();
		sc.getRequestDispatcher("/WEB-INF/jsp.jsp")
			.forward(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		doGet(request, response);
	}
}
・jsp.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8"></meta>
<title>POST送信のエンコード</title>
</head>
<body>
	POST値:<%=request.getParameter("post")><br>
	POSTエンコード:<%=request.getCharacterEncoding()><br>
	<form action="./Serv" method="post">
		<input name="post" type="text">
		<input type="submit" value="POST送信">
	</form>
</body>
</html>
余談
Eclipse3.4以降も、Tomcat8以降も、文字コードは標準でUTF-8

redirectとfowardとincludeの違い

response.sendRedirect("URL") クライアントに指定のURLへ移動してもらう
getRequestDispatcher("path").forward(request, response) サーバー内で指定のServletに切り替える、URLが変わらないredirect
request.getRequestDispatcher("path").include(request, response) Servlet上に別のServletを入れ込む、パーツ増築タイプ

コメント

このブログの人気の投稿

android端末で起こるデレステの音ズレ等について

Galaxy端末でGameLauncherの解像度制限を回避する

デレステの技術的な所とか調べた感想