序文
私は長い間サーブレットをプレイしていませんでしたが、10 年前に学生だったときも Java に苦労していました。最近、Eclipse を使用して Servlet3.x に基づいた新しい Maven プロジェクトを作成したいと考えていましたが、しばらくは放棄するつもりはありませんでした。参考までに例として記事を書いておきます。
環境整備
eclipse:Oxygen.1 リリース (4.7.1)
サーブレット:3.1.0
新しい Maven プロジェクトを作成する
servet3.0に変換します
この時点で、Dynamic Web Module を 3.0 に変換できないことがわかりました。これが、このプロジェクトで最も厄介な部分です。
org.eclipse.wst.common.project.facet.core.xml ファイルは project.settings ディレクトリ内にあります。
開いたら、jst.webのバージョンを3.0に編集して保存します。
次に、Maven でプロジェクトを再度更新します。
次に、再度開くと、Dynamic Web Module のバージョンが 3.0 に変更されていることがわかります。この時点で変換は成功しています。
関連するコードを書く
まず、pom.xml ファイルを編集します
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sadoshi</groupId>
<artifactId>shiroWeb</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>shiroWeb Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>shiroWeb</finalName>
</build>
</project>
次に、src/main/webapp/WEB-INF/web.xml ファイルを編集します。webapp ディレクトリがない場合は、このパスに従って新しいディレクトリを作成できます。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>20180510</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.sadoshi.shiroWeb.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.sadoshi.shiroWeb.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
ここでは、デフォルトのルート パス アクセス ページであるウェルカム ページを定義するだけです。また、/hello にアクセスする場合は HelloServlet を呼び出し、/login にアクセスする場合は LoginServlet を呼び出します。
次に、Web サイトのホームページである HelloServlet を作成します。これは非常に簡単です。このサーブレットにアクセスするだけで、hello.jsp ページが返されます。
package com.sadoshi.shiroWeb.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/hello.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
次に、ログイン処理として LoginServlet を記述します。ここでも非常に簡単で、get を通じてアクセスすると、login.jsp ページに戻ります。投稿経由でアクセスされた場合は、トークンを設定してホームページにリダイレクトします。ログイン認証のリンクはここでは省略しています。
package com.sadoshi.shiroWeb.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("/login.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("token","123");
resp.addCookie(cookie);
resp.sendRedirect("/shiroWeb/hello");
}
}
pom の servlet-api バージョンは 3.x である必要があることに注意してください。最新の 4.x を使用すると、一部の実装が異なる可能性があり、実行効果に影響します。たとえば、以前 4.x を使用していたときは、フィルター リンクの処理が多少異なっていたため、同じバージョンを使用するのが最善です。
まだ 2 ページが不足しています。最初のページはホームページ hello.jsp で、これを webapps ディレクトリの下に作成します。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Hello</title>
</head>
<body>
<h1>Hello Page</h1>
</body>
</html>
同じディレクトリに新しいログイン ページlogin.jspを作成します。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登录页面</title>
</head>
<body>
<h2>${remind}</h2>
<h1>登录页面</h1>
<form action="login" method="post">
登录名:<input type="text" name="name"><br/>
密码为:<input type="password" name="password"><br/>
<input type="submit" value="登录">
</form>
</body>
</html>
この単純なサーブレットは完成しました
テスト
Eclipse のサーバーの下に新しいサーバーを作成します。そうでない場合は、[ウィンドウ] -> [ビューの表示] -> [その他] で検索します。
このマシンに tomcat8.0 をインストールしました。対応するディレクトリを選択するだけです。
次に、新しく作成したサーバーを右クリックして [追加と削除] を選択し、プロジェクトを右側に追加します。
サーバーを右クリックして「開始」を選択し、http://localhost:8080/shiroWeb/loginにアクセスしてログイン ページを開きます。
ログイン名とパスワードを何気なく入力すると、通常は /hello パスにジャンプします。
そして、F12 をクリックしてページを更新すると、Cookie に token=123 が設定されていることがわかります。これは、システムがログイン後にトークンを割り当てるのと似ており、システムはその後、トークン フィールドに基づいてユーザーがログインしたかどうかを判断できます。
まとめ
仕事をうまくやりたいなら、まずツールを磨く必要があります。サーブレットプロジェクトの作成は、JavaWeb を学習するための最も基本的な内容です。読者の皆様が知りたい知識をこの記事から得ることができれば幸いです。