ディレクトリ
まず、JavaWebプロジェクトを作成し、完全なHTMLページ
第二に、サーブレットにマッピングされたweb.xml構成ファイル、URL
世界でサーブレット&JSPのMVCパターン:
コントローラ(制御)でサーブレット、JSPの表示画面(ビュー)、プレーンJavaクラス・モデル(モデル)。
これらのサービス(要求+応答)のそれぞれの後ろに、それはモードのMVCであるべきである、式:
より具体的に:
ユーザーの問題ブラウザからの要求が、ウェブサーバダイナミックディスカバリ要求であるHTTPプロトコルを介してウェブサーバに送信され、これは、Tomcatコンテナに要求を処理します。Tomcatコンテナ、命令に対応するサーブレットの.classファイルを見つけるそのサービス()関数の実行を開始します。この操作の過程では、要求が上を通過達成するためのJavaクラス・モデルと呼ばれる、との結果がJSPファイルを通じて要求に伝え、これは最終的に利用者に返却容器を使用して、JSPページのtomcat。
この記事では主にアイデアの開発環境下での開発プロジェクトのMVCパターンに慣れ始めるための非常に簡単なJavaWebアプリケーションを作成します。メイン注:TomcatのサーブレットとJSPコンテナ管理コンポーネントでは、どのように我々はアプリケーションをデプロイします。
注:JSPはそれのJavaコードを、挿入した後、実際のhtmlページです!
まず、JavaWebプロジェクトを作成し、完全なHTMLページ
プロジェクトを作成します。1.
まず、JeffChangのコンサートという名前のJavaWebのアイデアで新しいプロジェクトを作成する権利。:特定の操作は、参照することができIDEA設定項目JavaWeb
このプロジェクトは、主にユーザーがフォーム結果ページは、ユーザー年度中の都市どんな情報コンサートを言って、ポップアップ表示されます提出した後、最初の11のワールドツアー、家は、年を選択するためのフォームを持っていますクエリ情報張信哲(ジェフ・チャン)に使用されています。とてもクール!
2、準備ホーム側
変更したindex.jsp次のように、ファイルを(これは私たちのプロジェクトのデフォルトページです):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JeffChang's Concert</title>
</head>
<body>
<h1 align="center">Welcome to JeffChang's Concert Page!</h1>
<h2 align="center">Year Select Page</h2>
<form method="POST" action="query.do"> <!-- action即当用户提交这个表单时,将传递给url名为query.do的servlet -->
Select year:
<p>
<!-- 创建一个下拉菜单-->
<select name="year" size="1">
<option value="2018"> 2018 </option>
<option value="2019"> 2019 </option>
<option value="2020"> 2020 </option>
</select>
<br><br>
<div style="text-align: center;">
<input type="SUBMIT">
</div>
</form>
</body>
</html>
書かれた後に間違っている場合は、直接の実行を確認します。次のようにWebページが表示されます:
フォームを送信するために年を選択し、404❗があるでしょう。私たちは、あなたがフォームを送信するときに、Tomcatはサーブレットにaction属性ポイントにリクエストを渡しますが、見つけることができない、サーブレットにフォームのaction属性ポイントを認識していなかったので、とても404があります。
第二に、サーブレットにマッピングされたweb.xml構成ファイル、URL
web.xmlファイルは、コンテナTomcatの展開ファイルです。ユーザーがURLへのリクエストがWebサーバに渡され送信すると、URLがTomcatでそれに応じて対応するための特定のサーブレットにマッピングされます。
web.xmlファイルのコードは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<!-- 对应mapping中某一个servlet的内部名 -->
<servlet-name>name1</servlet-name>
<!-- 当收到请求时,要调用的Java类的相对路径(相对classes文件) -->
<servlet-class></servlet-class>
</servlet>
<servlet-mapping>
<!-- 为了方便部署,给这个servlet取一个内部名 -->
<servlet-name>name1</servlet-name>
<!-- 在index.jsp页面中对应的某表单action属性 -->
<url-pattern>/query.do</url-pattern>
</servlet-mapping>
</web-app>
私たちは、サーブレットクラス--Java対応が書かれていないので、サーブレット・クラスは、参加しないことに注意してください。それは、後に追加されます。
この場合、単にフォームを送信しようとすると、時間を選択し、それを実行します。
この時点では500が404の前に文句を言うが、ありません!私たちは、サーブレットのURLとのマッピングを展開しているが、これはJavaサーブレットクラスを達成されていないので〜
第三に、Javaサーブレットクラスを実装します
1、サーブレットのモデルを作成
モデルMを表し、MVC、バックエンドの束純粋なJavaコード。このモデルを呼び出すためのJavaサーブレットクラスがされ、対応する結果を与えることが、利用者に送信された要求を計算するために実装します。だから、あなたはJavaサーブレットクラスを実装するには、対応するモデルを実装する必要があります。
プロジェクトの中のsrcディレクトリ、新しいクラスコンサートを作成し、getConcertListの実装:
import java.util.ArrayList;
import java.util.List;
public class Concert {
private String time; //演唱会的时间
private String region; //演唱会的地区
private int num; //巡演的场次
public Concert() { }
public Concert (int num, String time, String region) {
this.num = num;
this.region = region;
this.time = time;
}
public List getConcertList(String year) {
List concertList = new ArrayList();
if(year.equals("2018")) {
concertList.add(new Concert(1,"2018-10-13","北京-五棵松体育馆"));
concertList.add(new Concert(2,"2018-10-14","北京-五棵松体育馆"));
concertList.add(new Concert(3,"2018-11-02","澳门-金光综艺馆"));
concertList.add(new Concert(4,"2018-12-22","深圳-深圳湾体育中心"));
}
else if(year.equals("2019")) {
concertList.add(new Concert(5,"2019-01-19","成都-成都大魔方"));
concertList.add(new Concert(6,"2019-04-06","台北-小巨蛋"));
concertList.add(new Concert(7,"2019-04-13","广州-广州宝能体育中心"));
concertList.add(new Concert(8,"2019-04-27","南京-青奥体育公园体育馆"));
concertList.add(new Concert(9,"2019-05-11","新加坡-室内体育馆"));
concertList.add(new Concert(10,"2019-6-08","济南-济南奥体中心体育馆"));
concertList.add(new Concert(11,"2019-6-22","苏州-苏州奥体中心体育馆"));
concertList.add(new Concert(12,"2019-6-29","福州-海峡奥体综合体育馆"));
concertList.add(new Concert(13,"2019-7-13","马来西亚-云顶云星剧场"));
concertList.add(new Concert(14,"2019-7-14","马来西亚-云顶云星剧场"));
concertList.add(new Concert(15,"2019-7-26","大连-大连体育中心体育馆"));
concertList.add(new Concert(16,"2019-8-17","重庆-华熙文化体育中心"));
concertList.add(new Concert(17,"2019-11-16","佛山-国际体育文化演艺中心"));
concertList.add(new Concert(18,"2019-11-23","宁波-奥体中心体育馆"));
concertList.add(new Concert(19,"2019-11-30","长沙-国际会展中心"));
concertList.add(new Concert(20,"2019-12-14","上海-梅赛德斯奔驰体育中心"));
concertList.add(new Concert(21,"2019-12-15","上海-梅赛德斯奔驰体育中心"));
concertList.add(new Concert(22,"2019-12-22","沈阳-辽宁省体育馆"));
} else if(year.equals("2020")) {
concertList.add(new Concert(23,"2020-01-01","无锡-无锡市体育馆"));
concertList.add(new Concert(24,"2020-04-28","英国-伦敦皇家阿尔伯特音乐厅"));
}
return concertList;
}
public String toString() {
return "第"+this.num+"场 - " + this.time + " : " + this.region + "\n";
}
}
2、Javaサーブレットクラスを実装するために、
プロジェクトの中でsrcディレクトリ、新しいYearQueryServletクラス必要継承のHttpServletを作成し、doPostメソッドをオーバーライドします(super.doPost(REQ、RESP)を残していない。この文を)。そして、ビューJSPページに渡さConcert.javaモデルから情報を入手。
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class YearQueryServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
/* 从模型获取答案*/
String year = req.getParameter("year"); //从请求的信息(表单)内,找到name属性为year的表单,并获取用户提交的结果
Concert concert = new Concert();
List ans = concert.getConcertList(year);
/* 将模型组件的贵大增加到请求对象 */
req.setAttribute("styles", ans); //为请求对象增加一个属性,其值为ans,供给jsp使用
RequestDispatcher view = req.getRequestDispatcher("YearQueryResult.jsp"); //为jsp实例化一个请求分派器
view.forward(req, resp); //使用请求分派器要求容器准备好jsp,并向jsp发送请求和响应
}
}
サーブレットは、サーブレットクラスにJavaクラスのHttpServlet補数を対応する位置を継承しました。
<!-- 当收到请求时,要调用的Java类的相对路径(相对classes文件) -->
<servlet-class>YearQueryServlet</servlet-class>
注:ちょうどモデルを使用してサーブレットを構築し、その結果は、JSPファイル転送ブリッジを来る、「YearQueryResult.jsp」ビューファイルが書かれていません。
この時点では、その後、プログラムを実行し、ちょうど一年を選択して、フォームを送信します。詳細に説明するように、404エラー、エラーページを見ることができます:/JeffChang%20Concert/YearQueryResult.jsp、すなわち、対応するファイルのjspビューを見つけることができません。[OK]を、その我々の橋が正常に構築されたが、ビューのJSPファイルの欠如されています。
第四には、対応するJSPビューファイルを実装します
YearQueryResult.jspファイル - JSPは、プロジェクトのwebディレクトリにファイルを作成します。我々は戻って、ビューのコードが書かれている必要があります。
ストレスを受けた先代:JSPは、実際のhtmlページで、次にJavaコードを挿入します。執筆の時点でのJavaコードは、私たちは、<%>記号を書きます
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JeffChang's Concert</title>
</head>
<body>
<h1 align="center">张信哲第11轮世界巡回演唱会 - 未来式</h1>
<p>
<%
List styles = (List)request.getAttribute("styles"); //从请求对象得到一个属性(就是答案)
/* 将结果显示在网页上 */
Iterator it = styles.iterator();
while (it.hasNext())
out.println(it.next() + "<br>");
%>
</p>
</body>
</html>
このアイテムのファイル、ディレクトリ、次のように:
シンプルなMVCプログラムは、単に試験後、完了です。
直接、離れてから実行します -
2018,2019,2020は、それぞれ、以下の結果フォーム供給されます。
ええ!それは完了です -
終わり
公衆への個人的な歓迎の注意ありませんが「 手羽先はプログラミング」、ここで深刻な行儀のコード農業の一つがあります。
----は、最も行儀ブログERを行い、ほとんどの固体プログラマが行います----
慎重に、通常のノートに集約各記事を、書くことを目指し、更新をプッシュします -