MVC、在一个Servlet中实现多业务处理、总结Servlet



MVC、在一个Servlet中实现多业务处理、总结Servlet

1、web应用上的三层体系开发结构
也称为多层体系结构。按照应用程序的总体功能,进行合理的模块划分,实现人员的分工和技术的分工。
统称为MVC体系结构。

V:view 视图层。主要技术:jsp和html。实现的功能:给用户一个请求输入的窗口Form表单和结果显示的页面主要实现可以用到Table或div标记展现。

C:control 控制层。主要技术:servlet。实现的功能:从JSP页面中接受到请求,Servlet传递请求到数据库处理层,根据数据处理结果调用不同的JSP页面。

M:model 模型层。主要技术:传统的java数据处理技术。实现的功能:根据控制层传递的请求,进行详细的数据处理,产生处理结果。把结果返回给控制层。
2、servlet的几大工作内容
(1)servlet的生命周期、在web.xml中的配置
(2)servlet的工作机制:doGet()、doPost()方法。
请求应答模型:用于接收请求,传递请求,获得处理结果,调用显示页面
(3)servlet的分类与级别
中文问题的处理、过滤器servlet(Filter过滤器Servlet的的配置)、监听器servlet(后两个过滤器当项目一运行的时候立即被初始化,而普通的Servlet只有用户手动调用才会被初始化。)
(4)web组件之间的数据共享
参数进行数据共享,通过URL超链接或From表单(根据name属性在Servlet中得到Value值)。
属性进行数据共享:request 、session
(5)mvc开发模式

(6)补充两点:
初始化参数的使用(在Servlet的init方法中进行Servlet成员变量的初始化)
利用servlet生成验证码随机图片(略)


3、servlet的初始化参数
(1)servlet的生命周期(首先创建Servlet-》调用Servlet根据Servlet的构造函数生成Servlet的实例-》执行Servlet的init方法-》执行doGet()、doPost()方法-》卸载Servlet)
(2)构造函数的作用(和一般的Java类的构造函数一样的作用)
1、进行对象的实例化
2、进行成员变量的初始化
(3)Servlet中init方法的作用
Servlet也是一个类,所以也可以定义自己的成员变量。当servlet中具有成员变量时,由于构造函数此时默认调用无参构造函数。所以构造函数不再承担任何的为成员变量赋予初始值的工作,而是交给init方法完成成员变量的初始化赋值。这样的话,成员变量初始化的任务就由Servlet的init方法负责完成。
(4)成员变量注入的思想
注入一般是在Spring框架中提到的较多,方法的注入,类的注入,这样就不用再去写一个类,写一个方法了,可以省去很多,这就是使用框架的好处。一般在配置文件中进行参数的注入,方法的注入,类的注入(例如Spring框架)。而这里对于Servlet的成员变量的注入,非常之简单。
只需要在配置文件中写入配置每个参数的名称,和值即可。
当servlet中的成员变量的值,需要反复加以改变,这样,每次改变都必须修改硬编码。此种工作方式可行,但不推荐。
做法:将成员变量和相应的值,全都放置到web.xml中。程序执行时,从web.xml中提取成员变量。如果需要值的改变,不必更改源文件,只是简单的修改web.xml的值。

这样:我们把为变量赋值的方式,从java原文件的硬编码赋值,改成通过xml文件动态进行。此种为变量赋值的方式,称为:注入。

在web.xml配置文件中注入成员变量的工作流程
第一步:创建servlet,在web.xml中自动配置好这个Servlet的信息。包括Servlet和Servlet-Mapping的配置。
第二步:在web.xml中,为servlet添加初始化参数的配置信息(成员变量的配置信息)
<init-param>
<param-name>成员变量的名称</param-name>
<param-value>变量的初始值</param-value>
</init-param>
每个成员变量,都由自己的init-param标签。今后,如果需要改变值,直接更改param-value,我们称这种改变值的方式叫做注入。

第三步:在servlet的init方法中进行值的提取
提取值的方式有两种:
A:借助于servlet对象实现
this.getInitParameter(参数名称);
B:利用专门的配置对象实现提取,在init方法中写入的一段代码。
//利用ServletConfig对象实现调用
ServletConfig cof=this.getServletConfig();
characterEncoding=cof.getInitParameter(“characterEncoding”);
——————————————————————
4、多任务处理的servlet
(1)产生前提
传统的servlet,一个servlet对应一项业务处理。但和处理对象没有关系。容易造成servlet的爆炸或者成为类爆炸问题。(一个对象对应多个servlet)。
(2)解决方法
按照业务对象产生servlet,一个数据库操作对象,对应一个servlet,在一个servlet中,实现不同的业务处理。简单的说就是方法的重载,在一个Servlet中实现多个方法的重载,那个方法就是和doGet()和doPost()方法的参数完全一致,方法名不一样。参数名一样,参数类型不一样,参数个数不一样,和返回值无关。
(3)实现步骤
A:创建servlet
B:在servlet添加自己的业务处理方法
C:实现不同方法的调用

Servlet和Jsp的大体内容差不多就这么多。不过理解起来可能麻烦一点,和二期的内容离不开。关于MVC架构,模型层(JDBC数据库连接,数据库操纵)、显示层(JSP页面)、控制层(Servlet)
关于对Servlet的优化上面也只是提了一下,其实就是Servlet的doGet()、doPost()方法的,JSP页面中传递过来参数,在doGet中判断一下参数是哪一个,然后执行对应的重载的方法即可。
Servlet的生命周期就是创建Servlet,然后执行构造方法实例化出来,普通的Servlet是什么时候调用什么时候实例化,对于过滤器在项目一在服务器中加载的时候就会被实例化出来。
————————————————————
对于以上提到的方法的重载一律不对,怎么觉得不对,说错了,删的不干净多多见谅,不是方法的重载,我把方法的重载理解错了。其实是方法复写了一遍,只不过改改名罢了。可以这么理解。但不是方法的重载。