国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

JSP 的模板

JSP 的模板

更新時(shí)間:2022-05-13 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

By Scott Ferguson

引論
樣板的框架: Hello, World
Servlet 評(píng)論
展示留言板
留言板的模式
作為應(yīng)用屬性的留言板
留言板的邏輯
結(jié)論



引論

JSP的強(qiáng)大優(yōu)勢(shì)在于把一種應(yīng)用的商務(wù)邏輯和它的介紹分離開來。用 Smalltalk的面向?qū)ο蟮男g(shù)語(yǔ)來說, JSP鼓勵(lì)MVC(model-view-controller)的web應(yīng)用。JSP的classes 或 beans 是模型, JSP 是這個(gè)視圖, 而Servlet是控制器。

這個(gè)例子是一個(gè)簡(jiǎn)單的留言板。用戶登錄和留言。 It is also available in the Resin demos

Role Implementation
Model A GuestBook of Guests.
View login.jsp for new users
add.jsp for logged-in users.
Controller GuestJsp, a servlet to manage the state.


樣板的框架: Hello, World

GuestJsp的框架把 "Hello, World" 這個(gè)字符串傳給login.jsp頁(yè)面。這個(gè)框架為留言板設(shè)立結(jié)構(gòu)。具體細(xì)節(jié)將在下面補(bǔ)充。

這個(gè)例子被編譯后可以瀏覽到:

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

你可以看到這樣的頁(yè)面:

Hello, world

JSP模板是以Servlet的處理開始然后把處理結(jié)果傳給JSP頁(yè)進(jìn)行格式化。

Forwarding uses a Servlet 2.1 feature of the ServletContext, getRequestDispatcher(). The request dispatcher lets servlets forward and include any subrequests on the server. It's a more flexible replacements for SSI includes. The RequestDispatcher can include the results of any page, servlet, or JSP page in a servlet's page. GuestJsp will use dispatcher.forward() to pass control to the JSP page for formatting.

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);
}
}


The servlet and the jsp page communicate with attributes in the HttpRequest object. The skeleton stores "Hello, World" in the "message" attribute. When login.jsp starts, it will grab the string and print it.

Since Resin's JavaScript understands extended Bean patterns, it translates the request.getAttribute("message") into the JavaScript equivalent 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>



Servlet Review
For those coming to JSP from an ASP or CGI background, Servlets replace CGI scripts taking advantage of Java's strength in dynamic class loading. A servlet is just a Java class which extends Servlet or HttpServlet and placed in the proper directory. Resin will automatically load the servlet and execute it.

doc
index.html
login.jsp
add.jsp
WEB-INF
classes
jsp
GuestJsp.class
GuestBook.class
Guest.class
The url /servlet/classname forwards the request to the Servlet Invoker. The Invoker will dynamically load the Java class classname from doc/WEB-INF/classes and try to execute the Servlet's service method.

Resin checks the class file periodically to see if the class has changed. If so, it will replace the old servlet with the new servlet.

Displaying the Guest Book

The next step, after getting the basic framework running, is to create the model.

The GuestBook model
The guest book is straightforward so I've just included the API here. It conforms to Bean patterns to simplify the JavaScript. The same API will work for HashMap, file-based, and database implementations.

JSP files only have access to public methods. So a JSP file cannot create a new GuestBook and it can't add a new guest. That's the responsibility of the GuestJsp servlet.

jsp.Guest.java API package jsp;

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


Resin's JavaScript recognizes Bean patterns. So JSP pages using JavaScript can access getName() and getComment() as properties. For example, you can simply use guest.name and guest.comment

jsp.GuestBook.java API package jsp;

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


Resin's JavaScript also recognizes the iterator() call, so you can use a JavaScript for ... each to get the guests:

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



GuestBook as application attribute
To keep the example simple, GuestJsp stores the GuestBook in the application (ServletContext). As an example, storing data in the application is acceptable but for full-fledged applications, it's better just to use the application to cache data stored elsewhere.

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);
}


The JSP file itself is simple. It grabs the guest book from the application and displays the contents in a table. Normally, application objects need to be synchronized because several clients may simultaneously browse the same page. GuestJsp has taken care of synchronization before the JSP file gets called.

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



Guest book logic

The guest book logic is simple. If the user has not logged in, she sees comments and a form to log in. After login, she'll see the comments and a form to add a comment. login.jsp formats the login page and add.jsp formats the add comment page.

GuestJsp stores login information in the session variable.

Form Variable Meaning
action 'login' to login or 'add' to add a comment
name user name
password user password
comment comment for the guest book

Guest book logic ...

// 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 and add.jsp just append different forms to the display code in the previous 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>



Conclusion

The Resin demo shows a few ways to extend the guest book, including adding some intelligence to the form processing. However, as forms get more intelligent, even JSP templates become complicated. There is a solution: XTP templates.


--------------------------------------------------------------------------------

Home | Resin | Download | Sales | FAQ | Site Map
Copyright ? 1998-2000 Caucho Technology. All rights reserved.

Last modified: Sat, 11 Mar 2000 20:22:52 -0800 (PST) 

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        欧美乱妇23p| 狠狠色狠狠色综合系列| 日日骚欧美日韩| 日本精品一区二区三区高清 | 国产精品一区二区久久精品爱涩| 亚洲精品中文字幕在线观看| 成人深夜视频在线观看| 99视频在线精品| 香蕉久久一区二区不卡无毒影院| 在线观看免费成人| 亚洲国产精品综合小说图片区| 欧美日韩一级黄| 7777精品久久久大香线蕉| 日韩av在线发布| 中文字幕不卡在线观看| 欧美午夜不卡视频| 捆绑变态av一区二区三区| 中文字幕的久久| 日韩一区二区三区免费看| 国产精品77777竹菊影视小说| 精品国产99国产精品| 国产精品亚洲一区二区三区在线| 日韩三级.com| 国产成人鲁色资源国产91色综 | 欧美日韩成人综合天天影院 | 高清免费成人av| 亚洲欧美综合网| 日韩欧美一二区| 日本韩国一区二区三区| 久久99国产精品成人| 麻豆成人av在线| 亚洲视频免费看| 国产精品久久影院| 亚洲永久免费视频| 国产欧美一区二区三区沐欲 | 91女神在线视频| 久久超碰97人人做人人爱| 亚洲欧美另类在线| 国产欧美精品国产国产专区| 日韩一区二区三区四区| 欧日韩精品视频| 不卡av免费在线观看| 国产精品一区在线| 蜜桃一区二区三区在线观看| 亚洲一区二区四区蜜桃| 无码av免费一区二区三区试看| 中文字幕一区二区不卡| 久久精品亚洲麻豆av一区二区| 91麻豆精品91久久久久同性| 欧美唯美清纯偷拍| 欧美又粗又大又爽| 日本二三区不卡| 91黄色激情网站| 在线视频一区二区三区| 亚洲福利视频导航| 一区二区三区精品视频| 一区二区三区产品免费精品久久75| 国产精品视频一区二区三区不卡| 亚洲精品在线网站| 日韩欧美国产1| 精品电影一区二区| ww亚洲ww在线观看国产| 337p粉嫩大胆色噜噜噜噜亚洲| 香蕉久久一区二区不卡无毒影院| 国产精品麻豆欧美日韩ww| 国产农村妇女毛片精品久久麻豆| 国产亚洲福利社区一区| 美女视频网站久久| 精品在线免费视频| 美女精品自拍一二三四| 欧美国产日韩亚洲一区| 欧美日韩亚洲综合一区| 91麻豆免费看片| 成人黄色小视频| 成人97人人超碰人人99| av中文一区二区三区| 色域天天综合网| 欧美三级电影一区| 日韩欧美在线网站| 亚洲视频小说图片| 欧美变态tickling挠脚心| 精品国产髙清在线看国产毛片 | 在线综合亚洲欧美在线视频| 69成人精品免费视频| 精品国产露脸精彩对白| 国产精品乱码久久久久久| 亚洲欧美经典视频| 美女视频黄 久久| 国产激情视频一区二区在线观看| 国产麻豆欧美日韩一区| 国产一区二区三区美女| 99精品桃花视频在线观看| 欧美视频你懂的| 91精品国产免费久久综合| 精品国精品国产| 亚洲人精品一区| 日韩av一区二区三区四区| 欧美日韩国产免费| 亚洲欧美另类小说| 久久9热精品视频| 色欧美片视频在线观看| 欧美sm美女调教| 亚洲最大成人网4388xx| 韩国av一区二区三区在线观看| 99麻豆久久久国产精品免费优播| 成人中文字幕电影| 精品亚洲欧美一区| 成人av免费在线播放| 99久久综合99久久综合网站| 欧美日韩精品一区二区三区蜜桃| 午夜天堂影视香蕉久久| 成人一区二区三区视频在线观看 | 亚洲精品国产第一综合99久久| 免费成人在线观看视频| 色哟哟亚洲精品| 国产精品国产三级国产a | 精品国产成人系列| 天堂午夜影视日韩欧美一区二区| 亚洲精品免费在线| 狠狠狠色丁香婷婷综合激情| 91丨porny丨在线| 精品国精品国产| 亚洲3atv精品一区二区三区| 白白色 亚洲乱淫| 久久久久久97三级| 久久99精品国产.久久久久久 | 成人三级在线视频| 日韩午夜av电影| 婷婷成人激情在线网| 欧美色偷偷大香| 亚洲在线观看免费视频| 91麻豆精品一区二区三区| 亚洲欧美一区二区在线观看| 国产成人一区在线| 亚洲综合色成人| 91黄色激情网站| 国产精品高潮久久久久无| 欧美日韩日日夜夜| 亚洲欧美激情一区二区| 99re6这里只有精品视频在线观看| 欧美国产1区2区| 成人aa视频在线观看| 日韩一区欧美小说| 在线一区二区视频| 日韩电影一二三区| 亚洲精品在线三区| 成人亚洲精品久久久久软件| 自拍偷拍欧美精品| 欧美老人xxxx18| 国产在线播放一区三区四| 国产日产欧美精品一区二区三区| 91精品国产一区二区| 男人的天堂久久精品| 久久夜色精品国产噜噜av| 成人丝袜高跟foot| 午夜精品在线看| 在线亚洲欧美专区二区| 日本亚洲天堂网| 一区二区三区中文字幕电影| 亚洲精品成人天堂一二三| eeuss影院一区二区三区| 国产精品久久夜| 日韩电影在线一区| 丰满白嫩尤物一区二区| 欧美亚洲尤物久久| 7777精品伊人久久久大香线蕉| 久久久久国产精品麻豆ai换脸| 中文字幕中文字幕在线一区| 色欧美片视频在线观看 | 色综合天天狠狠| 婷婷激情综合网| 国产日产精品1区| 欧美色视频在线观看| 国产成人三级在线观看| 亚洲一区二区三区四区五区黄| 色哟哟在线观看一区二区三区| 午夜免费久久看| 国产精品看片你懂得| 欧美一区二区精美| 91免费观看在线| 国产精品中文字幕欧美| 欧美色精品在线视频| 国产在线精品一区二区三区不卡| 亚洲色图制服丝袜| 久久久久久久综合| 91精品国产综合久久福利软件| caoporn国产一区二区| 激情文学综合插| 日韩高清一级片| 国内国产精品久久| 91精品福利在线一区二区三区| 91丨九色丨尤物| 波多野结衣在线一区| 国产乱码精品一区二区三区五月婷| 午夜精品久久久久久久久| 亚洲精品videosex极品| 国产精品久久久久久久浪潮网站| 久久午夜国产精品| 精品国产一区a| 精品乱人伦小说|