java技术调研报告(推荐8篇)
特点:Java EE提供了一个框架(一套标准API)用于开发分布式结构的应用,这个框架的实际实现留给了第三方厂商。部分厂商只是专注于整个Java EE架构中的的特定组件,如Apache的Tomcat提供了对JSP和Servlet的支持,BEA系统公司则通过其WebLogic应用服务器产品为整个Java EE规范提供了一个较为完整的实现。
WebLogic服务器已使建立和部署伸缩性较好的分布式应用的过程大为简化。WebLogic和Java EE代你处理了大量常规的编程任务,包括提供事务服务、安全领域、可靠的消息、名字和目录服务、数据库访问和连接池、线程池、负载平衡和容错处理等。通过以一种标准、易用的方式提供这些公共服务,象WebLogic服务器这样的产品造就了具有更好伸缩性和可维护性的应用系统,使其为大量的用户提供了增长的可用性。功能: 1 在使用IP地址的一台计算机,或在使用集群捆绑在一起的多台计算机上,或在通过代理服务器管理的多台计算机上建立拥有相同域名的不同站点。部署基于J2EE 标准编写的服务器JAVA代码,包括servlet,JSP,JavaBean 和EJB。使用J2EE 扩展网络服务集成分布式系统,包括用于数据库连接的JDBC、用于信息传递的JMS、用于网络目录访问的JNDI、用于分布式事务处理的 JTA 和用于电子邮件处理的JavaMail。部署使用远程方法调用(RMI)的纯Java 分布式应用程序。通过使用RMI—IIOP(RMI over Internet Inter-ORB Protocol)协议部署近似CORBA的分布式应用系统。通过使用安全套接层(SSL)和Weblogic的内在支持为用户验证和授权,实现强大的安全性。通过将多个Weblogic服务器组成一个集群提供高可用性、负载均衡和容错能力。利用Java 的多平台能力在Windows NT/2000,Sun Solairs ,HP/UX 和其他Weblogic支持的操作系统上部署Weblogic服务器。在任一平台上,通过使用WebLogic直观的进行基于Web 的管理和监视工具可在网络上轻松管理一个或多个WebLogic服务器。
目前最新的版本是WebLogic Server 12c。
技术二.JDBC
JDBC(Java Database Connectivity)提供连接各种关系数据库的统一接口,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序。
类型1: JDBC-ODBC Bridge
在JDBC出现的初期,JDBC-ODBC桥显然是非常有实用意义的,通过JDBC-ODBC桥,开发人员可用JDBC来存取ODBC数据源。不足的是需要在客户端安装ODBC驱动程序,换句话说,必须安装Windows的某个版本。使用这一类型要牺牲JDBC的平台独立性。另外ODBC驱动程序还需具有客户端控制权限。类型 2:JDBC-native driver bridge
JDBC本地驱动程序桥提供了一种JDBC接口,它建立在本地数据库驱动程序的顶层,而不需要ODBC。JDBC驱动程序将对数据库的API从标准的JDBC调用转换为本地调用,使用此类型要牺牲JDBC的平台独立性,还要求在客户端安装客户端数据库驱动程序。类型 3:JDBC-network bridge
JDBC网络桥驱动程序不需要客户端数据库驱动程序。它使用网络上的中间件服务器来存取数据库。这种应用使得负载均衡、连接缓冲池和数据缓存等技术的实现有了可能。由于第3种类型往往只需要相对更少的下载时间,具有平台独立性,且不需要在客户端安装数据库驱动程序并取得控制权,所以很适合于Internet上的应用。
类型 4:Pure Java driver
通过使用一个纯Java数据库驱动程序来执行数据库的直接访问。此类型实际上在客户端实现了2层结构。要在N-层结构中应用,一个更好的做法是编写一个EJB,让它包含存取代码并提供一个对客户端具有数据库独立性的服务。
WebLogic服务器为一些通常的数据库提供了JDBC驱动程序,包括Oracle、Sybase、Microsoft SQL Server及Informix。它也带有一种JDBC驱动程序用于Cloudscape,这是一种纯Java的DBMS,WebLogic服务器中带有该数据库的评估版本。让我们看一个实例。
JDBC实例
在这个例子中假定已在Cloudscape中建立了一个PhoneBook数据库,且包含一个表名为 CONTACT_TABLE的表,它带有2个字段:NAME和PHONE。开始时先装载Cloudscape JDBC driver,并请求driver manager得到一个对PhoneBook Cloudscape数据库的连接。通过这一连接,可构造一个Statement对象并用它来执行一个简单的SQL查询。最后用循环来遍历结果集的所有数据,并用标准输出将NAME和PHONE字段的内容进行输出。
import java.sql.*;
public class JDBCExample{
public static void main(String args[]){
try{ Class.forName(“COM.cloudscape.core.JDBCDriver”);Connection conn = DriverManager.getConnection(“jdbc:cloudscape honeBook”);Statement stmt = conn.createStatement();String sql = “SELECT name, phone FROM CONTACT_TABLE ORDER BY name”;ResultSet resultSet = stmt.executeQuery(sql);String name, phone;while(resultSet.next()){
name = resultSet.getString(1).trim();
phone = resultSet.getString(2).trim();
System.out.println(name + “, ” + phone);}
}
catch(Exception e){ // Handle exception here e.printStackTrace();
}
} }
接着我们来看一看JDBC是如何在企业应用中的进行使用。
JDBC在企业级应用中的应用
以上实例其实是很基本的,可能有些微不足道,它假定了一个2层结构。在一个多层的企业级应用中,更大的可能是在客户端和一个EJB进行通信,该EJB将建立数据库连接。为了实现和改进可伸缩性和系统性能,WebLogic服务器提供了对连接缓冲池Connection pool的支持。
Connection pool减少了建立和释放数据库连接的消耗。在系统启动以后即可建立这样的缓冲池,此后如故再有对数据库的请求,WebLogic服务器可很简单地从缓冲池中取出数据。数据缓冲池可在WebLogic服务器的weblogic.properties文件中进行定义(可参考weblogic.properties文件中的例子,WebLogic服务器的文档中还有更详细的参考信息)。
在企业级应用的另一个常见的数据库特性是事务处理。事务是一组申明statement,它们必须作为同一个statement来处理以保证数据完整性,缺省情况下JDBC使用auto-commit事务模式。这可以通过使用Connection类的setAutoCommit()方法来实现。
技术三:EJB EJB是sun的服务器端组件模型,设计目标与核心应用是部署分布式应用程序。它们提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,如目录服务、事务管理、安全性、资源缓冲池及容错性。
EJB规范定义了3中基本的bean类型:会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。
Stateless session beans:提供某种单一服务而不维持任何状态,在服务器故障发生时无法继续存在,生命期相对较短。如它可能被用于执行温度转换计算。
Stateful session bean:提供了与客户端的会话交互,可存储状态从而代表一个客户。典型例子是购物车。不过在服务器故障时无法继续生存,生命期相对较短。每一个实例只用于一个单个的线程。
Entity beans: 提供了一致性数据的表示,通常存放在数据库中,在服务器故障发生后能继续存在。多用户情况下可使用EJB来表示相同的数据,Entity EJB的一个典型例子是客户的帐号信息。
尽管有以上的区别,所有的EJB还是有许多的共同之处。它们都处理home interface。它定义了一个客户端是如何创建与消亡EJB的。可在bean中对定义了客户端方法的远程接口进行调用;bean类则执行了主要的商务逻辑。
描述EJB的开发已经超出了本文的范围。但如果一个EJB已被开发或从第三方购买,它就须在应用服务器中进行发布。WebLogic Server 5.1带有一个EJB Deployer Tool来协助处理EJB的发布。当你使用EJB Deployer Tool的时候,你要定义客户端所用的JNDI名字来定位EJB。Deployer Tool将生成wrapper类来处理和容器的通信及在一个jar文件中把被请求的Java类绑定在一起。
一旦EJB被发布,客户端就可以使用它的JNDI名字来定位EJB。首先它必须得到一个到home接口的reference。然后客户端可使用该接口,调用一个create()方法来得到服务器上运行的某个bean实例的句柄;最后客户端可以使用该句柄在bean中调用方法。
EJB3.0 在EJB3.0规范中,写一个无状态会话bean(SLSB)只需要一个简单的Java文件并在类层加上@Stateless注释就可以了。这个bean可以扩展javax.ejb.SessionBean接口,但这些不是必须的。
一个SLSB不再需要home接口,没有哪类EJB再需要它了。Bean类可以实现业务接口也可以不实现它。如果没有实现任何业务接口,业务接口会由任意public的方法产生。如果只有几个业务方法会被暴露在业务接口中,这些方法可以使用@BusinessMethod注释。缺省情况下所有产 生的接口都是local(本地)接口,你也可以使用@Remote注释来声明这个接口为remote(远程)接口。
下面的几行代码就可以定义一个HelloWorldbean了。而在EJB2.1中同样的bean至少需要两个接口,一个实现类和几个空的实现方法,再加上部署描述符。
import javax.ejb.*;/** * A stateless session bean requesting that a remote business * interface be generated for it.*/;@Stateless;@Remote public class HelloWorldBean { public String sayHello(){ return “Hello World!!”;} }
EJB3.1
EJB3.1又一次引入了一系列新的特性,倾向于挖掘技术的潜力。依我来看,EJB3.1绝对是一个重要的发布版本,它将那些长期让人渴望的特性带到开发者面前,更加能够满足最新的企业应用程序开发,同时对EJB再次被人们采纳将做出巨大的贡献。EJB 3.1 最终发行版已经发布了。
EJB3.1架构模式相对于旧的架构模式有如下的一些扩展和针对API的一些简化: · 简化的本地模式让去除了本地的商务接口一样可达到session bean · 直接用war文件打包一个ejb组件不需要一个ejb-jar · 在Java SE环境中嵌入API执行EJB · 引入了可以提供简单的共享应用数据和支持一致性访问的Singleton session bean组件 · 自动创建EJB定时器
· 基于EJB定时表达式的日程表 · 异步session bean调用
一、Java技术的概述
Java平台由Java虚拟机 (Java Virtual Machine) 和Java应用编程接口 (Application Programming Interface、简称API) 构成。Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口, 可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后, Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次, 就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.4, 最近版本为Java1.7。
Java分为三个体系Java SE (Java2 Platform Standard Edition, java平台标准版) , Java EE (Java 2 Platform, Enterprise Edition, java平台企业版) , Java ME (Java 2 Platform Micro Edition, java平台微型版) 。
二、Java多线程创建
利用Java语言实现多线程应用程序的方法很简单。根据多线程应用程序继承或实现对象的不同可以采用两种方式:一种是应用程序的并发运行对象直接继承Java的线程类Threadt另外一种方式是定义并发执行对象实现Runnable接口。
通过继承Thread类创建线程。Thread类是JDK中定义的用于控制线程对象的类, 在该类中封装用于进行线程控制的方法。在这个途径中, 用户程序需要创建自己的Thread类的予类, 并在子类中重新定义自己的方法, 这个方法中包含了用户线程的操作。这样在用户程序需要建立自己的线程时, 只需要创建一个已定义好的Thread子类的实例就可以了。
通过Runnable接口创建线程。Runnable接口只有一个方法run () , 实现这个接口, 就必须要定义mn O方法的具体内容, 用户新建线程的操作也由这个方法来决定。定义好run () 方法之后, 当用户程序需要建立新线程时, 只要以这个实现了run () 方法的类为参数创建系统类Thread的对象, 就可以把用户实现的run () 方法继承过来。
三、Java在Intranet应用
Intranet是一种与外部世界安全隔离的内部网络, 它采用了Internet技术为它的信息底层服务。创建一个成功的Intranet应用程序应遵循以下四个步骤: (1) 确定需求。通过考察Intranet网的目的、范围、用户等因素来确定Intranet网设计和实现需求; (2) 规划。在确定了Intranet网的需求后, 则开始进行Intranet网的规划, 确定项目实施的时间和实施项目所必需的步骤, 对条件和需求进行实现性考查; (3) 设计。一般是通过确定Intranet网上软件硬件安装的位置与方式 (如主Web服务器安装的位置以及软件如何共享等) 来设计的; (4) 实现。在Intranet将根据需求、计划和设计来创建Intranet服务和开发应用程序。
四、Java在仿真系统中应用
控制类是一个抽象类, 是控制线程和对象的类, 其中线程控制是本文要重点说明的。在Java开发语言中, 除系统线程外的每个线程又隶属于另一个线程组, 可以在创建线程组时指定其隶属的线程组, 若没有指定, 则缺省的隶属于系统线程组。这样, 所有线程组组成了一棵以系统线程组为根的树。在基于Java的多线程仿真机制中, Java提供了线程组类, 线程组提供了控制、管理线程的所有方法, 为仿真模型中线程的管理提供了基础设施, 极大地方便了开发人员。
Java允许我们对一个线程组中所有的线程同时进行操作, 比如我们可以通过调用线程组的方法来设置其中所有线程的优先级, 也可以启动或阻塞其中的所有线程。例如, 运行模型时, 将产生的线程加入到其线程组中, 在主线程中, 仿真钟每推进一步, 就查看线程组中线程的启动时间, 如果有等于当前仿真时间的, 就启动, 使模型得到很好的控制。
结束语由于Java的跨平台性, 更为分布式的物流仿真提供了广阔的发展空问, 采用多线程机制不但能模拟并行的系统, 还能在系统中实现交互。如果在软件的设计中采用UML面向对象建模技术, 可使程序开发过程标准化、可视化, 代码编程也简单化。
参考文献
[1]詹跃东, 李莉, 史扬:基于UML和多线程的AGVS仿真工具设计[J], 系统仿真学报, 2005 (5) :871—874
[2]接鹏;基于Java的多线程离散事件仿真机制[J], 现代计算机, 2005 (5) :84—85
[3]叶俊民, 汪望珠:面向对象软件工程使用UML、模式、Java (第2版) [M], 北京:清华大学出版社, 2006
[4]白尚旺, 党伟超:Power Designer软件工程技术[M], 北京:电子工业出版社, 2005
关键词:Java程序;混淆技术;软件水印;防篡改;软件版权保护
中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 09-0000-02
人们对于计算机的依赖性随着软件技术的不断给人们带来便利和乐趣,使工作更富有主动性和操作性,但是任何事物在发展过程中都会有其负面效应与之相对,随着计算机软件应用量和种类的不断扩展,其使用安全问题便开始影响到人们的正确使用,并开始逐渐打击使用计算机的积极性,以及对于安全问题的无奈。主要攻击形式是通过对软件备份的破坏而直接将软件彻底摧毁,根据现有问题,当前的软件已经经过改良,重新调试,但是攻击则换角度也将攻击破解方式进行重组,使改良的部分无法发挥其作用,这样软件就不会得到应有的保护,依旧能够以非正规途径得到软件的任何数据,从而进行大面积的传播,这也就是为何当今软件盗版现象严重的途径之一。Java程序的出现,首先能够在网络上加快传播速度并且无客观條件可以轻松普及,但同时却能够通过无关性对产权进行有效的保护,不会轻易的被人盗用。
一、软件混淆技术基本原理
(一)基本释义
软件混淆技术是为了能够在软件受到侵害或是盗用时可以被保护的一种现代技术,软件技术首先咋1977年新西兰首次被提出,其实是将原有的程序的语言转换成一种密码语言,不能被一般的软件所识破的一种转换,并且研制出能够对这种转换进行评估的理论计算。转换的形式未变,只是在形式上保留原有的运行根组成,添加一些其他能够扰乱破坏和读取的程序代码。如今混淆技术开始不断的发展,诸多的被应用于产权的保护中,所谓的混淆就是通过语词的转变但保持其语义依然与之前相同,这就能保证软件在使用时功能是不变的,却能够防止逆向工程攻击和被静态分析。
(二)软件混淆技术的分类
当Java文件经过处理,在原有的基础上添加了其他程序代码成为类文件,这种类文件包括魔数( magic number) 、版本( version) 、常量池( constant pool ) 、访问标识( access flag s) 、(this)类、(super)类、接口( interfaces) 、域( fields) 、方法(methods) 和属性(attributes) 。
软件混淆主要通过类内混淆和类间混淆来根据不同的使用对象进行划分,类内混淆主要是克服(methods)中的code字段,而类间混淆却是针对多种类文件的综合体进行混淆处理,其主要的方式是合并和拆分相对的过程处理。
下面分别介绍两种混淆。
(1)、类内混淆
能够支持类内混淆的途径有数据混淆、控制混淆、切片混淆以及针对特定工具混淆四种。数据混淆是对数据的结构组成元素原有的书写方式进行修改,使其不再成为能够被认知的程序。主要有:变量存储和编码混淆、变量聚合混淆、顺序调整混淆、词法混淆以及移除注释和调试信息混淆。控制混淆是在信息传输过程中的保护,主要采取追踪定位等方式实时监测信息的状态,从而对其他袭击系统进行抵御。切片混淆,正常在一般的软件中问了能够让计算机更好的识读软件,所以增加了切片以帮助更好的理解,降低难度,而混淆了切片则能够使其首先无法有助于难度的下降,另外会造成对于程序的误导可能降低了或是更改了某些其他的程序,达到了增加难度混淆的目的。针对特定工具混淆软件为了能够起到保护作用,本身具有一定的反编译和反混淆的功能,会在一定的紧急时刻自动启动,而针对特定工具就是抑制了自动的传导,对于能够使软件本身内部之间的反编译都可以正常的进行,但是对于外部的反编译就不会在自动启动,这就是混淆的高级之处。相区别与前三者人的行为,针对特定工具混淆具有自动的功能针对的是自动化。如果能够与以上三种任意搭配就能够达到防住人机的共同目的。
(2)、类间混淆
类间混淆是合并拆分类文件而造成混淆的目的其中又有三种表现形式:类合并、类拆分、隐形类间混淆。类合并是要面对多个文件的自身组成的函数变量,通过将函数、变量的名称进行更改,注意在更改过程中一定不能同时出现两个或以上的名子,如果在合并中有参数同系统提示无法进行更改,则要为其中一个虚拟一个参数。另外如果合并文件中有继承关系的则需要在合并成功后加入一个布尔型的私有变量用于区分标识符相同的函数。类拆分则是观察现有的文件是否进行拆分,同时并作出相应的调整。对于结果是可拆分的类就是将A拆分为A1与A2,为了能够使A的要素都能够实现所以应该是A2处于继承A1关系。类型隐藏是通过接口来实现混淆,并且能够保证原文件并不需要改变接口,所以被称为隐形。相比类合并,类拆分和隐形类间混淆所用的时间相对较短。
二、软件混淆算法的攻击模式
(一)混淆算法的理论研究
混淆技术的提出者曾经试图将整个运行过程当做是一个虚拟黑箱来看,也就是说对于其他程序来说这就完全是另外一个软件和原软件无任何联系,从它的输入和输出的方式内容和代码都不同,这种在理论中是可以站的住的,但是在实际操作中会受到很多因素的限制,但在相对宽松的要求下还是可以实现混淆技术的使用。后来又根据该理论研究通过点函数来实现虚拟黑箱,总而言之其未来的研究空间还有很大,期待它的日益成熟。
(二)混淆算法的攻击模式
1.针对数据混淆算法的攻击
假定T 是对程序P 的一个单向的混淆变换,当且仅当从原始程序P 除去某些信息后,无法通过混淆后的程序Pc恢复出P。词法变换是最典型的不可逆混淆算法。虽然对于经过词法变换的程序进行攻击不可能恢复程序的原貌,但只要理解程序各个模块的含义就可能对程序产生威胁。例如根据无法被混淆的系统API 名称等关键字,攻击者可以推测出该模块的大致功能。
2.针对控制流混淆算法的攻击
目前,针对控制流混淆算法的主要攻击方法是动态分析。动态分析对大部分混淆算法的攻击作用,并阐述攻击模型. 对于控制流混淆而言, 变换后生成的程序中若存在始终不执行的分支,通过动态分析就能找到对破解程序有用的信息.针对控制流混淆,还有黑盒测试攻击, 该方法通过对程序进行黑盒测试,了解各个类及其函数的功能, 从而获取攻击者需要的信息. 这种方法对大多数的混淆变换均能加以攻击。同时,该方法也存在着一定的局限性: 黑盒测试缺乏自动分析工具,需要依靠大量的人力来完成分析工作。
三、对于混淆技术的未来预估
混淆技术是一种可用于抵制逆向工程和重组工程、对软件知识产权进行保护的程序变换技术。使用混淆技术虽然会使代码的效率有一定程度的降低,但是它的实现代价相对较小, 因而在近年引起了广泛的关注.由于混淆技术不改变程序功能的特性, 并且有些词法混淆算法甚至可以减小原程序的体积, 因此混淆技术得以在保护移动代码方面得到广泛的应用. 受移动平台资源的限制,今后混淆技术的研究方向一方面要加大混淆的力度,增加攻击者反编译的难度,另一方面也要考虑降低混淆算法对目标程序的运行负担。文献探讨了混淆技术在移动代理上的应用。目前保护软件知识产权的新技术主要有3种:混淆技术、软件水印技术和防篡改技术。这3种技术各有特长,将它们互相结合使用,可以给予目标软件更为可靠的保护,这也是目前研究的一个重要方向。对于混淆算法的评估、正确性验证以及如何研制高效可靠的混淆算法, 也是将来的发展方向之一。
四、总结
混淆技术是对软件进行的基础产权保护,为了能够增加破译的难度和代价,从而使产权盗版的情况发生率降低,同时还能提高软件水银的鲁棒性,有人提出将程序的编译混淆, 而不是混淆程序本身。但是该方法还有若干问题需要考虑。使软件的安全度进一步提升,给人们的使用带来了更多的福音,虽然该技术已经广泛运用也颇收到好评,在技术上依旧有大的发展前景,需要投入更多的研究力量。
参考文献:
[1]霍建雷,范训礼,房鼎益.Java标识符重命名混淆算法及其实现[J].计算机工程,2010,第1期
[2]咸星海.面向对象代码混淆技术研究及软件实现[J].中国科技博览,2010,第19期
[3]刁俊峰.软件安全中的若干关键技术研究[D],北京:北京邮电大学,2007
[4]李新良,罗戈夕.基于Java的代码混淆算法研究[J].湖南文理学院学报:自然科学版,2010,第3期
[5]霍建雷,范训礼.房鼎益,Java标识符重命名混淆算法及其实现[J].计算机工程,2010,第1期
[6]李婧.基于控制流混淆轉换的代码保护技术[J].计算机安全,2009,第8期
[7]袁征,冯雁,温巧燕,张华.构造一种新的混淆Java程序的不透明谓词[J].北京邮电大学学报,2007,第6期
课程实习报告
题目JSP 学习网站
专业计算机网络技术
班级网络092
学号200936615210
姓名邓章鹏
指导老师涂超
完成日期2011年12月31日
成绩
目录
一、程序设计整体说明…………………………………
1、实习目的…………………………………………
2、实习要求…………………………………………
3、功能结构…………………………………………
4、功能展示…………………………………………
5、数据库表…………………………………………
6、程序漏洞…………………………………………
二、程序可以改进的地方………………………………
三、程序部分源代码……………………………………
四、实习心得……………………………………………
五、参考文献……………………………………………
六、安装说明……………………………………………
一、程序设计整体说明
在本学期的JSP程序设计课程里我受益匪浅。但离正在熟练掌握JSP这门技术还是很远,希望在以后加强学习。JSP(JAVA SERVERPAGES)是一种动态网页技术标准。它可以无缝地运行在UNIX、LINUX、WINDOWS操作系统平台上。利用这一技术可以建立安全、跨平台的先进动态网站。
这课程实习程序里我选择利用SQLServer和Java 技术和Dreamweaver和myeclipse建立一个jsp学习网站提供给jsp爱好者使用。
我的网站分为四大模块:分别是今日最新鲜、名师讲堂、ie图书馆、bbs论坛。a)实习目的1.1了解jsp编程环境myeclipse
1.2熟悉jsp、javabean、serverlet
1.3熟悉编写一个web应用程序系统开发的完整过程
1.4完成一个基于jsp应用系统开发。
b)实习要求
在掌握jsp的基础上,自我选择web应用课题,完成资料收集、数据库设计、系统功能设计,最后实现一个较完整的web系统设计。
根据要求我选择了“jsp学习网站”的系统开发(主要是提供最新的jsp编程技术、视频教程、jsp图书在线阅读、bbs论坛、登录注册、空间、等综合型网站)
c)功能结构
d)功能展示
3.1主页
3.2登录界面
3.3注册界面
e)数据库表
Student表
f)程序漏洞
在编写代码的时候因为知识面有限和时间不充足,很多地方有以后更改。
A、整个网站的美工不是很好
B、注册没有验证码
C、还有些功能模块没有实现
二、程序可以改进的地方
A、加强图片的效果
B、注册加入验证码
C、Bbs模块要实现
D、后台管理应该加强
三、程序部分源代码
Index.jsp:<%@pagecontentType=“text/html;charset=GB2312”%>
<%@pageimport=“java.sql.*”%>
Transitional//EN”“http://1/DTD/xhtml1-transitional.dtd”>
var forEach = function(array, callback, thisObject){if(array.forEach){
array.forEach(callback, thisObject);
}else{
for(var i = 0, len = array.length;i < len;i++){ callback.call(thisObject,array[i], i, array);}
}
var st = new SlideTrans(“idContainer2”, “idSlider2”, 5, { Vertical: false });
var nums = [];
//插入数字
for(var i = 0, n = st._count-1;i <= n;){
(nums[i] = $(“idNum”).appendChild(document.createElement(“li”))).innerHTML= ++i;}
34“>ie图书馆
bbs论坛