JavaWeb开发技术方案宝典

javabean是遵循一系列规定的普通java类,这样的Java类可通过内省机制找到bean中的getXXX()和setXXX()方法,从而使应用程序来改变和获取bean中的属性。

jsp+javabean开发模式:javabean作为模型,jsp页面负责 接收用户请求并调用相应的javabean进行业务处理,在获取处理结果后,将请求转发到相应的jsp页面进行显示jsp页面中可使用bean标签设置或调用javabean。
方法一:应用Request对象获取表单数据
方法二:应用javabean封装表单数据

jsp+servlet+javabean开发模式:servlet是用java编写的服务端程序,主要功能是通过交互式地浏览和修改数据来生成动态内容。jsp中所说的servlet通常是指HttpServlet。单纯的servlet开发存在一些问题,因为HTML语句通过Servlet代码一句一句的输出来实现外观呈现,需要熟悉Servlet编程的程序员进行修改。增加了程序员负担。于是SUN公司推出了JSP技术,JSP技术在Servlet的基础上实现了HTML代码与动态内容的分离。此模式遵循了MVC设计模式,jsp作为视图,用来表现页面;servlet作为控制器,控制程序的流程并调用业务进行处理;javabean封装了业务逻辑。在该模式中,由Servlet接收用户请求,并根据请求调用相应的业务逻辑来处理。接着,Servlet会决定将返回哪个jsp页面来响应用户请求。在该jsp页面不应包含业务处理的代码,但允许从javabean中读取数据进行显示。
方式一:通过多个Servlet来处理不同请求
每个请求都对应一个Servlet,每个Servlet都要为其配置访问的路径。
方式二:通过一个Servlet处理不同请求
(1)在Servlet中通过if语句调用相应方法处理请求
为避免jsp页面中嵌入大量的java代码,可以通过自定义标签完成。过程 如下:
a.编写一个继承TagSupport类的程序来处理自定义标签
b.建立标签库描述文件(*.tld文件)
c.配置web.xml文件
d.在jsp页面中使用自定义标签
(2)在Servlet中调用自定义类处理请求
将处理每一个请求的操作都在一个单独的类中实现,这些类都实现同一个接口。接口中定义一个runOne()方法,实现该接口的类可在runOne()方法中编码实现处理请求的操作。runOne()方法带有三个参数,分别为HttpServletRequest、HttpServletResponse、HttpServlet。

Struts开发模式:Struts是基于java技术开发的JSP Web应用开发框架,遵循MVC设计模式,在Struts中,模型是由javabean或EJB组件组成;ActionServlet 、 RequestProcessor和struts辅助类用来实现控制器。ActionServlet会根据在Struts配置文件中的配置将控制权转交给相应的Action类,Action类是业务的代理,在Action类中可以调用模型组件或者编写其他的业务逻辑代码来完成一些具体的业务;Struts中的视图主要由jsp文件构成,在jsp文件中可应用struts标签或自定义标签表现模型组件中的数据或进行简单的处理。通常情况下,struts中的ActionForm Bean也被划分为视图。
1.struts处理多请求的开发模式存在两种方案
方案一:继承基本Action类实现多业务处理
该方案将处理每个请求的操作封装到单独的自定义方法中实现,这些方法都是与execute()方法具有相同的参数签名。同Servlet中调用自定义方法处理请求的技术原理相同。
在Struts中将请求转发给Struts的Action类,可通过将请求访问的路径在Struts配置文件中与这个Action类进行映射。struts配置文件通常存放在Web应用的WEB-INF目录下。若要自定义其存放位置,如“WEB-INF\config”目录,需要在web.xml文件中配置来重新指定配置文件的位置。
自动转发可用

<jsp:forword>

方案二:继承DispatchAction类实现多业务处理的开发模式
该方案同样是将处理每个请求的操作封装到单独的自定义方法中实现,这些方法同样都是与execute()方法具有相同的参数签名。但继承了DispatchAction类,只需创建处理请求的方法,然后进行相关的配置后,请求会自动的被转发给对应的方法进行处理。
2.多模块开发模式
struts中的各模块都具有单独的配置文件,这些模块都共享同一个ActionServlet实例,但可以在每个子模块中的Struts配置文件中为其配置RequestProcessor类。
3.Validator验证开发模式
在struts中通过XML配置文件灵活为应用配置验证规则,无需编写代码。

Spring框架:主要由核心模块、上下文模块、AOP模块、DAO模块、Web模块、O/R映射模块和Spring MVC框架等7大模块组成。
核心模块:是Spring的核心容器,最重要的类是BeanFactory,负责对javabean的配置与管理,采用Factory模式实现了IOC容器即依赖注入。
上下文模块:继承BeanFactory类,添加了事件处理、国际化、资源装载、透明装载及数据校验等功能。
AOP模块:通过事务管理可以使任意Spring管理的对象AOP化。
DAO模块:提供了JDBC的抽象层,并提供了对声明式事务和编程式事务的支持。
O/R映射模块:提供了对现有ORM框架的支持。当前ORM框架主要有五种:Hibernate(Nhibernate),iBATIS,mybatis,EclipseLink,JFinal。(只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。)
Web模块:建立在Spring上下文基础之上,提供了Servlet监听器的Context和Web应用的上下文。对现有web框架如JSF、Tapestry、Struts等提供了集成。
MVC模块:建立在Spring核心功能之上,能够适应多种多视图、模板技术、国际化和验证服务,实现控制逻辑与业务逻辑清晰的分离。
1.表单开发模式
将HTML的<FORM>标记所提交的表单数据封装,然后交给控制器处理,控制器可以直接提取封装好的数据,不必在从请求对象中分别提取。Spring表单开发模式由控制器接收页面请求,如果接收的是GET请求,将返回表单的视图,让用户填写表单重新提交请求。如果接收的是POST表单请求,控制器将表单的所有参数封装到表单对象中,在处理页面请求时直接操作表单对象中的数据,不再操作请求对象,最后控制器将返回请求的处理结果和显示该结果的视图对象。
a.在web.xml文件中配置Spring的前端控制器
b.编写Spring的配置文件springConfig.xml,该文件包含Spring的Web应用所需的视图解析器、处理器映射、数据库连接等配置信息,最主要的是,它装配了表单控制器,为表单控制器注入依赖的Dao属性,使控制器可以操作数据库。
2.多动作开发模式
控制器可以将命令参数绑定到命令对象中,然后根据命令对象的属性值来完成业务控制,确定返回结果。Spring的MultiActionController控制器以类似的方式处理页面请求,不同的是它将不同的命令参数或不同的访问路径映射到控制器的不同方法中。
3.向导开发模式
继承Spring的AbstractWizardFormController类可以编写向导控制器。它在表单控制器的基础之上扩展了跨越多个页面处理表单的能力。多用于内容 较多、单页表单难以显示或需要按资料级别分类输入(例如“必填”和“选填”内容)的情况。

Struts+Hibernate开发模式:
Hibernate框架是操作数据库的持久化框架,它的值对象本质是持久化对象的前身,也就是说,在Hibernate框架中,值对象就能够表示一条数据库表中的记录。
Struts+Hibernate框架整合的工作模式流程:
a.将ActionForm中的变量属性传递给值对象
b.将值对象交给Hibernate框架处理持久化的业务
c.持久化业务与值对象交互得到持久化的结果即可。
hibernate.cfg.xml文件:取得数据库连接操作,映射文件*.hbm.xml的位置在hibernate.cfg.xml中定义。
struts-config.xml文件中配置ActionForm类和Action类。
<form-beans>元素:配置视图层(JSP页面)和控制器(Action类)之间的接口ActionForm。
<action-mappings>元素:包含多个请求路径到Action对象的映射。
<forward>元素:接收name属性定义的请求,并转发到path属性定义的另一个请求中去。

Struts+Spring+Hibernate开发模式
Struts负责表示层,Spring负责逻辑层的业务,Hibernate负责持久层中数据库的操作。
*.hbm.xml映射文件的位置在配置文件applicationContext.xml中定义,建立实体类与数据库表之间的关系
applicationContext.xml:用来定制Spring框架依赖注入的实现类型
struts-config.xml:配置各种业务、资源文件路径等。

一、常用开发模式
1.1jsp常用开发模式
1.1.1jsp+javabean:没有做到显示与控制的分离,但实现了显示与业务逻辑之间的分离。
1.1.2jsp+servlet+javabean:servlet是用java编写的服务端程序,Servlet被加载后,会驻留在内存中,当有请求到达时,Servlet会为每一个请求分配一个线程进行请求处理。此模式遵循了MVC设计模式,jsp作为视图,用来表现页面;servlet作为控制器,控制程序的流程并调用业务进行处理;javabean封装了业务逻辑。
jsp技术在servlet的基础上实现了HTML代码与动态内容的分离。
1.1.3struts开发模式
struts框架中模型由javabean或EJB组件组成,用来实现程序的业务逻辑部分。ActionServlet、RequestProcessor和struts辅助类用来实现控制器。
当启动一个采用struts框架开发的web应用程序时,ActionServlet就会被加载并初始化,然后ActionServlet读取struts配置文件中的信息,并根据文件中各模块的配置来初始化相应的配置对象。
1.1.4Spring框架
可代替EJB开发企业级应用,它以IOC(反向控制)和AOP(面向切面编程)两种先进技术为基础。
(1)组成模块如下:
核心模块:是Spring的核心容器,最重要的类是BeanFactory,负责对javabean的配置与管理,采用Factory模式实现了IOC容器即依赖注入。
上下文模块:继承BeanFactory类,添加了事件处理、国际化、资源装载、透明装载及数据校验等功能。
AOP模块:通过事务管理可以使任意Spring管理的对象AOP化。
DAO模块:提供了JDBC的抽象层,并提供了对声明式事务和编程式事务的支持。
O/R映射模块:提供了对现有ORM框架的支持。当前ORM框架主要有五种:Hibernate(Nhibernate),iBATIS,mybatis,EclipseLink,JFinal。(只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。)
Web模块:建立在Spring上下文基础之上,提供了Servlet监听器的Context和Web应用的上下文。对现有web框架如JSF、Tapestry、Struts等提供了集成。
MVC模块:建立在Spring核心功能之上,能够适应多种多视图、模板技术、国际化和验证服务,实现控制逻辑与业务逻辑清晰的分离。
(2)Spring的IOC
IOC容器改变了类的属性的赋值方式,从容器中主动把依赖的属性注入给类的实例对象,而不是创建对象时再去寻找依赖的属性。
控制反转:开发者在使用类的实例之前,需要先创建对象的实例,但是IOC将创建实例的任务交给了IOC容器,这样开发应用代码时只需直接使用类的实例。
依赖注入的3种实现类型:
a.接口类型:基于接口将调用和实现分离,这种依赖注入方式必须实现容器所规定的接口,使程序代码和容器的API绑定在一起。
b.赋值类型:基于javabean的setXXX()方法为属性赋值。
c.构造类型:基于构造方法为属性赋值。容器调用类的构造方法,将其所需要的依赖关系注入。
(3)Spring的AOP
a.AOP是一种新的编程技术,追求的是调用者和被调用者之间的解耦,它弥补了面向对象编程(OOP)在跨越模块行为上的不足。

二、页面设计方案
1.页面设计技术
配色、布局
2.表格页面设计
3.框架页面设计
4.DIV+CSS页面设计
5.Tiles页面设计
6.导航条设计
7.广告栏设计
8.多媒体设计

三、数据持久化方案
3.1.数据持久化技术
3.1.1数据库访问技术
JDBC-ODBC桥技术:是一个JDBC针对Windows系统的ODBC数据源的驱动程序,类似于一个应用程序,可以完成从JDBC操作到ODBC操作之间的转换工作,为所有ODBC操作可用的数据库实现了JDBC操作。
JDBC:是一套面向对象的应用程序接口(API)并制定了统一的访问各类关系数据库的标准接口,为各个数据库厂商提供了标准接口的实现。JDBC主要实现与数据库建立连接、向数据库发送SQL语句、处理从数据库返回的结果3个功能。
JDBC驱动类型:JDBC-ODBC桥连、JDBC-Native桥连、JDBC网络驱动、本地协议驱动
3.1.2访问数据库的基本方式
a. javabean访问数据库:javabean中封装了连接数据库和关闭连接的方法,在该javabean中通过构造方法加载数据库的驱动,接着通过Boolean型的方法取得数据库的连接,如果返回值为true,则说明取得数据库连接成功,返回值为false,说明数据库连接失败,最后通过一个无返回值的方法关闭数据库的连接。

b. Servlet访问数据库:就是讲数据库驱动、URL地址、登录数据库的用户名和密码写入到web.xml文件中去,通过Servlet中的初始化init()方法获得并取得数据库的连接操作。

c.资源文件访问数据库:所谓资源文件就是扩展名为properties的文件,将数据库的各种信息写入到资源文件中,通过输入/输出流进行读取,并实现各种操作。

3.1.3 连接池技术
1.在Web服务器中创建数据库连接池
2.获得JNDI的名称实现对数据库的连接

3.1.4JDBC数据持久化的基本流程
加载JDBC驱动程序——创建数据库连接——执行SQL语句——获得查询结果——关闭连接

3.1.5Hibernate数据持久化的基本流程
Hibernate的配置文件(两种形式:XML和资源文件)——持久化类——对象-关系映射文件——通过hibernate API编写访问数据库的代码

3.2JDBC数据持久化方案
单条数据操作、批量数据添加、批量数据修改、批量数据删除:
方法一:通过Statement类实现:主要用途为传送静态的SQL命令给数据库执行,并返回一个ResultSet对象存储数据库执行SQL命令的数据结果。
方法二:通过PreparedStatement类实现:它是继承Statement类,与Statement不同在于PreparedStatement可以将SQL命令事先编译以及存储在PreparedStatement对象中,当需要执行许多次相同的SQL命令时,能够比较高效的执行。还能够输入条件式的SQL语句

通过存储过程操作数据:存储过程是为完成特定的功能而汇聚在一起的一组经编译后存储在数据库中的SQL语句。存储过程可以通过参数的形式输入、输出数据,并支持用户设计的变量和流程控制,有强大的编程功能。

通过事务操作数据:事务最主要功能用来确保多个连接的数据库操作必须全部执行成果,否则即恢复到未执行任何数据操作的状态。

3.3hibernate持久化数据方案
创建名称为hibernate.cfg.xml的文件,当hibernate初始化期间会自动在classpath中寻找这个文件并读取其中的配置信息,为后期数据库操作做好准备。配置文件中会配置以下持久层框架信息:数据库连接JDBC、底层数据库方言、数据库事务管理类型、映射文件的加载、运行期间生成的SQL日志输出。
通过存储过程操作数据:两种方法
方法一:在hibernate实现类中调用CallableStatement类中的方法实现存储过程的操作
方法二:自定义INSERT、UPDATE和DELETE语句实现存储过程的操作

多表一对一操作方案:两种方法
方法一:以主键进行关联操作:重点是关联的两个实体共享一个主键值
方法二:以外键进行关联操作:两个实体类各自有不同的主键,但其中一个实体有一个外键引用了另一个实体的主键。
在进行一对一关联操作时,无论是以主键进行关联还是以外键进行关联,他们的操作都是只要对主键实体类进行操作,它对应的外键实体也会自动进行更改数据。

多表一对多操作方案:
一对多关联操作可分为两种形式:单向关联(一方进行配置)和双向关联(双方进行配置)

多表多对多操作方案:指的是两个实体类中的双向关联,需要借助中间表完成多对多映射信息的保存

通过事务操作数据:Hibernate是JDBC的轻量级封装,本身并不具备事务管理能力。在事务管理层,Hibernate将其功能交给底层的JDBC,以实现事务的管理和调度。

四、数据检索方案
4.1数据查询技术:SQL查询技术、HQL检索技术、QBC检索技术
4.2普通查询方案:单字段精确查询、多字段精确查询、简单模糊查询、多表模糊查询、具有灵活性的模糊查询
4.3中级查询方案:综合条件查询、利用视图进行查询、利用存储过程进行查询
4.4高级查询方案:高级查询、查询模块
4.5查询结果显示方式:
表格显示方式:分为两种情况,一种是查询结果保存在结果集对象ResultSet中,另一种是查询结果保存在列表对象List中。
主细节页显示方式:应用在数据表中字段较多,多条数据放在同一页面显示不方便用户浏览的情况,分别制作显示概要信息的主页面和显示详细信息的细节页面。
缩略图显示方式:即分栏显示方式,适应于数据中包括图片,并且图片能够清晰的表现整条数据的实际含义的情况。
分页显示方式:适用于用户从数据库中查询出的记录较多时。(每页显示记录数、记录总数、总页数、当前页数、当前记录数)
另外两种分页显示方式:转到指定页的分页、具有页码跳转功能的分页。
树形显示方式:查询结果通常具有父子关系。常用于显示论坛中的帖子列表,或是博客中的文章及评论列表等。分为以下两种显示方式:带分页的树形显示方式、不带分页的树形显示方式
4.6其他查询相关方案:
查询内容描红:将查询关键字以特殊的颜色、字号或字体进行标示,适用于模糊查询。
在查询结果中进行搜索:进行一次查询后,再次输入查询条件进行二次查找或多次查找。适用于数据量比较大的网站。
带记忆功能的查询:系统会自动记录每次用户输入的查询关键字,并且当用户再次输入时,只要输入已经记录的关键字的第一个字符,系统会自动查找出与该关键字相匹配的全部选项,并显示在列表中供用户选择。

决策分析方案:
5.1决策分析技术:交叉表分析、透视表分析、统计图分析、实时动态决策分析与Ajax技术
5.2交叉表决策分析方案:利用静态交叉表进行决策分析、利用动态交叉表进行决策分析
5.3透视表决策分析方案:用户控制生成透视表方案、软件控制生成透视表方案
5.4统计图决策分析方案:利用普通统计图进行决策分析、利用热点统计图进行决策分析、利用组合统计图进行决策分析
5.5透视图决策分析方案
5.6实时动态决策分析方案

报表打印技术:JavaScript+CSS打印技术、WebBrowser打印技术、Word、Excel打印技术、IText组件、POI组件、IReport和JasperReport组件、Java Excel组件
普通报表打印方案:打印PDF报表方案、打印表格与
图像方案、打印Excel报表方案、打印Word报表方案
样式报表打印方案:业务报表、统计报表、财务报表
高级报表打印方案:生成分组报表、生成主从报表、生成分栏报表、生成交叉报表、生成套打报表、生成图表报表、生成隔行变色报表
自定义报表方案

网络通信方案:
7.1 网络通信技术:通过Java Mail发送和接收E-mail技术、发送手机短信技术
7.2发送E-mail方案:发送普通文本格式的E-mail、发送HTML格式的E-mail、发送带附件的E-mail、群发E-mail
7.3接收E-mail方案
7.4发送手机短信方案:通过WebService发送手机短信、通过短信猫发送手机短信

8.1页面安全实施方案:
1.禁止保存网页:巧妙使用<iframe>标记,在其src属性指定一个实际上不存在的文件,这样当用户保存包含该标记的页面时就会因为找不到指定的页面文件而无法保存。
2.禁止复制网页内容(通过JavaScript脚本)
方法一:设置onselectstart事件,就可屏蔽用鼠标、键盘及浏览器菜单栏来选中要复制的网页内容,无法选中内容,就无法进行复制
但通过按下键盘的“ctrl”键,并同时单击鼠标左键进行拖动即可选中内容。
方法二:同时设置onselectstart和onmouseup事件
破解:按下“ctrl”键并同时单击鼠标左键进行拖动选中要复制的内容后,不要释放“ctrl”键与鼠标左键,然后按下键盘中的“C”键即可复制选中内容。
方法三:同时设置onselectstart、onmouseup和oncopy事件。也可以只通过设置oncopy事件实现
方法四:同时设置onselectstart、onmouseup、oncopy和ondragstart事件
防止刷新页面:客户端禁止使用按钮或快捷键进行刷新。编写一个函数来判断用户的按键是否被禁止从而进行相应的操作。
防止页面被盗链:
盗链就是未经允许而私自将其他网站中的一些资源的链接地址(如文章、图片、音乐、软件等地址)贴在自己的网站中,从而不必将这些资源上传到自己的空间中就可提供给用户浏览及下载。
解决:使用请求头中的referer字段,它记录了当前请求的上一次访问的地址,所以可以在需要被保护的页面中通过判断请求头中referer字段的内容来得知当前的请求是否从其他网站中触发的,从而可进行相应的处理。
防止用户回退网页:
一种是针对浏览器提供的后退功能实现,当用户退到表单页面时,再转回到回退之前的页面,使表单页面无法在屏幕中停留显示;
另一种是通过禁止页面被缓存起来实现
防止JSP文件被非法访问:
一种是通过检查session对象中指定属性的值是否为在登录页面中设置的值,从而进行相应的操作。
另一种可将一些重要的jsp文件存放到WEB-INF目录下。

8.2程序安全实施方案:
文件上传安全:限制用户上传一些危险性的文件如.exe,.jsp,.bat等。也可以使用专业的文件上传组件。
程序线程安全:
一种是通过synchronized实现线程同步
另一种是采用局部变量代替实例变量。

8.3数据库安全实施方案:
用户安全访问:对用户的身份进行验证
数据库的备份:
数据库的恢复:
系统日志记录

网站优化与发布方案
9.1编码优化方案:对普通编码的优化、对javabean的优化、对JSP的优化
struts框架的优化
hibernate持久层的优化
9.2服务器优化方案:优化配置tomcat连接、禁用DNS查询
9.3数据库优化方案:对数据库结构、对SQL语句

9.4在局域网内发布Web网站方案
使用同一ip地址、不同端口号来架设多个web网站
使用多个ip地址假设多个web网站(在一台计算机上分配多个IP地址进行web网站假设)
应用DNS服务器发布带域名的网站(在局域网内通常是通过配置IIS服务器来实现网站发布的,通过该方法发布的网站,在用户进行浏览时,通常都是通过输入由IP地址、端口号或本地服务器(localhost)组成的URL地址访问的)

9.5Windows系统下发布网站到Internet方案
前提条件:
拥有一台可连接到Internet上的计算机,并且要求是固定IP
拥有一个一级域名,并且域名的指向为可连接到Internet的计算机的IP
在可连接到Internet的计算机上要有Javaweb程序的运行环境,即已成功安装了JDK和Tomcat服务器
拥有一个可运行的Javaweb应用程序

9.6Linux系统下发布网站到Internet方案