JSP:MVC

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

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

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

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

Web开发的两种常用模式

Web开发的两

Model1 纯JSP或JSP+javabean

适用于小型的Web应用

模型1可以分为两种方式:

1. 完全使用JSP页面

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

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

2.使用JSP+JavaBean

优点**:数据访问代码和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 向客户返回结果 。
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+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对象,例如:

BeanClassbean=newBeanClass**();**

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

HttpSession****session=request.getSession(true);

session.setAttribute**("keyWord",bean);**

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

2 视图更新

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

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

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

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

application周期的Javabean

1**.**Javabean的创建

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

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

BeanClassbean=newBeanClass**();**

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:useBeanid="keyWord" type="user.yourbean.BeanClass" scope="application"/>标记获得servlet所创建的bean的引用,然后使用<jsp:getPropertyname="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:useBeanid="keyWord" class="user.yourbean.BeanClass" scope="application"/>该标记中的idservlet所创建的bean索引关键字。那么即使servlet所请求的JSP页面或其他事先已经有了id"keyWord"scope"application"bean****,那么这个bean也会被servlet所创建的bean替换。**

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

JavabeanServlet与配置文件

Javabean类的包名均为mybean.data**;Servlet类的包名均为myservlet.control。**

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

D:\mybean\dataD:\myservlet\control

2**.编译JavabeanD:\javacmybean****\data\Javabean的源文件**

3**.编译ServletD:\javac myservlet\control\servlet的源文件**

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

5**.web.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**.编译ServletD:>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

<servlet>

<servlet-name>register</servlet-name>

<servlet-class>myservlet.control.HandleRegister</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>register</servlet-name>

<url-pattern>/helpRegister</url-pattern>

</servlet-mapping>

<servlet>

<servlet-name>login</servlet-name>

<servlet-class>myservlet.control.HandleLogin</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>login</servlet-name>

<url-pattern>/helpLogin</url-pattern>

</servlet-mapping>

数据库设计与连接

1 创建一个数据库 、表 使用MySQL建立一个数据库student,该库共有一个user表 。

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

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

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

email**:存储email(属性是字符型**

2 数据库连接

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

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

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

Connection con =DriverManager.getConnection(uri);

相关推荐
suweijie7682 小时前
SpringCloudAlibaba | Sentinel从基础到进阶
java·大数据·sentinel
公贵买其鹿3 小时前
List深拷贝后,数据还是被串改
java
xlsw_6 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹7 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭8 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫8 小时前
泛型(2)
java
超爱吃士力架8 小时前
邀请逻辑
java·linux·后端
南宫生8 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石8 小时前
12/21java基础
java
李小白668 小时前
Spring MVC(上)
java·spring·mvc