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);

相关推荐
李少兄25 分钟前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
此木|西贝31 分钟前
【设计模式】原型模式
java·设计模式·原型模式
可乐加.糖1 小时前
一篇关于Netty相关的梳理总结
java·后端·网络协议·netty·信息与通信
s9123601011 小时前
rust 同时处理多个异步任务
java·数据库·rust
9号达人1 小时前
java9新特性详解与实践
java·后端·面试
cg50171 小时前
Spring Boot 的配置文件
java·linux·spring boot
啊喜拔牙1 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
anlogic2 小时前
Java基础 4.3
java·开发语言
非ban必选2 小时前
spring-ai-alibaba第七章阿里dashscope集成RedisChatMemory实现对话记忆
java·后端·spring
A旧城以西2 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea