仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 532|回复: 11
打印 上一主题 下一主题

[学习教程] JAVA网页设计Resin中JSP的典范

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:27:36 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点jsByScottFerguson
Blueski编译

目次以下:
1引论
2典范的框架:Hello,World
3Servlet批评
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

GuestJspservlet的框架把"Hello,World"这个字符串传给login.jsp页面。这个框架为留言本设立布局。详细细节将鄙人面增补。

这个例子被编译后能够扫瞄到:

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

你能够看到页面上有如许的显现:Hello,world

JSP模板是以Servlet的处置入手下手然后把处置了局传给JSP页举行格局化。

以下利用了一个Servlet2.1ServletContext的特征getRequestDispatcher()。
哀求的调剂器在服务器上让servlets间接向前传送并包含了任何大概的子哀求。对SSI包括来讲这是一个更天真的代替做法。
在servlet文件中哀求的调剂器能够包括任何页面,servlet,或JSP的了局。GuestJsp将利用dispatcher.forward()来将把持传给JSP页举行格局化。

GuestJsp.java:Skeletonpackagejsp.GuestJsp;

importjava.io.*;
importjava.util.*;

importjavax.servlet.*;
importjavax.servlet.http.*;

/**
*GuestJspisaservletcontrollinguser
*interactionwiththeguestbook.
*/
publicclassGuestJspextendsHttpServlet{
/**
*doGethandlesGETrequests
*/
publicvoiddoGet(HttpServletRequestreq,
HttpServletResponseres)
throwsServletException,IOException
{
//Savethemessageintherequestforlogin.jsp
req.setAttribute("message","Hello,world");

//gettheapplicationobject
ServletContextapp=getServletContext();

//selectlogin.jspasthetemplate
RequestDispatcherdisp;
disp=app.getRequestDispatcher("login.jsp");

//forwardtherequesttothetemplate
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<%@pagelanguage=javascript%>

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

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

3Servlet的温习

关于来自于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文件没法创立一个新的留言本大概增添一个新用户。
这是GuestJspservlet的义务。

jsp.Guest.javaAPIpackagejsp;

publicclassGuest{
Guest();
publicStringgetName();
publicStringgetComment();
}


Resin的JavaScript能读取Bean模子。以是利用JavaScript的JSP页面能够存取getName()和getComment()
作为属性。比方,你能够简化利用guest.name和guest.comment。

jsp.GuestBook.javaAPIpackagejsp;

publicclassGuestBook{
GuestBook();
voidaddGuest(Stringname,Stringcomment);
publicIteratoriterator();
}


Resin的JavaScript一样能够读取iterator()挪用,以是你可使用JavaScript用于...任何一个来获得用户:

for(varguestinguestBook){
...
}



GuestBook作为application属性
为了使得例子坚持复杂,GuestJsp在application(ServletContext)中存取GuestBook。作为例子,
在application中保留数据是能够承受的,但关于完整成熟的使用,最好仅利用application将数据放到别的中央。

jsp.GuestJsp.java//gettheapplicationobject
ServletContextapp=getServletContext();

GuestBookguestBook;

//TheguestBookisstoredintheapplication
synchronized(app){
guestBook=(GuestBook)app.getAttribute("guest_book");

//Ifitdoesntexist,createit.
if(guestBook==null){
guestBook=newGuestBook();
guestBook.addGuest("HarryPotter","Griffindorrules");
guestBook.addGuest("DracoMalfoy","Slytherinrules");
app.setAttribute("guest_book",guestBook);
}
}

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

//synchronizetheApplicationsotheJSPfile
//doesntneedtoworryaboutthreading
synchronized(app){
disp.forward(req,res);
}


JSP文件自己是复杂的。它从application猎取留言本并在表中显现内容。一般,
application对象必要同步,由于一些客户端大概同时浏统一页面。
GuestJsp在jsp文件被挪用之前当心处置了同步情形。

login.jsp:DisplayGuestBook<%@pagelanguage=javascript%>

<head>
<title>HogwartsGuestBook</title>
</head>

<bodybgcolor=white>

<h1>HogwartsGuestBook</h1>
<table>
<tr><tdwidth=25%><em>Name</em><td><em>Comment</em>
<%
varguestBook=application.attribute.guest_book

for(varguestinguestBook){
out.writeln("<tr><td>"+guest.name+"<td>"+guest.comment);
}
%>
</table>

</body>


HogwartsGuestBook
NameComment
HarryPotterGriffindorRules
DracoMalfoySlytherinRules


6留言本的划定规矩(logic)--作为使用属性的留言本

留言本的划定规矩是很复杂的。假如用户没有登录,他会看到一个提醒和登录表。
登录后他会看到提醒并在一个表中到场留言。login.jsp给出了登录的页面,add.jsp给出了
增添浮名的页面。

GuestJsp在session变量中保留了划定规矩信息。

实行login来登录或add来增添留言。个中
name:用户名
password:口令
comment:留言

7留言本划定规矩...

//namefromthesession
StringsessionName=session.getValue("name");

//actionfromtheforms
Stringaction=request.getParameter("action");

//namefromthelogin.jspform
StringuserName=request.getParameter("name");

//passwordfromthelogin.jspform
Stringpassword=request.getParameter("password");

//commentfromtheadd.jspform
Stringcomment=request.getParameter("comment");

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

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

Stringtemplate;
//ifnotloggedin,uselogin.jsp
if(session.getValue("name")==null)
template="login.jsp";
//ifloggedin,useadd.jsp
else
template="add.jsp";

RequestDispatcherdisp;
disp=app.getRequestDispatcher(template);

...


login.jsp和add.jsp仅加上了分歧forms在前一个section中显现代码。

login.jsp<%@pagelanguage=javascript%>
<head>
<title>HogwartsGuestBook:Login</title>
</head>
<bodybgcolor=white>

<h1>HogwartsGuestBook</h1>
<table>
<tr><tdwidth=25%><em>Name</em><td><em>Comment</em>
<%
varguestBook=application.attribute.guest_book

for(varguestinguestBook){
out.writeln("<tr><td>"+guest.name+"<td>"+guest.comment);
}
%>
</table>
<hr>

<formaction=GuestJspmethod=post>
<inputtype=hiddenname=actionvalue=login>
<table>
<tr><td>Name:<td><inputname=Name>
<tr><td>Password:<td><inputname=Passwordtype=password>
<tr><td><inputtype=submitvalue=Login>
</table>
</form>
</body>


8结论

Resin示例演示了扩大留言本的一些办法,包含到场一些智能的工具用于form处置。但是,因为forms获得更多的只能,即便是JSP模板也变得庞大化了。
有一个结论:XTP模板。


你通过从书的数量和开发周期及运行速度来证明:net和ruby要比java简单。
不帅 该用户已被删除
12#
发表于 2015-3-20 15:10:54 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
分手快乐 该用户已被删除
11#
发表于 2015-3-13 06:24:35 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
乐观 该用户已被删除
10#
发表于 2015-3-11 11:23:41 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
蒙在股里 该用户已被删除
9#
发表于 2015-3-3 14:59:19 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
小女巫 该用户已被删除
8#
发表于 2015-2-27 04:29:54 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
谁可相欹 该用户已被删除
7#
发表于 2015-2-9 07:34:24 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
老尸 该用户已被删除
6#
发表于 2015-2-7 20:57:27 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
飘灵儿 该用户已被删除
5#
发表于 2015-2-6 15:56:40 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
灵魂腐蚀 该用户已被删除
地板
发表于 2015-1-30 20:59:28 | 只看该作者
是一种使用者不需花费很多时间学习的语言
莫相离 该用户已被删除
板凳
发表于 2015-1-30 10:36:53 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
简单生活 该用户已被删除
沙发
发表于 2015-1-21 07:09:30 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-30 14:17

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表