通过代码示例跟我学J2EE JSP组件技术及应用实例(第4部分)
- 格式:pdf
- 大小:534.88 KB
- 文档页数:16
1.1跟我学UML建模工具StarUML(第8部分)——应用StarUML创建组件图的创建示例1.1.1UML中的组件图1、UML中的组件图(1)UML中的组件组件一般表示实际存在的、物理的物件,它是软件系统的一个物理单元,代表系统的一个物理实现块。
(2)组件图的作用1)描述软件组件以及组件之间的关系2)每个组件图只是系统实现视图的一个图形表示,只有各个组件组合起来,才能表示系统完整的实现视图(3)组件图中的三大组件从MVC的角度来看,在一个组件图中应该包括有边界组件、控制组件和实体组件三大部分。
下面为一个系统中的三大组件的关系图示。
(4)组件图的作用1)能够帮助客户理解最终的系统结构2)使开发实现工作有一个明确的目标3)组件图有利于帮助开发组中的其他人员(如帮助文档人员)理解系统(5)组件在UML中的图示组件图由组件、接口和组件之间的联系构成,其中的组件可以是源程序代码、二进制代码或可执行程序。
组件的图示为一个大矩形左嵌两个小矩形,在框内标注组件名字。
如图:注意:1)在组件图中,组件是通用类型而非实例。
要显示组件实例,请使用部署图。
2)组件一般提供对某一接口的实现,如上右图所示。
2、组件类型(1)各种主要类型的组件1)配置组件配置组件是可执行系统的基础,它是一个可执行系统必须的组件。
如在J2EE系统中的各种*.xml配置文件、文挡等。
2)工作产品组件工作产品组件是在软件开发阶段使用的组件,是配置组件的来源。
如数据文件和数据库表、源程序文件等。
它们并不直接构成可执行系统,而是系统开发过程中的产品。
3)执行组件执行组件是可运行系统产生的运行结果,如DLL、*.exe、Jar包文件等COM+、JavaBeans、DLL、ActiveX等都是执行组件。
(2)在Rose中的几种特殊的组件3、组件的联系----组件之间可以有依赖联系(1)含义1)一个组件的模型元素使用另一个组件的模型元素;2)通过接口实现依赖联系。
JSP学习笔记Java相关课程系列笔记之十笔记内容说明JSP(程祖红老师主讲,占笔记内容100%);目录一、JSP基础 (1)1.1什么是JSP (1)1.2为什么要使用JSP (1)1.3 JSP与Servlet的关系 (1)1.4如何写一个JSP文件 (1)1.5 JSP是如何运行的 (1)1.6隐含对象 (2)1.7指令 (2)1.8 JSP注释 (3)1.9案例:创建emplist.jsp页面,将表示逻辑交给JSP处理 (3)二、JSP标签和EL表达式 (4)2.1什么是JSP标签 (4)2.2 JSTL及其使用 (4)2.3什么是EL表达式 (4)2.4 EL表达式的使用 (4)三、JSTL中的几个核心标签 (7)3.1 if (7)3.2 choose (7)3.3 forEach (7)3.4 url (8)3.5 set (8)3.6 remove (8)3.7 catch (8)3.8 import (8)3.9 redirect (8)3.10 out (8)3.11 JSP标签是如何运行的 (8)3.12案例:将员工列表中的Java代码改为JSP标签,并添加分页 (9)四、自定义标签 (10)4.1如何写一个自定义标签 (10)4.2 JavaEE5.0中,如何使用EL表达式和JSTL (10)4.3案例:自定义标签 (10)4.4案例:修改之前员工列表中的日期显示 (11)五、MVC (13)5.1什么是MVC (13)5.2使用MVC的目的 (13)5.3如何使用MVC来开发一个Web应用程序(JavaEE) (13)5.4 MVC的优缺点 (13)5.5案例:简易贷款(贷款数小于余额数*10) (13)5.6修改5.5案例,使用户无法直接访问view.jsp页面 (15)1一、JSP基础1.1什么是JSPJSP(Java Server Page)是Java服务器端动态页面技术。
目录1.1通过代码示例跟我学Apache Commons-Email邮件组件 (2)1.1.1Apache Commons-Email组件 (2)1.1.2应用Commons-Email组件实现在线发送邮件 (4)1.1.3采用同步方式实现邮件发送——但有延迟感 (7)1.1.4采用异步方式实现邮件发送——但需要应用观察者设计模式 (12)1.1通过代码示例跟我学Apache Commons-Email邮件组件在线发送和接收邮件目前是企业应用系统开发中的通用的功能要求——比如,在线投递通知和商业广告、激活账户、发送与用户注册有关的信息等。
作者在下面的章节中通过在银行账户信息管理系统中具体实现在线邮件发送的功能为示例,为读者介绍如何在项目开发中应用Commons-Email组件。
1.1.1Apache Commons-Email组件1、Apache Commons-Email 组件的主要功能(1)Sun的JavaMail在Java程序中也可以实现发送邮件等方面的功能,因为Sun公司在J2EE系统库中发布了一套JavaMail类库以帮助Java开发人员在项目开发中实现邮件发送和接收功能。
JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。
它是Sun发布的用来处理email的API。
它可以方便地执行一些常用的邮件传输。
我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。
(2)Commons组件Commons-Email 组件也是基于JavaMail API 而构建的一套系统库,它提供有在Java程序中操作邮件系统的一套API类库。
下图4.9所示是Apache 网站上对Commons-Email 组件的功能介绍和主要的功能类的作用说明文字的局部截图。
图4.9 Apache 网站上对Commons-Email 组件的功能介绍和主要的功能类的作用2、下载Commons-Email组件系统库文件读者可以在Apache的官方网站/email/中下载与邮件系统有关的Commons-Email组件的系统库文件commons-email-1.1.jar,并将该系统库文件添加到项目的classpath环境变量中(对于Web应用系统而言,同样也还是放在WEB-INF/lib目录中)——请见下图所示的操作结果状态的局部截图。
上机一 WEB 应用开发环境配置内容:搭建JSP工作环境,主要包括Java JDK的安装、Tomcat服务器的安装和构建班级论坛的第一个JSP的index.jsp首页面。
1. 安装JDK的步骤如下找到jdk-6-windows-i586.exe 运行安装程序,设定安装路径为D:\学习软件\jdk1.6.0, 其余接受默认安装。
安装结束后就要配置环境变量,包括java_home,path和classpath的设置,操作步骤如下:1)用鼠标右击“我的电脑”,选择“属性”,→“高级”→“环境变量”→“系统变量”→“新建”→在“变量名”输入框中写入“java_home”,在“变量值”输入框中写入“D:\学习软件\jdk1.6.0”→点击“确定”。
2)选中“系统变量”查看是否有classpath项目,如果没有就点击“新建”,→如果已经存在就选中classpath选项,→点击“编辑”按钮,→然后在“变量名”中填写“classpath”,→在“变量值”中填写“.;D:\学习软件\jdk1.6.0\lib;D:学习软件\jdk1.6.0\jre\lib”。
在“path”设定时,“变量名”输入框填写“path”,“变量值”输入框填写“D:\学习软件:\jdk1.6.0\bin”3)打开命令提示符窗口,输入命令“java -version”,看到Java版本的信息,确定安装完成。
2. 安装Tomcat6步骤如下将apache-tomcat-6.0.18.zip从磁盘中解压到D:\学习软件盘符下在D:\学习软件\apache-tomcat-6.0.18\bin目录下双击“startup.bat”启动服务器,双击“shutdown.bat”关闭服务器。
在环境变量中添加“变量名”为“tomcat_home”,“变量值”为“D:\学习软件\apache-tomcat-6.0.18”的设定。
在启动服务器后,打开浏览器,在地址栏输入http://localhost:8080查看,如出现主页,则表示安装成功。
JSP程序设计实验报告范文(6个)--2022实验一实验时间:2022年10月16日实验项目目的和任务(1).了解动态网站开发的相关技术。
(2).理解Servlet的运行原理及生命周期。
(3).掌握Servlet的编写及部署。
(4).掌握Servlet对表单数据的处理。
(5).掌握Servlet对HTTP请求报头的处理实验内容:完成实践1.D.1、实践1.D.2根据第一章所学内容以及上机实践情况,在实验报告中完成以下问题。
(1)编写用户登录页面,使用Servlet处理表单数据,当用户提交数据正确时显示“登录成功”,否则提示“登录失败。
在实验报告中给出Servlet的关键代码,并将实验结果粘贴与此。
(2)画图解释Servlet生命周期的几个阶段。
实验二实验时间:2022年10月23日实验项目目的和任务:(1).掌握会话跟踪的相关技术。
(2).理解Cookie的原理,掌握Cookie的使用方法。
(3).理解Seion的原理,理解Seion的生命周期,熟练掌握Seion的使用方法。
(4).理解ServletConte某t接口,掌握该接口中定义的方法。
实验内容:完成实践二Servlet会话跟踪中的实践2.G..1、实践2.G..2两个实验。
在实验报告中完成以下问题。
使用Seion完成如下功能:a)登录页面login.html中输入用户名和密码,都不能为空。
b)CheckServlet.java对用户名和密码进行验证,如果用户名为“admin”,密码为“1234”,则跳转到主页,否则显示错误提示。
c)MainServlet.java作为主页,显示当前用户名,同时显示SeionID、Seion的创建时间和时效,并提供一个“注销”的超链接。
d)DetroySeion.java对当前用户进行注销,销毁Seion对象。
在实验报告中给出CheckServlet.java,MainServlet.java,DetroySeion.java的完整代码,并在实验结果一栏中粘贴主页MainServlet.java的截图。
第六章JSP开发业务应用一、分页查询●Sql server 分页查询步骤:1.查询出被查询页面以前所有的数据:select top 页数*每行显示的条数* from 表名2.使用子查询去掉前面查询出所有的数据Select * from 表名where id not in (select top 页数*每行显示的条数id from 表名)3.使用top 每页显示的条数取出要查询信息Select top 每页要显示的条数* from 表where id not in(select top 页数-1*每页要显示的条数order by id ) order by id●Oracle分页查询步骤:1.先查询出所有的信息:Select * from 表名2.查询到所有的数据重新定义一列查询出要查询页面数据以前的所有列Select rownum as r, 表的别名.* from (select * from 表名) 表的别名Where r<=每页显示的条数*要显示的页数3.使用条件筛选出要查询的列Select * from (Select rownum as r, 表的别名.* from (select * from 表名)表的别名Where rownum<=每页显示的条数*要显示的页数)where r>每页显示的条数*要显示的页数-1二、在JSP页面中使用分页查询案例:<%StuinfoDao dao = new StuinfoDaoImpl();//请求页数String nums = request.getParameter("num");if (nums == null) {//如果没有请求页数,默认访问第一页nums = "1";}int num = 1;try {num = Integer.parseInt(nums);} catch (Exception e) {}//每页显示数量int pageSize = 10;//总页数int pageCount = dao.findPageCount(pageSize);//判断页数是否合法if(num<1) num=1;if(num>pageCount) num=pageCount;//获取要当前页面要显示的数据List<Stuinfo> list = dao.findPage(num, pageSize);for (Stuinfo s : list) {%><tr><td><%=s.getId()%></td><td><%=s.getStuname()%></td><td><%=s.getStuno()%></td><td><%=s.getStusex()%></td><td><%=s.getStuage()%></td></tr><%}%></table>共<%=pageCount%>页第<%=num%>页<a href="list.jsp?num=1">首页</a><a href="list.jsp?num=<%=num-1%>">上一页</a><a href="list.jsp?num=<%=num+1%>">下一页</a><a href="list.jsp?num=<%=pageCount%>">尾页</a></center><%//在数据访问层中从数据库中获取总页数方法public int findPageCount(int pageSize) {String sql = "select count(*) from stuinfo ";Stuinfo s = null;ResultSet rs = db.query(sql);int res = 0;try {if (rs.next()) {res = rs.getInt(1);}} catch (SQLException e) {e.printStackTrace();} finally {db.close();}if (res % pageSize == 0) {return res / pageSize;} else {return res / pageSize + 1;}}//分页查询显示数据public List<Stuinfo> findPage(int page, int pageSize) {List<Stuinfo> list = new ArrayList<Stuinfo>();String sql = "select top " + pageSize+ " * from stuinfo where id not in (select top " + (page - 1)* pageSize + " id from stuinfo order by id) order by id ";ResultSet rs = db.query(sql);try {Stuinfo s = null;while (rs.next()) {s = new Stuinfo();s.setId(rs.getInt("id"));s.setStuname(rs.getString("stuname"));s.setStuno(rs.getString("stuno"));s.setStusex(rs.getString("stusex"));s.setStuage(rs.getString("stuage"));list.add(s);}} catch (SQLException e) {e.printStackTrace();} finally {db.close();}return list;}%>三、使用SmartUpload组件实现文件上传步骤:1.在项目中添加smartupload.jar文件。
1.1跟我学如何应用WebLogic WorkShop设计J2EE Web程序(第10部分)1.1.1利用WorkShop实现JAAS安全技术1、JAAS安全技术概述(1)产生的背景很多Java 程序员为他们的应用程序创建自己的安全模块。
但大多数这些的安全模块都是针对某一具体的应用程序的,这样在下一个应用程序需要安全保护时,程序员必须重新开始所有的设计工作---重复设计;同时自己构建自己的安全模块的另外一个缺点是,在应用程序变得越来越复杂时,安全需求也会变得很复杂。
因为当公司网络外部的用户需要访问你编写的应用程序或受安全保护的资源时,平衡应用程序的开放性和安全性之事就非常复杂。
你是否曾经需要为一个应用程序实现登录模块呢?如果你是一个比较有经验的程序员,相信你这样的工作做过很多次,而且每次都不完全一样。
你有可能把你的登录模块建立在Oracle数据库的基础上,也有可能使用的是NT的用户验证,或者使用的是LDAP目录级服务验证。
如果有一种方法可以在不改变应用程序级的代码的基础上支持上面提到的所有这一些安全机制,对于程序员来说一定是一件幸运的事------而SunJAAS可以帮助您实现上面的目标。
(2)安全框架的进化Java早期的安全框架技术强调的是保护客户端,即通过验证代码的来源和作者,以保护客户端的用户避免受到下载下来的代码的攻击,比如Sun 对Applet编程技术中所采用的“sandBox”技术和对客户端资源访问的限制、SercurityManager、代码签名和策略文件(Police File)等均为此目标。
因为在Java早期的各种应用中,Java程序的代码通常是作为远程代码被使用的,识别和保证代码的来源将大大地提高和增强用户使用网络的信心。
而随着客户/服务模式的应用不断地普及,不仅要保护客户免受攻击,同时也需要对客户端的访问和存取进行控制,从而使服务器端的程序免受攻击。
JAAS通过对运行程序的用户的进行验证和授权,从而达到保护服务器系统的目的。
J2EE核心技术(13种)在企业级应用中,都有一些通用企业需求模块,如数据库连接,邮件服务,事务处理等.既然很多企业级应用都需要这些模块,一些大公司便开发了自己的通用模块服务,即中间件.这样一来,就避免了重复开发,开发周期长和代码可靠性差等问题.但是,各公司的中间件不兼容的问题就出现了,用户无法将它们组装在一起为自己服务.于是,"标准"就应运而生了.J2EE就是基于Java技术的一系列标准.J2EE是Java2平台企业版(Java 2Platform Enterprise Edition),核心是一组技术规范与指南,其中所包含的各类组件,服务架构和技术层次,都有共同的标准及规格,让各种依云J2EE架构的不同平台之间,存在良好的兼容性.1.JDBC(JavaDatabase Connectivity)JDBC是以统一方式访问数据库的API.它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracle数据库专门写一个程序,为访问Sybase数据库又专门写一个程序等等,只需要用JDBC API写一个程序就够了,它可以向相应数据库发送SQL调用.JDBC是Java应用程序与各种不同数据库之间进行对话的方法的机制.简单地说,它做了三件事:与数据库建立连接--发送操作数据库的语句--处理结果.2.JNDI(JavaName and Directory Interface)JNDI是一组在Java应用中访问命名和目录服务的API.(命名服务将名称和对象联系起来,我们即可用名称访问对象.JNDI允许把名称同Java对象或资源关联起来,建立逻辑关联,而不必知道对象或资源的物理ID.)JNDI为开发人员提供了查找和访问各种命名和目录服务的通用,统一的接口,可访问的目录及服务如下表:利用JNDI的命名与服务功能可满足企业级API对命名与服务的访问,诸如EJB,JMS,JDBC 2.0以及IIOP上的RMI通过JNDI来使用CORBA的命名服务.JNDI和JDBC类似,都是构建在抽象层上.因为:它提供了标准的独立于命名系统的API,这些API构建在命名系统之上.这一层有助于将应用与实际数据源分离,因此不管是访问的LDAP,RMI还是DNS.也就是说,JNDI独立于目录服务的具体实现,只要有目录的服务提供接口或驱动,就可以使用目录.3.EJB(EnterpriseJavaBean)J2EE将业务逻辑从客户端软件中抽取出来,封装在一个组件中。
目录1.1通过代码示例跟我学J2EE JSP组件技术及应用实例(第4部分) (2)1.1.1体验JSP中的静态包含和动态包含之间的差别 (2)1.1.2体验JSP中的<jsp:useBean>的功能 (6)1.1.3体验JSP中的对象属性访问的动作标签的应用 (10)1.1.4体验JSP中的<jsp:forward>标签的用途 (13)1.1.5本章的课后作业 (16)1.1通过代码示例跟我学J2EE JSP组件技术及应用实例(第4部分)1.1.1体验JSP中的静态包含和动态包含之间的差别1、<jsp:include><jsp:include>动作元素用于在当前JSP页面中包含一个静态的或者动态的资源,运行效率略低于<%@include%>指令,但是可以动态增加内容,<jsp:include>动作元素格式如下。
<jsp:include page={"URL" | "<%= expression %>"} flush="true" />或者<jsp:include page={"URL" | "<%= expression %>"} flush="true"> <jsp:param name="paramName" value="paramValue" /> </jsp:include>其中:1)page={"URL" | "<%= expression %>"}为相对路径,或者代表相对路径的表达式。
2)flush="true"。
如果为true,缓冲区满时,将会被清空。
flush 的默认值为false。
2、将前面的authorInfo.jsp、navMenuBar.jsp和pageHead.jsp改变为独立的页面<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>页头</title><link href="/webcrm/css/commonStyle.css" rel="stylesheet" type="text/css" /></head><body><hr /><div id="pageFooter">版权所有:蓝梦网络信息资源中心,中国最优秀的J2EE平台开源社区,提供丰富的B2B 和B2C平台下的各种技术资料和在线服务<div id="footerCopyright"><A href="#" >北京ICP备0123456789号</A><A href="#" >网站统计</A><A href="#" >站长统计</A></div></div></body></html>注意在页面中正确地引用CSS文件。
3、在index.jsp中采用<jsp: include/>动作标签进行包含——当JSP页面被请求时引入指定文件<jsp:include page="/commonPage/pageHead.jsp" ></jsp:include><jsp:include page="/commonPage/navMenuBar.jsp" ></jsp:include>原来的页面完整的内容<jsp:include page="/commonPage/authorInfo.jsp" ></jsp:include>4、测试效果——http://127.0.0.1:8080/webcrm/index.jsp5、理解<jsp: include/>动作标签的包含是“结果的合并”而不是“内容的包含”其中出现有多个不同的独立页面的标签6、对其他的页面如userLogin.jsp 、userRegister.jsp也进行“包装”(1)userLogin.jsp页面的内容<jsp:include page="/commonPage/pageHead.jsp" ></jsp:include><jsp:include page="/commonPage/navMenuBar.jsp" ></jsp:include><%@ page pageEncoding="GB18030" %><%@ page import="java.util.Date" %><%@ page language="java" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>蓝梦集团CRM系统中的登录页面</title><link href="/webcrm/css/indexStyle.css" rel="stylesheet" type="text/css" /></head><body>蓝梦集团CRM系统中的登录页面,用户再在此加表单</body></html><jsp:include page="/commonPage/authorInfo.jsp" ></jsp:include>(2)执行后如果出现页面中的图片错误,可能是被包含文件中的图片等定位问题(3)正确地定位图片文件(4)用户注册页面内容7、其中的文件名也可以是由变量定义<%!String fileName="/userManage/HeHtml.jsp";%><jsp:include page="<%=fileName %>" />1.1.2体验JSP中的<jsp:useBean>的功能1、利用JavaBean实现可重用的Java代码(1)创建JavaBean组件的对象实例为了减少页面中的脚本的代码量,可以包装到JavaBean组件类中,而采用<jsp:useBean>动作标签创建它的对象实例,从而访问其中的方法。
<jsp:useBean>动作标签需要id 属性来定义该对象和class属性指定它的Java类名称,另一个是scope 属性——该对象在当前页面有效(scope="page")、为一个被请求的网页(scope="request")、会话期(scope="session")、或为整个Web应用程序(scope="application")等形式。
如果要使用一个已经创建好的Bean,那么这个ID的变量名必须与原来的ID变量名一致;如果目标Bean对象已经被创建出,<jsp:useBean>动作标签将不会被重复执行而导致重复地创建出Bean对象实例。
(2)正确地设置为session作用域对象如果Bean的scope属性定义为session,Bean实例作用于整个session生命周期。
但需要在创建该Bean的JSP文件中的<%@page%>指令中必须指定session=true,否则会导致致命错误发生。
此时可以在另一个页面中使用session对象访问该Bean,比如:session.getAttribute(name);2、创建标准(JDK)类的对象(1)采用new语句——声明标准的对象(JDK)<%!Date oneDate=new Date();public String getTodayDate(){return oneDate.toString();}%>采用脚本定义对象输出的现在的时间是:<%= getTodayDate() %><br>(2)采用动作标签<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <jsp:useBean id="otherDate" class="java.util.Date" scope="page" /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>修改用户信息</title></head><body>采用动作标签输出的现在的时间是:<%= otherDate.toString() %><br></body></html>测试一下:http://127.0.0.1:8080/webcrm/userManage/updateUserInfo.jsp(3)作用域解释1)application:服务器启动到停止的这段时间2)session:HTTP会发开始到结束的这段时间3)request:HTTP请求开始到结束的这段时间4)page:当前页面从打开到关闭这段时间3、也可以声明用户自己定义的类对象(1)在项目中添加一个类名称为UserInfoActionForm,包名称为com.px1987.webcrm.actionform类(2)添加下面的成员属性变量、并提供get/set方法String userName=null;String userPassWord=null;(3)最终的代码package com.px1987.webcrm.actionform;public class UserInfoActionForm {String userName=null;String userPassWord=null;public UserInfoActionForm() {}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}public String getUserPassWord() {return userPassWord;}public void setUserPassWord(String userPassWord) { erPassWord = userPassWord;}}(4)在页面中利用<jsp:useBean>标签创建该类的对象实例<jsp:useBean id="oneUserInfo" class="erInfoActionForm"scope="page" />等同于下面的效果<%erInfoActionForm oneUserInfo=new erInfoActionForm(); %>1.1.3体验JSP中的对象属性访问的动作标签的应用1、<jsp:setProperty>和<jsp:getProperty>标签(1)在页面中定义一个变量<%!String userNameString="yang";%>(2)采用脚本代码进行赋值操作<%!String userNameString="yang";%><%oneUserInfo.setUserName(userNameString);String userNameValue=oneUserInfo.getUserName();out.print("采用脚本语句输出的userName的值是:"+userNameValue+"<br>");%>(3)采用setProperty和getProperty动作标签——利用value属性,value可以是字符串,也可以是表达式。