JSP:MVC

一个好的Web应用: 功能完善、易于实现和维护易于扩展等的体系结构

一个Web应用通常分为两个部分

1. 由界面设计人员完成的表示层(主要做网页界面设计)

2. 由程序设计人员实现的行为层(主要完成本Web应用的各种功能)

Web开发的两种常用模式

Web开发的两JSP:MVC_第1张图片

Model1 纯JSP或JSP+javabean

适用于小型的Web应用

模型1可以分为两种方式

1. 完全使用JSP页面 JSP:MVC_第2张图片

优点:简单,所见即所得,容易实现

缺点:访问数据库的代码需要写在JSP页面中,如果数据库发生变化JSP页面需要重写

2.使用JSP+JavaBeanJSP:MVC_第3张图片

优点数据访问代码和JSP页面分离,数据访问代码重用性好

缺点系统复杂时,JSP页面中仍会包含大量脚本代码,代码开发和维护困难

Model2 MVC模式

该模型是一种将应用分解成三个独立部分的通用模型。

这三个部分分别是:
模型(Model) 描述系统的数据
视图(view) 数据的显示,包括图形、文本和文件输出等;
控制器(Controller) 获取系统的输入,控制系统的执行;
MVC 是 Model-View-Controller 的缩写
Model代表的是应用程序的商业逻辑 (通过 JavaBean EJB 等组件实现)
View提供可交互的客户界面 ,向客户显示模型数据(使用 JSP 来输出 HTML );
Controller响应客户的请求 ,根据客户的请求操纵模型,并把模型的响应结果由视图展现给客户 通常是 Servlet ;
MVC好处
各司其职,互不干涉
在MVC 模式中,三个层各司其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。
有利于开发中的分工
在MVC 模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的 JSP ,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。
有利于组件的重用
分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。
MVC 有助于把应用分离成合理的组件,以方便开发
MVC(Servlet、JSP、JavaBean相结合)
Servlet扮演控制者的角色,接受客户请求 ,创建 JavaBean JavaBean 执行业务逻辑 ,向 Servlet 返回结果。 Servlet 将结果交给 JSP 页面 ,由 JSP 页面生成 HTML 向客户返回结果 JSP:MVC_第4张图片 JSP:MVC_第5张图片 JSP:MVC_第6张图片
 MVC 模式的核心思想是有效地组合“视图”、“模型”和“控制器”。
掌握该模式对于设计合理的 Web 应用以及学习使用某些流行的 Web 框架,如 Hibernate Spring Struts等,都有着十分重要的意义。
MVC 是一种通过三个不同部分构造一个软件或组件的理想办法:
模型( Model —— 用于存储数据的对象。
视图( View —— 为模型提供数据显示的对象。
控制器( Controller ——负责具体的业务逻辑操作,即控制器根据视图提出的要求对数据做出处理,并将有关结果存储到模型中,同时负责让模型和视图进行必要的交互,当模型中的数据变化时,让视图更新显示。
JSP 技术中,“视图”、“模型”和“控制器”的具体实现如下:
模型( Model ):  一个或多个 JavaBean 对象,用于存储数据, JavaBean 主要提供简单的 setXXX () 方法和 getXXX () 方法,在这些方法中不涉及对数据的具体处理细节。
视图( View ):  一个或多个 JSP 页面,为模型提供数据显示, JSP 页面主要使用 HTML 标记和 JavaBean 标记来显示数据
控制器( Controller 一个或多个 Servlet 对象,根据视图提交的要求进行数据处理操作,并将有关的结果存储到 JavaBean 中,然后 Servlet 使用重定向方式请求视图中的某个 JSP 页面更新显示。 JSP:MVC_第7张图片
JSP+Javabean 模式中,由 JSP 页面通过使用 useBean 标记:
< jsp:useBean id=" 名字 " class=" 创建 bean 的类 " scope=" 生命周期 "/> 创建 Javabean
  JSP 中的 MVC 模式中,也可以由控制器 servet 创建 Javabean ,并将有关数据存储到所创建的 Javabean 中,然后 servlet 请求某个 JSP 页面使用 Javabean getProperty 动作标记:
< jsp:getProperty name= " 名字 " property="bean 的属性 "/> 显示 Javabean 的中的数据。
JSP 中的 MVC 模式中,非常重要的手段是由 servlet 负责用构造方法创建 Javabean ,因此允许创建 Javabean 的类可以有带参数的构造方法。
JSP 中的 MVC 模式中, servet 创建的 Javabean 也涉及到生命周期 ( 有效期限 ) ,生命周期分为 request session application 。以下假设创建 Javabean 的类的名字是 BeanClass ,该类的包名为 user.yourbean

request周期的Javabean

1. Javabean的创建
 servlet 负责创建 bean 。那么创建生命周期为 request bean 的步骤如下:
1 )用 BeanClass 类的某个构造方法创建 bean 对象
例如: BeanClass bean=new BeanClass ();
2 )将所创建的 bean 对象存放到 HttpSerletRequest 对象 request 中,并指定查找该 bean 的关键字,该步骤决定了 bean 的生命周期为 request
例如:
request.setAttribute (" keyWord ",bean);
执行上述操作,就会把 bean 存放到 Tomcat 引擎管理的内置对象 pageContext 中,该 bean 被指定的 id " keyWord " ,生命周期是   PageContext.REQUEST_SCOPE request 。  
2   视图更新
servlet 请求一个 JSP 页面,比如 show.jsp 的代码如下:
RequestDispatcher dispatcher= request.getRequestDispatcher (" show.jsp ");
dispatcher.forward ( request,response );
servlet 所请求的 JSP 页面可以使用如下标记获得 servlet 所创建的 bean 的引用( type 属性使得该 JSP 页面不负责创建 bean
< jsp:useBean id=" keyWord " type=" user.yourbean.BeanClass " scope="request"/>
该标记中的 id servlet 所创建的 bean 索引关键字。然后 JSP 页面使用 < jsp:getProperty name=" keyWord " property="bean 的变量 "/> 标记显示 bean 中的数据。如果上述代码执行成功,用户就看到了 show.jsp 页面的执行效果。
特别注意 : 如果 servlet 所请求的 JSP 页面 , 使用如下标记获得 servlet 所创建的 bean 的引用 ( 注意没有用 type 属性而是用 class 属性 )
< jsp:useBean id=" keyWord " class=" user.yourbean .BeanClass " scope="request"/>
该标记中的 id servlet 所创建的 bean 索引关键字。那么即使 servlet 所请求的 JSP 页面事先已经有了 id " keyWord " scope "request" bean ,那么这个 bean 也会被 servlet 所创建的 bean 替换。
原因是 servlet 所请求的 JSP 页面会被刷新,就会根据当前页面使用的 < jsp:useBean id=" keyWord " class=" user.yourbean.BeanClass " scope="request"/> 标记到 Tomcat 引擎管理的内置对象 PageContext 中寻找 id " keyWord " ,生命周期是 request ,而该 bean 已经被 servlet 更新了。

session周期的Javabean

1.Javabean的创建

servet创建生命周期为sessionbean的步骤如下:

1)用BeanClass类的某个构造方法创建bean对象,例如:

BeanClass bean=new BeanClass();

2)将所创建的bean对象存放到HttpSerletSession对象:session中,并指定查找该bean的关键字,该步骤决定了bean的生命周期为session。例如:

 HttpSession session=request.getSession(true);

session.setAttribute("keyWord",bean);

内置对象执行上述操作,就会把bean存放到Tomcat引擎管理的内置对象pageContext中,该bean被指定的id"keyWord",生命周期是PageContext.SESSION_SCOPEsession)。  

2   视图更新

servelt创建bean, bean的生命周期为session只要用户的session没有消失,该bean就一直存在,一个用户在访问Web服务目录的各个JSP中都可以使用<jsp:useBean id="keyWord" type="usern.yourbean.BeanClass" scope="session"/> 标记获得servlet所创建的bean的引用,然后使用<jsp:getProperty name="keyWord" property="bean的变量"/>标记显示该bean中的数据,该标记中的idservlet所创建的bean索引关键字。

对于生命周期为sessionbean,如果servlet希望某个JSP显示其中的数据,可以使用RequestDispatcher对象向该JSP页面发出请求,也可以使用HttpServletResponse类中的重定向方法(sendRedirect)。

show.jsp页面使用如下标记获得servlet所创建的bean的引用(注意没有用type属性而是用class属性)<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="session"/>该标记中的idservlet所创建的bean索引关键字。那么即使servlet所请求的JSP页面或其他页面事先已经有了id"keyWord"scope" session "bean,那么这个bean也会被servlet所创建的bean替换。

 原因是,servlet所请求的JSP页面或其他页面被刷新时,就会根据当前页面使用的<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope=" session "/>标记到Tomcat引擎管理的内置对象PageContext中寻找id"keyWord",生命周期是session,而该bean已经被servlet更新了。

application周期的Javabean

1Javabean的创建

servet创建生命周期为applicationbean的步骤如下:

1BeanClass类的某个构造方法创建bean对象,例如:

BeanClass bean=new BeanClass();

2servlet使用getServletContext()方法返回服务器的ServletContext内置对象的引用,将所创建的bean对象存放到服务器这个ServletContext内置对象中,并指定查找该bean的关键字,该步骤决定了bean的生命周期为application,例如:getServletContext().setAttribute("keyWord",bean);

上述操作,就会把bean存放到Tomcat引擎管理的内置对象pageContext中,该bean被指定的id"keyWord",有效期限是(生命周期)PageContext.APPLICATION_SCOPEapplication 

2   视图更新

servlet创建创建生命周期为applicationbean后,只要Web应用程序不结束,该bean就一直存在。一个用户在访问Web服务目录的各个JSP中都可以使用<jsp:useBean id="keyWord" type="user.yourbean.BeanClass" scope="application"/>  标记获得servlet所创建的bean的引用,然后使用<jsp:getProperty name="keyWord" property="bean的变量"/>标记显示该Javabean中的数据,该标记中的idservlet所创建的bean索引关键字。

 对于生命周期为applicationbean,如果servlet希望某个JSP显示其中的数据,可以使用RequestDispatcher对象向该JSP页面发出请求,也可以使用HttpServletResponse类中的重定向方法(sendRedirect)。

注意:所有用户在同一个Web服务目录中的application生命周期的bean是相同的,即占有相同的内存空间。另外,如果servlet所请求的JSP页面,比如show.jsp页面,使用如下标记获得servlet所创建的bean的引用(注意没有用type属性而是用class属性)<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="application"/>该标记中的idservlet所创建的bean索引关键字。那么即使servlet所请求的JSP页面或其他事先已经有了id"keyWord"scope"application"bean,那么这个bean也会被servlet所创建的bean替换。

原因是,servlet所请求的JSP页面或其他页面被刷新时,就会根据当前页面使用的:<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="application"/>标记到Tomcat引擎管理的内置对象PageContext中寻找id"keyWord",生命周期是application,而该bean已经被servlet更新了

JavabeanServlet与配置文件

Javabean类的包名均为mybean.dataServlet类的包名均为myservlet.control

1.保存Javabean类和Servlet类的源文件

D:\ mybean\data  和  D:\myservlet\control

2.编译Javabean类  D:\javac mybean\data\Javabean的源文件

3.编译Servlet类      D:\ javac myservlet\control\servlet的源文件

4.将类的字节码文件保存到服务器 ch9\WEB-INF\classes\mybean\data  ch9\WEB-INF\classes\myservlet\control

5web.xml文件

编写web.xml文件,并保存到Web服务目录的WEB-INF子目录中,即ch9\WEB-INF

MVC模式与注册登录    大部分Web应用都会涉及到注册与登录模块。本节使用MVC模式讲述怎样设计注册、登录模块。为ch9\WEB-INF中的web.xml文件添加如下子标记

JavabeanServlet管理

本节的Javabean类的包名均为mybean.dataServlet类的包名均为myservlet.control

1.保存Javabean类和Servlet类的源文件    D:\ mybean\data D:\myservlet\control

2.编译Javabean类    D:> javac mybean\data\Javabean的源文件

3.编译Servlet类   D:> javac myservlet\control\servlet的源文件

4.将类的字节码文件保存到服务器 ch9\WEB-INF\classes\mybean\data  

ch9\WEB-INF\classes\myservlet\control  

配置文件管理

本节的Servlet类的包名均为myservlet.control,需要配置Web服务目录的web.xml文件,即将下面的web.xml文件保存到Tomcat安装目录的Web服务目录ch9中。根据本书使用的Tomcat安装目录及Web服务目录,需要将web.xml文件保存到D:\apache-tomcat-8.0.3\webapps\ch9\WEB-INF目录中。    

web.xml

register

 myservlet.control.HandleRegister

register

<url-pattern>/helpRegisterurl-pattern>

 login

myservlet.control.HandleLogin

login

<url-pattern>/helpLoginurl-pattern>

数据库设计与连接

1  创建一个数据库 、表  使用MySQL建立一个数据库student,该库共有一个user表 。JSP:MVC_第8张图片

user表的用途:存储用户的注册信息。即会员的注册信息存入user表中,user表的主键是logname,各个字段值的说明如下:

logname 存储注册的用户名(属性是字符型,主键)

password 存储密码(属性是字符型)

email 存储email(属性是字符型 

2  数据库连接

避免操作数据库出现中文乱码,需要使用

Connection getConnection(java.lang.String) 方法建立连接,连接中的代码是(用户是root,其密码是空)

 String url = "jdbc:mysql://127.0.0.1/student?"+"user=root&password=&characterEncoding=gb2312";

Connection con = DriverManager.getConnection(uri);

 

 

 

 

你可能感兴趣的:(java,mvc,servlet)