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

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

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

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

Q&A

解決済

1回答

7126閲覧

サーブレットのコードを作り実行しているんですが、単独でも動作しません。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2018/05/07 11:45

eclipuseでJavaの勉強をしています。以下のコードを単独で実行すると
//sample6_05.htmlはeclipseの実行で正常に動作して、ブラウザにURL http:localhost:8080/sampleServelet/sample6_05.html と打ち込んで正常に送信できる状態です。Contextのパスはpath=sampleServeletに変更してあります。

次にサーブレットのコード//SampleServlet.javaを作り実行しているんですが、
「あなたは,「" + str + "」とかきました。」と表示したいのですが、エラーが出てしまいます。
コードは間違っていないと思うのですが、どうしてでしょうか。
SampleServlet.javaのwarファイルをEclipseのエクスポートで作り、
C:\Users\nakamura\Desktop に保存して、Tomcatのwebappsにコピーしています。

HTTPステータス 405 - Method Not Allowed

エラーメッセージ:
Type ステータスレポート
メッセージ HTTPのGETメソッドは、このURLではサポートされていません。
説明 The method received in the request-line is known by the origin server but not supported by the target resource.
Apache Tomcat/9.0.7

教えてください。

//sample6_05.html <!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> <h1>フォーム送信</h1> <form action="sample6_05" method="post"> 入力 :<input type="text" size="20" name="text1"> <input type="submit" value="送信"> </form> </body> </html> //SampleServlet.java package sample; import java.io.IOException; import java.io.PrintWriter; 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("/sample") public class SampleServlet extends HttpServlet { private static final long serialVersionUID = 1L; public SampleServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { super.doGet(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html,;charset=UTF-8"); request.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); String str = request.getParameter("text1"); out.println("<html><body"); out.println("<h1>あなたは,「" + str + "」とかきました。</h1>"); out.println("</html></body"); } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

本を参考にしている思いますので、eclipseでプロジェクトを作り、WebContent下のWEB-INFにsample6_05.htmlを置き、JAVAリソース下のsrcにSampleServlet.javaを配置していると思います。
eclipse上でも現状では動きません。
sample6_05.html内の<form action="sample6_05" method="post">の"sample6_05"は送信ボタンを押したとき、見に行くサーブレットファイルを指しています。
したがって、この記述とサーブレットファイル名は一致しなければなりません。
また、サーブレットファイルを作成したときに、@WebServlet("/sample")の"/sample"の記述は自動的にファイル名となるはずです。質問の記述では一致していません。
htmlから呼び出すファイル名を生かすのであれば、サーブレットのファイル名はsample6_05.javaとすべきです。
私の環境ではhtmlのaction="sample6_05"を"Sample"に変更し、サーブレットファイルをSample.javaに変えて実行したら動きました。表示される結果の日本語部分は文字化けしましたが。
あと、このファイル名の大文字小文字も一致する必要があります。

投稿2018/05/07 13:00

senior_golfer

総合スコア264

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

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

退会済みユーザー

退会済みユーザー

2018/05/07 13:15

ありがとうございます。5日ぐらい停滞しています。Tomcatのエラーなどで、それを直すの1日掛かっていました。教えて頂いたと通りにして表示できたのですが、文字化けしています。 厚かましいのですが先に進みたいので、直し方を教えて頂けませんか。 よろしくお願いいたします。
senior_golfer

2018/05/07 13:30

私が参考にしている本では、文字化けの原因はサーブレットが漢字の文字コードに対応していないために起きるようです。文字コードに対応させるためには「文字エンコーディング」という処理が必要で、私も本のコードをそのまま使用しています。本に記載されているコードを掲載するとまずいので、「eclipse サーブレット 文字化け」などで検索してみてください。 どこがにあるとよいのですが。
退会済みユーザー

退会済みユーザー

2018/05/07 13:45

ありがとうございます。調べてみます。
退会済みユーザー

退会済みユーザー

2018/05/07 14:23

ありがとうございます。検索でフィルターのコード追加で出来ました。 //SampleFilter.java package sample; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * Servlet Filter implementation class SampleFilter */ @WebFilter("/*") public class SampleFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); chain.doFilter(request, response); } } をsrcに追加してできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問