質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

1回答

1134閲覧

ログイン機能を作りたい

beginner__

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2018/03/07 01:03

編集2018/03/07 02:54

前提・実現したいこと

サーブレット、DBの練習でログイン機能を作っています。
DBに格納したデータを参照して次のページへ移動させたいのですが、上手くいきません。

発生している問題・エラーメッセージ

httpエラー404

該当のソースコード

import java.io.IOException; import javax.servlet.*; import java.sql.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); String id = request.getParameter("id"); String pass = request.getParameter("pass"); Connection conn = null; PreparedStatement pstmt = null; ResultSet rset = null; String sql = "SELECT * FROM users WHERE id = ? && pass = ?"; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("url", "user", "password"); pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); pstmt.setString(2, pass); rset = pstmt.executeQuery(); String access = null ; if (rset.next() == true){ access = "/index.jsp"; } else { access = "/login.jsp"; } RequestDispatcher rd = request.getRequestDispatcher(access); rd.forward(request,response); } conn.close(); pstmt.close(); rset.close();

補足情報(FW/ツールのバージョンなど)

os:windows7
java:バージョン8
IDE: Eclipse Java EE IDE for Web Developers.
Version Oxygen.2 Release (4.7.2)
フレームワーク/不使用
Tomcat v8.0
プロジェクト/動的webプロジェクト

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unz.hori

2018/03/07 02:22

まず、環境について詳しく質問に追記してください。OSの種類・バージョン、Javaのバージョン、IDE、フレームワーク使用/不使用など。
unz.hori

2018/03/07 02:45

Tomcatなどを使っていますか?サーバはちゃんと起動していますか?プロジェクトの種類は?
unz.hori

2018/03/07 02:58

"上手くいきません。"についてどこまでが上手くいって、どこからが上手くいかないのでしょう?詳しく質問に追記してください。
退会済みユーザー

退会済みユーザー

2018/03/07 03:04

まずはクラスではないからコンパイルエラー
guest

回答1

0

まず、他の方からの質問で来ているように、画面越しの人でもどんな状態なのかわかるように質問を書きましょう。
それは、回答する人への礼儀だと思いますし、問題解決のスピードの早さにも繋がります。

【指摘1】protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
これはメソッドです。メソッドは、クラスに包括されるルールがありますので、そのようにしましょう。

【指摘2】クラスを作成して、doPost()メソッドをクラスに包括させても、そのクラスをサーブレットのクラスにするためには、HttpServletクラスを継承させる必要があります。作成したクラス(子クラス)に、HttpServletクラスを継承させましょう。
なお、クラス名は、javaファイル名と同様にしないとコンパイルエラーになります。(細かく言うと、ひとつのファイルに複数のクラスを定義する場合は例外となりますが)

【指摘3】doPost()は、HttpServletクラスのメソッドです。HttpServletクラスを継承したクラス(子クラス)でdoPost()を定義し直して使うことになりますので、doPost()に「@Override」を付与しましょう。

【指摘4】サーブレットをサーブレットとして動作させるためには、サーブレットの登録をする必要がありますが、やっていますか?(質問内容からはやっているかわかりませんでした)
サーブレットの登録をしていない場合、404エラーとなります。
サーブレットの登録をしていないのであれば、下記どちらかの方法で登録してみましょう。

【方法1】web.xmlに記述する。
web.xmlを作成した場合は、プロジェクトのWEB-INFディレクトリ配下に配置して下さい。

<servlet> <servlet-name>サーブレット名</servlet> <servlet-class>フルパスで記述したサーブレットクラス名(※注1)</servlet-class> </servlet> <servlet-mapping> <servlet-name>servlet-name部で登録したサーブレット名</servlet-name> <url-pattern>マッピングするURLパターン(※注2)</url-mapping> </servlet-mapping>

※注1:フルパスとは、パッケージ名も含んだパスのことです。たとえば、servletパッケージ配下にあるTestServletをフルパスで記述する場合はservlet.TestServletとなります。
※注2:TestServletを、たとえばhttp://localhost:8080/コンテキストパス/testで動かしたかったら、/testと書きます。

【方法2】サーブレットクラスにアノテーションを付与する。
Web3.0から使用できるようになった機能ですが、下記のようにアノテーションを付与すると、web.xmlを作成しなくてもよくなります。

@WebServlet(urlPatterns = "/test") public class TestServlet extend HttpServlet{ protected void doGet(HttpServletRequest req, HttpSerevletResponse res){ } }

投稿2018/03/07 05:32

yukapome789

総合スコア361

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問