当前位置:文档之家› 使用struts+spring+hibernate组装你的web应用架构

使用struts+spring+hibernate组装你的web应用架构

使用struts+spring+hibernate组装你的web应用架构
使用struts+spring+hibernate组装你的web应用架构

使用struts+spring+hibernate组装你的web应用架构其实,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情。在构架的一开始就有很多事情要考虑。从高处看,摆在开发者面前有很多问题:要考虑是怎样建立用户接口?在哪里处理业务逻辑?怎样持久化的数据。而这三层构架中,每一层都有他们要仔细考虑的。各个层该使用什么技术?怎样的设计能松散耦合还能灵活改变?怎样替换某个层而不影响整体构架?应用程序如何做各种级别的业务处理(比如事务处理)?

构架一个Web应用需要弄明白好多问题。幸运的是,已经有不少开发者已经遇到过这类问题,并且建立了处理这类问题的框架。一个好框架具备以下几点:减轻开发者处理复杂的问题的负担("不重复发明轮子");内部有良好的扩展;并且有一个支持它的强大的用户团体。好的构架一般有针对性的处理某一类问题,并且能将它做好(Do One Thing well)。然而,你的程序中有几个层可能需要使用特定的框架,已经完成的UI(用户接口) 并不代表你也可以把你的业务逻辑和持久逻辑偶合到你的UI部分。举个例子,你不该在一个Controller(控制器)里面写JDBC代码作为你的业务逻辑,这不是控制器应该提供的。一个UI 控制器应该委派给其它给在UI范围之外的轻量级组件。好的框架应该能指导代码如何分布。更重要的是,框架能把开发者从编码中解放出来,使他们能专心于应用程序的逻辑(这对客户来说很重要)。

这篇文章将讨论怎样结合几种著名的框架来使得你的应用程序做到松弛耦合。

如何建立你的架构,并且怎样让你的各个应用层保持一致。?如何整合框架以便让每个层在以一种松散偶合的方式彼此作用而不用管低层的技术细节?这对我们来说真是一种挑战。这里讨论一个整合框架的策略( 使用3 种受欢迎的开源框架) :表示层我们用Struts;业务层我们用Spring;而持久层则用Hibernate。你也可以用其他FrameWork替换只要能得到同样的效果。见图1 (框架组合示意图)

应用程序的分层

大部分的Web应用在职责上至少能被分成4层。这四层是:presentation(描述),persistence (持久),business(业务)和domain model(域模块)。每个层在处理程序上都应该有一项明确的责任, 而不应该在功能上与其它层混合,并且每个层要与其它层分开的,但要给他们之间放一个通信接口。我们就从介绍各个层开始,讨论一下这些层应该提供什么,不应该提供什么。

表示层(The Presentation Layer)

一般来讲,一个典型的Web应用的的末端应该是表示层。很多Java发者也理解Struts所提供的。象业务逻辑之类的被打包到org.apache.struts.Action.,因此,我们很赞成使用Struts 这样的框架。

下面是Struts所负责的:

* 管理用户的请求,做出相应的响应。

* 提供一个Controller ,委派调用业务逻辑和其它上层处理。

* 处理异常,抛给Struts Action

* 为显示提供一个模型

* UI验证。

以下条款,不该在Struts显示层的编码中经常出现。它们与显示层无关的。

* 直接的与数据库通信,例如JDBC调用。

* 与你应用程序相关联的业务逻辑以及校验。

* 事物管理。

在表示层引入这些代码,则会带来高偶合和麻烦的维护。

持久层(The Persistence Layer)

典型的Web应用的另一个末端是持久层。这里通常是程序最容易失控的地方。开发者总是低估构建他们自己的持久框架的挑战性。系统内部的持续层不但需要大量调试时间,而且还经常缺少功能使之变得难以控制,这是持久层的通病。还好有几个ORM开源框架很好的解决了这类问题。尤其是Hibernate。Hibernate为java提供了OR持久化机制和查询服务, 它还给已经

熟悉SQL和JDBC API 的Java开发者一个学习桥梁,他们学习起来很方便。Hibernate的持久对象是基于POJO和Java collections。此外,使用Hibernate并不妨碍你正在使用的IDE。

请看下面的条目,你在持久层编码中需要了解的。

* 查询对象的相关信息的语句。Hibernate通过一个OO查询语言(HQL)或者正则表达的API来完成查询。HQL非常类似于SQL-- 只是把SQL里的table和columns用Object和它的fields代替。你需要学习一些新的HQL语言;不管怎样,他们容易理解而文档也做的很好。HQL是一种对象查询的自然语言,花很小的代价就能学习它。

* 如何存储,更新,删除数据库记录。

* 象Hibernate这类的高级ORM框架支持大部分主流数据库,并且他们支持Parent/child 关系,事物处理,继承和多态。

业务层(The Business Layer)

一个典型Web应用的中间部分是业务层或者服务层。从编码的视角来看,这层是最容易被忽视的一层。而我们却往往在UI层或持久层周围看到这些业务处理的代码,这其实是不正确的,因为它导致了程序代码的紧密偶合,这样一来,随着时间推移这些代码很难维护。幸好,针对这一问题有好几种Frameworks存在。最受欢迎的两个框架是Spring和PicoContainer。这些为也被称为microcontainers,他们能让你很好的把对象搭配起来。这两个框架都着手于‘依赖注射'(dependency injection)(还有我们知道的‘控制反转'Inversion of Control=IoC)这样的简单概念。这篇文章将关注于Spring的注射(译注:通过一个给定参数的Setter方法来构造Bean,有所不同于Factory), Spring还提供了Setter Injection(type2),Constructor Injection(type3)等方式供我们选择。Spring把程序中所涉及到包含业务逻辑和Dao的

Objects——例如transaction management handler(事物管理控制)、Object Factoris(对象工厂)、service objects(服务组件)——都通过XML来配置联系起来。

后面我们会举个例子来揭示一下Spring 是怎样运用这些概念。

业务层所负责的如下:

* 处理应用程序的业务逻辑和业务校验

* 管理事物

* 允许与其它层相互作用的接口

* 管理业务层级别的对象的依赖。

* 在显示层和持久层之间增加了一个灵活的机制,使得他们不直接的联系在一起。

* 通过揭示从显示层到业务层之间的Context来得到business services。

* 管理程序的执行(从业务层到持久层)。

域模块层(The Domain Model Layer )

既然我们致力于的是一个不是很复杂的Web的应用,我们需要一个对象集合,让它在不同层之间移动的。域模块层由实际需求中的业务对象组成比如, OrderLineItem , Product等等。

开发者在这层不用管那些DTOs,仅关注domain object即可。例如,Hibernate允许你将数据库中的信息存放入对象(domain objects),这样你可以在连接断开的情况下把这些数据显示到UI层。而那些对象也可以返回给持续层,从而在数据库里更新。而且,你不必把对象转化成DTOs(这可能似的它在不同层之间的在传输过程中丢失),这个模型使得Java开发者能很自然运用OO,而不需要附加的编码。

一个简单例子

既然我们已经从全局上理解这些组件。现在就让我们开始实践吧。我们还是用Struts,Spring 和Hibernate。这三个框架已经被描述够多了,这里就不重复介绍了。这篇文章举例指导你如何使用这三个框架整合开发, 并向你揭示一个请求是如何贯穿于各个层的。(从用户的加入一个Order到数据库,显示;进而更新、删除)。

从这里可以下载到程序程序原代码(download)

既然每个层是互相作用的,我们就先来创建domain objects。首先,我们要在这些Object中要确定那些是需要持久化的,哪些是提供给business logic,那些是显示接口的设计。下一步,我们将配置我们的持久层并且定义好Hibernate的OR mappings。然后定义好Business Objects。有了这些组成部分之后,我们将使用Spring把这些连接起来。最后,我们提供给Spring一个持久层,从这个持久层里我们可以知道它是如何与业务逻辑层(business service layer)通信的,以及它是怎样处理其他层抛出的异常的。。

域对象层(Domain Object Layer)

这层是编码的着手点,我们的编码就从这层开始。例子中Order 与OrderItem 是一个One—To—Many的关系。下面就是Domain Object Layer的两个对象:

· com.meagle.bo.Order.java: 包含了一个Order的概要信息

· com.meagle.bo.OrderLineItem.java: 包含了Order的详细信息

好好考虑怎你的package命名,这反应出了你是怎样分层的。例如domain objects在程序中可能打包在com.meagle.bo内。更详细一点将打包在com. meagle.bo的子目录下面。business logic应该从com.meagle.serice开始打包,而DAO 对象应该位于

com.meagle.service.dao.hibernate。反应Forms和Actions的持久对象(presentation classes)应该分别放在com.meagle.action和com.meagle.forms包。准确的给包命名使得你的classes很好分割并且易于维护,并且在你添加新的classes时,能使得程序结构上保持上下一致。

持久层的配置(Persistence Layer Configuration)

建立Hibernate的持久层需要好几个步骤。第一步让我们把BO持久化。既然Hibernate 是通过POJO工作的,因此Order和OrderLineItem对象需要给所有的fileds 加上getter,setter方法。Hibernate通过XML文件来映射(OR)对象,以下两个xml文件分别映射了Order 和OrderItem对象。(这里有个叫XDoclet工具可以自动生成你的XML影射文件)

- Order.hbm.xml

- OrderLineItem.hbm.xml

你可以在WebContent/WEB-INF/classes/com/meagle/bo目录下找到这些xml文件。

Hibernate的

[urlhttps://www.doczj.com/doc/a06816904.html,/hib_docs/api/net/sf/hibernate/SessionFactory.html] SessionFactory [/url]是用来告诉程序应该与哪个数据库通信,该使用哪个连接池或使用了DataSource,应该加载哪些持久对象。而Session接口是用来完成Selecting,Saving,Delete和Updating这些操作。后面的我们将讲述SessionFactory和Session是怎样设置的。

业务层的配置(Business Layer Configuration)

既然我们已经有了domain objects,接下来我们就要business service objects了,用他们来执行程序的logic,调用持久层,得到UI层的requests,处理transactions,并且控制exceptions。为了将这些连接起来并且易于管理,我们将使用面向方面的SpringFramework。Spring 提供了控制倒置(inversion of control 0==IoC)和注射依赖设置(setter dependency injection)这些方式(可供选择),用XML文件将对象连接起来。IoC是一个简单概念(它允许一个对象在上层接受其他对象的创建),用IoC这种方式让你的对象从创建中释放了出来,降低了偶合度。

这里是一个没有使用IoC的对象创建的例子,它有很高偶合度。

图2.没有使用IoC. A 创建了B 和C

而这里是一个使用IoC的例子,这种方式允许对象在高层可以创建并进入另外一个对象,所以这样可以直接被执行。

图3. 对象使用了IoC。 A 包含了接受B,C的setter方法, 这同样达到了由A创建B,C 的目的。

建立我们的业务服务对象(Building Our Business Service Objects)

Business Object中的Setter方法接受的是接口,这样我们可以很松散的定义对象实现,然后注入。在我们的案例中,我们将用一个business service object接收一个DAO,用它来控制domain objects的持久化。由于在这个例子中使用了Hibernate,我们可以很方便的用其他

持久框架实现同时通知Spring 有新的DAO可以使用了。

在面向接口的编程中,你会明白"注射依赖"模式是怎样松散耦合你的业务逻辑和持久机制的:)。下面是一个接口business service object,DAO代码片段:

代码:

public interface IOrderService {

public abstract Order saveNewOrder(Order order)

throws OrderException,

OrderMinimumAmountException;

public abstract List findOrderByUser(

String user)

throws OrderException;

public abstract Order findOrderById(int id)

throws OrderException;

public abstract void setOrderDAO(

IOrderDAO orderDAO);

}

注意到这段代码里有一个setOrderDao(),它就是一个DAO Object设置方法(注射器)。但这里并没有一个getOrderDao的方法,这不必要,因为你并不会在外部访问这个orderDao。这个DAO Objecte将被调用,和我们的persistence layer 通信。我们将用Spring把DAO Object 和business service object搭配起来的。因为我们是面向接口编程的,所以并不需要将实现类紧密的耦合在一起。

接下去我们开始我们的DAO的实现类进行编码。既然Spring已经有对Hibernate的支持,那这个例子就直接继承HibernateDaoSupport类了,这个类很有用,我们可以参考HibernateTemplate(它主要是针对HibernateDaoSupport的一个用法,译注:具体可以查看Srping 的API)。下面是这个DAO接口代码:

代码:

public interface IOrderDAO {

public abstract Order findOrderById(

final int id);

public abstract List findOrdersPlaceByUser(

final String placedBy);

public abstract Order saveOrder(

final Order order);

}

我们仍然要给我们持久层组装很多关联的对象,这里包含了HibernateSessionFactory 和TransactionManager。Spring 提供了一个HibernateTransactionManager,他用线程捆绑了一个Hibernate Session,用它来支持transactions(请查看ThreadLocal) 。

下面是HibernateSessionFactory 和HibernateTransactionManager:的配置:代码:

class="org.springframework.orm.hibernate.

LocalSessionFactoryBean">

com/meagle/bo/Order.hbm.xml

com/meagle/bo/OrderLineItem.hbm.xml

net.sf.hibernate.dialect.MySQLDialect

false

C:/MyWebApps/.../WEB-INF/proxool.xml

spring

class="org.

springframework.

orm.

hibernate.

HibernateTransactionManager">

可以看出:每个对象都可以在Spring 配置信息中用标签引用。在这里,mySessionFactory引用了HibernateSessionFactory,而myTransactionManager引用了HibernateTransactionManage。注意代码中myTransactionManger Bean有个sessionFactory属性。HibernateTransactionManager有个sessionFactory setter 和getter方法,这是用来在Spring启动的时候实现"依赖注入" (dependency injection)的。在sessionFactory 属性里引用mySessionFactory。这两个对象在Spring容器初始化后就被组装了起来了。这样的搭配让你从单例(singleton objects)和工厂(factories)中解放了出来,降低了代码的维护代价。mySessionFactory.的两个属性,分别是用来注入mappingResources 和hibernatePropertes的。通常,如果你在Spring之外使用Hibernate,这样的设置应该放在hibernate.cfg.xml中的。不管怎样,Spring提供了一个便捷的方式-----在Spring内部配置中并入了Hibernate的配置。如果要得到更多的信息,可以查阅Spring API。

既然我们已经组装配置好了Service Beans,就需要把Business Service Object和DAO也组装起来,并把这些对象配到一个事务管理器(transaction manager)里。

在Spring中的配置信息:

代码:

class="org.

springframework.

transaction.

interceptor.

TransactionProxyFactoryBean">

PROPAGATION_REQUIRED,readOnly,-OrderException

PROPAGATION_REQUIRED,-OrderException

class="com.

meagle.

service.

spring.

OrderServiceSpringImpl">

class="com.

meagle.

service.

dao.

hibernate.

OrderHibernateDAO">

图4 是我们对象搭建的一个提纲。从中可以看出,每个对象都联系着Spring,并且能通过Spring注入到其他对象。把它与Spring的配置文件比较,观察他们之间的关系

图4. Spring就是这样基于配置文件,将各个Bean搭建在一起。

这个例子使用一个TransactionProxyFactoryBean,它定义了一个setTransactionManager()。这对象很有用,他能很方便的处理你申明的事物还有Service Object。你可以通过transactionAttributes属性来定义怎样处理。想知道更多还是参考TransactionAttributeEditor吧。

TransactionProxyFactoryBean 还有个setter. 这会被我们Business service object (orderTarget)引用,orderTarget定义了业务服务层,并且它还有个属性,由setOrderDAO()引用。这个属性

Spring 和Bean 的还有一点要注意的:bean可以以用两种方式创造。这些都在单例模式(Sington)和原型模式(propotype)中定义了。默认的方式是singleton,这意味着共享的实例将被束缚。而原形模式是在Spring用到bean的时候允许新建实例的。当每个用户需要得到他们自己Bean的Copy时,你应该仅使用prototype模式。(更多的请参考设计模式中

的单例模式和原形模式)

提供一个服务定位器(Providing a Service Locator)

既然我们已经将我们的Serices和DAO搭配起来了。我们需要把我们的Service显示到其他层。这个通常是在Struts或者Swing这层里编码。一个简单方法就是用服务定位器返回给Spring context 。当然,可以通过直接调用Spring中的Bean来做。

下面是一个Struts Actin 中的服务定位器的一个例子。

代码:

public abstract class BaseAction extends Action {

private IOrderService orderService;

public void setServlet(ActionServlet

actionServlet) {

super.setServlet(actionServlet);

ServletContext servletContext =

actionServlet.getServletContext();

WebApplicationContext wac =

WebApplicationContextUtils.

getRequiredWebApplicationContext(

servletContext);

this.orderService = (IOrderService)

wac.getBean("orderService");

}

protected IOrderService getOrderService() {

return orderService;

}

}

UI 层配置(UI Layer Configuration)

这个例子里UI层使用了Struts framework. 这里我们要讲述一下在给程序分层的时候,哪些是和Struts部分的。我们就从一个Struts-config.xml文件中的Action的配置信息开始吧。

代码:

struts-config.xml file.

type="com.meagle.action.SaveOrderAction"

name="OrderForm"

scope="request"

validate="true"

input="/NewOrder.jsp">

Save New Order

path="/NewOrder.jsp"

scope="request"

type="com.meagle.exception.OrderException"/>

path="/NewOrder.jsp"

scope="request"

type="com.

meagle.

exception.

OrderMinimumAmountException"/>

SaveNewOrder 这个Action是用来持久化UI层里的表单提交过来Order的。这是Struts 中一个很典型的Action; 注意观察这个Action中exception配置,这些Exceptions也在Spring 配置文件(applicationContext-hibernate.xml)中配置了(就在business service object 的transactionAttributes属性里)。当异常在业务层被被抛出时,我们可以控制他们,并适当的显示给UI层。

第一个异常,OrderException,在持久层保存order对象失败的时候被触发。这将导致事物回滚并且通过BO把异常回传到Struts这一层。

第二个异常,OrderMinimumAmountException也同第一个一样。

搭配整和的最后一步通过是让你显示层和业务层相结合。这个已经被服务定位器(service locator)实现了(前面讨论过了),这里服务层作为一个接口提供给我们的业务逻辑和持久层。

SaveNewOrder Action 在Struts中用一个服务定位器(service locator)来调用执行业务方法的。方法代码如下:

JAVAWEB期末复习题

第1章WEB开发环境 (1)下列关于WEB开发说法正确的是。 ABCD A)Web是图形化的和易于导航的 B)Web与平台无关 C)Web是分布式的 D)Web 是动态的 (2)下列关于Tomcat说法正确的是。 ABCD A) Tomcat是一种编程语言 B) Tomcat是一种开发工具 C) Tomcat是一种编程思想 D) Tomcat是一种开编程规范 (3)下列关于Tomcat个目录说法错误的是。 E E) work目录——包含web项目示例,当发布web应用时,默认情况下把web 文件夹放于此目录下 (4)下列关于HTTP协议说法正确的是。 ABCDE A) HTTP是一种请求/响应式的协议 B) HTTP请求消息中Accept表示浏览器可接受的MIME类型 C) HTTP请求消息中Accept-Encoding表示浏览器能够进行解码的数据编码方式 D) HTTP请求消息中Accept-Language表示浏览器所希望的语言种类 E) HTTP请求消息中Host表示初始URL中的主机和端口。 (5)下列对于JSP说法中正确的是。ABCDE A) JSP是Sun公司推出的新一代站点开发语言 B) JSP完全解决了目前ASP、PHP的一个通病——脚本级执行 C) JSP将内容的生成和显示进行分离 D) JSP强调可重用的组件 E) JSP采用标识简化页面开发 第2章JSP编译指令 (1)下列关于JSP编译指令说法错误的是。 C C)编译指令向客户端产生任何输出 (2)下面关于page指令说法中错误的是。 B B)一个JSP页面只能包含一个page指令 (3)下面关于page指令的属性说法错误的是。 DE D)session属性制定此页面是否参与HTTP会话。默认值false E)errorpage属性指示当前页面是否为其他页的errorpage目标 (4)下列说法中正确的是。 ABDE A)include指令通知容器将当前的JSP页面中内嵌的、在指定位置上的资源内容包含 B)include指令中file属性指定要包含的文件名 D)Taglib指令允许页面使用者自定义标签 E)你必须在使用自定义标签之前使用<% @ taglib %>指令 (5)下列说法中错误的是。 B B)<%-- This comment will not be visible in the page source --%>会在客户端的HTML源代码中产生和上面一样的数据

JavaWeb综合笔试题(卷)

选择题(针对以下题目,请选择最符合题目要求的答案。针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分。1-50题,每题2分) 1)在Oracle中,假设需要从学员表(student)中查询学员的毕业时间(graduatetime)并按照年/月/日的格式输出,则以下SQL语句正确的是()。 (选择一项) a) SELECT EXTRACT(Y FROM s.graduatetime)||'/'|| EXTRACT(M FROM s.graduatetime)||'/'|| EXTRACT(D FROM s.graduatetime) FROM students; b) SELECT EXTRACT(YEAR s.graduatetime)||'/'|| EXTRACT(MONTH s.graduatetime)||'/'|| EXTRACT(DAY s.graduatetime) FROM students; c) SELECTEXTRACT(YEAR FROM s.graduatetime)||'/'|| EXTRACT(MONTH FROM s.graduatetime)||'/'|| EXTRACT(DAY FROM s.graduatetime) FROM students;

d) SELECT EXTRACT(YEAR(s.graduatetime))||'/'|| EXTRACT(MONTH(s.graduatetime))||'/'|| EXTRACT((DAYFROMs.graduatetime)) FROM students; 2)在Linux系统中,()命令可以用来分页查看文件的内容。(选择二项) a) more b) less c) cat d) tailf 3)查询新闻明细表(news_detail),要求在新闻列表页面展现新闻数据,每页显示5条数据(pageSize=5),前台提供参数:页码(pageNo),请补全下面分页sql语句()。注:mysql数据库 SELECT*FROMnews_detail ORDERBYcreateDateDESC______(1)_______(选择一项) a) LIMIT pageNo,pageSize b) LIMIT (pageNo-1),pageSize c) LIMIT (pageNo-1)*pageSize,pageSize d) LIMIT pageSize,(pageNo-1)*pageSize

javaWeb面试题(含答案)

1、jsp和servlet的区别、共同点、各自应用的围?? JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层. 2、cookie和session的作用、区别、应用围,session的工作原理??? Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。 Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。存储的数据量大,安全性高。占用服务端的存资源。 3、jstl是什么?优点有哪些?? JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。优点有: 1、在应用程序服务器之间提供了一致的接口,最大程序地提高了WEB应用在各应用服务器之间的移植。 2、简化了JSP和WEB应用程序的开发。 3、以一种统一的方式减少了JSP中的scriptlet代码数量,可以达到没有任何scriptlet 代码的程序。在我们公司的项目中是不允许有任何的scriptlet代码出现在JSP中。 4、允许JSP设计工具与WEB应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE 开发工具出现。 4、j2ee的优越性主要表现在哪些方面?MVC模式 a、 J2EE基于JAVA 技术,与平台无关 b、 J2EE拥有开放标准,许多大型公司实现了对该规支持的应用服务器。如BEA ,IBM,ORACLE

Javaweb练习题1(含答案)模板

Javaweb ?选择题 o 1. 页面中需要增加链接,正确的HTML代码是_A_____。 A. 百度 B. 百度 C. https://www.doczj.com/doc/a06816904.html, D. 百度 o 2. 以下选项中,哪个全部都是表格标签___ B___。 A.

B.
C.
D. 11 在JavaScript中根据变量的作用域可以分为____和____两种全局变量局部 变量 12 在浏览器的DOM中,根对象是______ window 13 表单对象是________对象的子对象 document 14 Div层的隐藏和显示主要是用到_________属性,该属性的值为_________时隐藏Div 层 Display none 15调试Servlet时,Eclipse要进入____________视图下 Debug 16 Servlet中会话跟踪技术的方案有_____、______、______和隐藏表单域技术。Cookie Session URL重写 17 JSP页面中的6个基本元素包括___________、___________、___________、 ___________、动作标签和注释。 指令声明表达式脚本 18 JSP页面在容器中运行需要经过3个过程:_____,_______和______ 编辑 翻译执行 19 JSP页面中常见的3种指令有:___________、______________和___________ page指令 include指令 taglib指令 20 JSP页面的Page指令中的____________属性用于设置脚本语言 language 21广义上来讲,满足______、______、______三个要求的Java类可以称为JavaBean 无参数构造方法属性私有属性具有公有的get 和set方法 22用于查找或者实例化一个JavaBean的动作名称为____,用于设置JavaBean的属性 的动作名称为_____,用于把请求转发到另一个页面的动作名称为______ jsp:useBean jsp:setProperty jsp:forward 23 param标准动作用于为其他动作标签提供附加参数信息,该动作通常可以与 ______、________等一起使用 24 JSP内置对象中主要用于输入输出功能的有______,________,________ request response out

javaweb期末复习知识点整理

1、Web应用概述 1.URL与URI URL: 统一资源定位器 URI:统一资源定位符 2.常见HTML标签 3.表单的处理 4.静态文档与动态文档的概念:静态文档是一种以文件的形式存放在服务器端的 文档,客户发出对该文档的请求,服务器返回这个文档。动态文档是指文档的 内容可根据需要动态生成,又可分为服务器端动态文档和客户端动态文档技术。 5.Servlet概念:服务器端小程序,是使用ServletAPI以及相关类编写的java程序, 主要用来扩展web服务器的功能。 6.处理404错误:查看给定的路径名是否正确,查看Servlet类文件是否在classes 目录下,查看web.xml文件内容是否正确,查看tomcat是否启动 2、Servlet技术模型 1.Servlet的API:javax.servlet包,javax.servlet.http包 Servlet接口及方法: 1)public void init(ServletConfig config):完成Servlet初始化并准备提供服务。 容器传给该方法一个ServletConfig类型的参数。 2)public void service(ServletRequest req,ServletResponse res)throw ServletException,IOException:对每个客户请求容器调用一次该方法,它允许 Servlet为请求提供响应。 3)public void destroy()该方法由容器调用,指示Servlet清除本身,释放请求的资源并准备结束服务。 4)public ServletConfig getServletConfig()返回关于Servlet的配置信息,如传递给init()方法的参数。 5)public String getServletInfo()返回关于Servlet的信息,如作者,版本及版权信息。 ServleConfig接口作用及方法 HttpServlet类:新的service方法,doGet,doPost HttpServletRequest接口及常用方法 HttpServletResponse接口及常用方法 2.Servlet的开发步骤 编写一个Servlet类 编译 部署 (1)在tomcat的虚拟目录下,创建Web目录 (2)将编译好的.class文件复制到Web目录的WEB-INF\classes目录 (3)修改配置文件WEB-INF\web.xml (4)启动tomcat 运行

文本预览