プログラミング学習時のメモ・Java
初めに
引っかかった仕様とかメモっていくやつ
ローカル環境とか paiza.io とか使って確認できればうれしいな
ローカル環境とか 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を入れ込む、パーツ増築タイプ
コメント
コメントを投稿