在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

Resin中JSP的范例

Resin中JSP的范例

更新時間:2022-05-14 文章作者:未知 信息來源:網絡 閱讀次數:

By Scott Ferguson
Blueski編譯

目錄如下:
1 引論
2 范例的框架: Hello, World
3 Servlet 評論
4 展示留言本
5 留言本的模式
6 作為應用屬性的留言本
7 留言本的邏輯
8 結論


1 引論

JSP的強大優勢在于把一種應用的商務邏輯和它的介紹分離開來。用 Smalltalk的面向對象的術語來說, JSP鼓勵MVC(model-view-controller)的web應用。JSP的classes 或 beans 是模型, JSP 是這個視圖, 而Servlet是控制器。

這個例子是一個簡單的留言本,包括用戶登錄和留言。它被作為Resin平臺的示范:
--執行角色
--模型 A 留言本
--用于新用戶的login.jsp
--用于已注冊用戶的add.jsp
--控制器 GuestJsp, 一個用來管理狀態的servlet


2 樣板的框架: Hello, World

GuestJsp servlet的框架把 "Hello, World" 這個字符串傳給login.jsp頁面。這個框架為留言本設立結構。具體細節將在下面補充。

這個例子被編譯后可以瀏覽到:

http://localhost:8080/servlet/jsp.GuestJsp

你可以看到頁面上有這樣的顯示: Hello, world

JSP模板是以Servlet的處理開始然后把處理結果傳給JSP頁進行格式化。

以下使用了一個Servlet2.1 ServletContext的特性 getRequestDispatcher()。
請求的調度器在服務器上讓servlets直接向前傳送并包括了任何可能的子請求。對SSI包含來說這是一個更靈活的取代做法。
在servlet文件中請求的調度器可以包含任何頁面,servlet,或JSP的結果。 GuestJsp將使用dispatcher.forward()來將控制傳給JSP頁進行格式化。

GuestJsp.java: Skeleton package jsp.GuestJsp;

import java.io.*;
import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;

/**
* GuestJsp is a servlet controlling user
* interaction with the guest book.
*/
public class GuestJsp extends HttpServlet {
/**
* doGet handles GET requests
*/
public void doGet(HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException
{
// Save the message in the request for login.jsp
req.setAttribute("message", "Hello, world");

// get the application object
ServletContext app = getServletContext();

// select login.jsp as the template
RequestDispatcher disp;
disp = app.getRequestDispatcher("login.jsp");

// forward the request to the template
disp.forward(req, res);
}
}


servlet和jsp頁使用HttpRequest對象中的屬性進行通信。skeleton在"message"屬性中保存了"Hello, World"。
當login.jsp啟動時,它將捕捉到該字符串并將其打印出來。

由于Resin的JavaScript能夠讀取擴充的Bean模型,它可以將request.getAttribute("message")轉換成為
JavaScript的對應物 request.attribute.message。

login.jsp: Skeleton <%@ page language=javascript %>

<head>
<title><%= request.attribute.message %></title>
</head>

<body bgcolor='white'>
<h1><%= request.attribute.message %></h1>
</body>

3 Servlet的復習

對于來自于ASP或CGI背景并轉向jsp的人來說,
Servlets代替CGI腳本體現了Java在動態類加載方面的優勢。servlet就是一個Java類,
它對Servlet或HttpServlet進行了擴展并放置到適當的路徑中。Resin將自動加載servlet并執行它。

url /servlet/classname將request提交給Servlet請求器。請求器會從doc/WEB-INF/classes自動加載Java類的類名
并試圖執行Servlet的service方法。

Resin將定期檢查類文件以判斷是否被修改過。如果被修改過,則將用新的servlet取代舊的。

4 顯示留言本

在基本框架已經運行后, 下一步是創建model。

5 留言本模型

留言本是很直接的,這里知識包含了一下API。它遵從Bean模型以簡化JavaScript。
同樣的API可以工作于HashMap, 基于文件,以及數據庫應用。

JSP文件只能存取public方法。所以JSP文件無法創建一個新的留言本或者增加一個新用戶。
這是GuestJsp servlet的責任。

jsp.Guest.java API package jsp;

public class Guest {
Guest();
public String getName();
public String getComment();
}


Resin的JavaScript能讀取Bean模型。所以使用JavaScript的JSP頁面可以存取getName()和getComment()
作為屬性。例如,你可以簡化使用guest.name和guest.comment。

jsp.GuestBook.java API package jsp;

public class GuestBook {
GuestBook();
void addGuest(String name, String comment);
public Iterator iterator();
}


Resin的JavaScript同樣可以讀取iterator()調用,所以你可以使用JavaScript用于 ... 任何一個來取得用戶:

for (var guest in guestBook) {
...
}



GuestBook作為application屬性
為了使得例子保持簡單,GuestJsp在application (ServletContext)中存取GuestBook。作為例子,
在application中保存數據是可以接受的,但對于完全成熟的應用,最好僅使用application將數據放到其它地方。

jsp.GuestJsp.java // get the application object
ServletContext app = getServletContext();

GuestBook guestBook;

// The guestBook is stored in the application
synchronized (app) {
guestBook = (GuestBook) app.getAttribute("guest_book");

// If it doesn't exist, create it.
if (guestBook == null) {
guestBook = new GuestBook();
guestBook.addGuest("Harry Potter", "Griffindor rules");
guestBook.addGuest("Draco Malfoy", "Slytherin rules");
app.setAttribute("guest_book", guestBook);
}
}

RequestDispatcher disp;
disp = app.getRequestDispatcher("login.jsp");

// synchronize the Application so the JSP file
// doesn't need to worry about threading
synchronized (app) {
disp.forward(req, res);
}


JSP文件本身是簡單的。它從application獲取留言本并在表中顯示內容。通常,
application對象需要同步,因為一些客戶端可能同時瀏同一頁面。
GuestJsp在jsp文件被調用之前小心處理了同步情況。

login.jsp: Display Guest Book <%@ page language=javascript %>

<head>
<title>Hogwarts Guest Book</title>
</head>

<body bgcolor='white'>

<h1>Hogwarts Guest Book</h1>
<table>
<tr><td width='25%'><em>Name</em><td><em>Comment</em>
<%
var guestBook = application.attribute.guest_book

for (var guest in guestBook) {
out.writeln("<tr><td>" + guest.name + "<td>" + guest.comment);
}
%>


</body>


Hogwarts Guest Book
Name Comment
Harry Potter Griffindor Rules
Draco Malfoy Slytherin Rules


6 留言本的規則(logic)--作為應用屬性的留言本

留言本的規則是很簡單的。如果用戶沒有登錄,他會看到一個提示和登錄表。
登錄后他會看到提示并在一個表中加入留言。 login.jsp給出了登錄的頁面,add.jsp給出了
增加流言的頁面。

GuestJsp在session變量中保存了規則信息。

執行'login'來登錄或 'add'來增加留言。 其中
name: 用戶名
password: 口令
comment:留言

7 留言本規則 ...

// name from the session
String sessionName = session.getValue("name");

// action from the forms
String action = request.getParameter("action");

// name from the login.jsp form
String userName = request.getParameter("name");

// password from the login.jsp form
String password = request.getParameter("password");

// comment from the add.jsp form
String comment = request.getParameter("comment");

// login stores the user in the session
if (action != null && action.equals("login") &&
userName != null &&
password != null && password.equals("quidditch")) {
session.putValue("name", userName);
}

// adds a new guest
if (action != null && action.equals("add") &&
sessionName != null &&
comment != null) {
guestBook.addGuest(sessionName, comment);
}

String template;
// if not logged in, use login.jsp
if (session.getValue("name") == null)
template = "login.jsp";
// if logged in, use add.jsp
else
template = "add.jsp";

RequestDispatcher disp;
disp = app.getRequestDispatcher(template);

...


login.jsp和add.jsp僅加上了不同forms在前一個section中顯示代碼。

login.jsp <%@ page language=javascript %>
<head>
<title>Hogwarts Guest Book: Login</title>
</head>
<body bgcolor='white'>

<h1>Hogwarts Guest Book</h1>
<table>
<tr><td width='25%'><em>Name</em><td><em>Comment</em>
<%
var guestBook = application.attribute.guest_book

for (var guest in guestBook) {
out.writeln("<tr><td>" + guest.name + "<td>" + guest.comment);
}
%>

<hr>

<form action='GuestJsp' method='post'>
<input type=hidden name='action' value='login'>
<table>
<tr><td>Name:<td><input name='Name'>
<tr><td>Password:<td><input name='Password' type='password'>
<tr><td><input type=submit value='Login'>

</form>
</body>


8 結論

Resin示例演示了擴充留言本的一些方法,包括加入一些智能的東西用于form處理。然而,由于forms取得更多的只能,即使是JSP模板也變得復雜化了。
有一個結論:XTP模板。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 国精产品一区一区三区视频| 青草青青在线视频| 亚洲中文字幕无码专区| 亚洲最新免费视频| www.色就是色.com| 校园春色 亚洲色图| 男人操女人免费软件| 欧美一级片免费播放| 久艹在线免费观看| 日韩精品视频在线观看视频| 国产在线无码精品| 日本大胆人体视频| 国产精品久久中文字幕| 国产素人在线观看| 国产欧美在线一区| 青青草原国产在线视频| 国产三级精品三级在线| 操bbb操bbb| 国产自产在线视频| 亚洲精品中文字幕无码蜜桃| 麻豆一区二区三区视频| 中文字幕一区久久| 无码人妻精品一区二区蜜桃网站| 男人的天堂avav| 内射国产内射夫妻免费频道| 粗暴91大变态调教| 久久综合在线观看| 少妇无码av无码专区在线观看| 2022亚洲天堂| 日韩av影视大全| 亚洲精品久久久久久久蜜桃臀| 极品粉嫩国产18尤物| 熟妇人妻无乱码中文字幕真矢织江| 亚洲这里只有精品| 欧洲精品在线播放| 国产3p在线播放| 成人性生活视频免费看| 欧美wwwwwww| 男女高潮又爽又黄又无遮挡| 日本黄色的视频| 欧美久久久久久久久久久久久| 在线黄色免费观看| 女性女同性aⅴ免费观女性恋| 黄色片免费网址| 久久精品国产sm调教网站演员| 午夜剧场高清版免费观看| 精品视频免费在线播放| 青青草原国产免费| 狠狠操狠狠干视频| 中文字幕在线观看第三页| 毛片av在线播放| 国产精品12p| 九一精品久久久| 熟妇人妻无乱码中文字幕真矢织江| 992tv人人草| 在线观看岛国av| 欧在线一二三四区| 欧美精品色婷婷五月综合| 亚洲爆乳无码精品aaa片蜜桃| 欧美伦理片在线观看| 日本久久精品一区二区| 欧美黄网站在线观看| 国产精品裸体瑜伽视频| 黄色成人在线免费观看| av影院在线播放| 热久久最新网址| 51xx午夜影福利| 成人在线观看毛片| 国产精品8888| 成年在线观看视频| 久久亚洲国产成人精品无码区| 中文字幕一区二区三区四区五区人 | www.在线观看av| 亚洲乱码日产精品bd在线观看| 日本精品免费视频| 成人高清dvd| 欧美国产日韩激情| 日韩精品视频一区二区在线观看| 日本在线xxx| 日本久久久精品视频| www.玖玖玖| 国产三级国产精品国产专区50| 老司机久久精品| 永久av免费在线观看| 黄色成人在线免费观看| 青青草国产免费| aaa毛片在线观看| 粉色视频免费看| 精产国品一二三区| 精品久久一二三| www.日本一区| 欧美高清中文字幕| 手机在线免费观看毛片| 黄色三级视频在线播放| 97超碰国产精品| 91制片厂毛片| 91视频 - 88av| 最近免费中文字幕中文高清百度| 小泽玛利亚视频在线观看| 91大学生片黄在线观看| 国产男女无遮挡| 精品嫩模一区二区三区| 久久久久久久久久久久久国产精品| 中文字幕欧美人妻精品一区| av动漫在线播放| 色婷婷.com| 日韩免费一级视频| 色呦呦网站入口| 99视频精品免费| 国产av熟女一区二区三区| 国产一区视频免费观看| 成人免费在线视频播放| 超碰超碰在线观看| 无码中文字幕色专区| 在线观看av免费观看| 久久久免费视频网站| 成人在线视频一区二区三区| 日韩av片专区| 国产男女无遮挡| 福利视频一二区| av电影一区二区三区| 自拍偷拍21p| 日本老熟妇毛茸茸| 能在线观看的av| 波多野结衣综合网| 久艹在线免费观看| 欧美日韩中文字幕在线播放 | www.亚洲一区二区| √天堂资源在线| 国产三级精品三级在线| 欧美日韩亚洲一二三| 日本日本19xxxⅹhd乱影响| 男人天堂新网址| 神马午夜伦理影院| 一级性生活视频| 欧美一级爱爱视频| 久久久久久久9| 久久国产精品视频在线观看| 日韩国产成人无码av毛片| 国内自拍中文字幕| 免费极品av一视觉盛宴| 国产成人生活片| 精品国产av无码一区二区三区| 欧美乱做爰xxxⅹ久久久| 激情成人开心网| 116极品美女午夜一级| 欧洲av无码放荡人妇网站| 久久国产色av免费观看| 91在线视频观看免费| 17c国产在线| 国产一区一区三区| 97视频在线免费| 少妇性l交大片| 国产高清999| 日本香蕉视频在线观看| 美女福利视频在线| 亚洲欧美日韩三级| 免费极品av一视觉盛宴| 国产日韩一区二区在线观看| 网站一区二区三区| 亚洲AV无码成人精品一区| 亚洲熟妇无码一区二区三区导航| 你懂的av在线| 欧美特黄aaa| 少妇高潮毛片色欲ava片| 在线免费av播放| 农民人伦一区二区三区| 亚洲人辣妹窥探嘘嘘| 日本黄大片在线观看| 欧美美女一级片| 97视频久久久| 日本高清免费在线视频| 六月丁香婷婷激情| 欧美日韩久久婷婷| 国产精品第12页| 一级性生活视频| 色www免费视频| 大陆极品少妇内射aaaaa| 日本黄色福利视频| 无码人妻丰满熟妇区五十路百度| 亚洲免费视频播放| 一本色道久久亚洲综合精品蜜桃 | 欧美精品自拍视频| 国内精品国产三级国产aⅴ久| 国产97在线 | 亚洲| 日韩中文在线字幕| 中国黄色片一级| 欧美三级理论片| 国产91在线视频观看| 天堂а√在线中文在线| 老司机久久精品| 天天色综合社区| 国产激情在线观看视频| 免费看又黄又无码的网站| www成人免费| 日本福利视频网站| 乱熟女高潮一区二区在线| 午夜在线视频免费观看| 国产精品中文久久久久久| 国内自拍第二页|