- 浏览: 468181 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
a1439226817:
能不能发下源码1439226817@qq.com
ExtJsCRUD组件实现 -
w923690968:
[list][*]引用[u][/u][/list]
[JS]Drag And Drop -
zhumingyuan:
您好!用的的是3.2.3版本,按照您的方法配置了一下,但是还是 ...
spring vmc3.1.1 下,通过AnnotationMethodHandlerAdapter配置webBindingInitializer失效解决方案 -
sumo084:
我把xDarkness-MultClrBubble-1.0.j ...
JAVA实现类泡泡屏保效果 -
sumo084:
求源码,楼主好人,630483738@qq.com,谢谢
JAVA实现类泡泡屏保效果
11.1 JSP Model I 体系结构
11.2 JSP Model II 体系结构/MVC设计模式
11.3 使用MVC设计模式改写用户注册程序
11.3.1 使用serlvet实现Controller层
11.3.2 使用jsp实现表示层
11.3.3 使用JavaBean实现模型层
11.3.4 使用JDBC和DAO模式实现数据库层
11.4 本章小结
JSP + DAO设计模式
使用JSP+JavaBean开发速度快,有一个问题:JSP与JavaBean之间紧密耦合在一起,会对开发及维护造成麻烦。
使用JSP+JavaBean(模式1)开发适用于一次开发完成,而且团队成员较少是使用。
JSP + Servlet + JavaBean
对于模式一JSP与JavaBean之间紧密耦合在一起
分析:
JSP优点,开发前台界面方便,做UI开发容易
Servlet优点:是JAVA程序,安全性高,性能高
Servlet缺点:显示不方便
JavaBean优点:可重复调用,需要接受用户的请求参数,进行相应的处理
问题:
JSP跳转到Servlet可以通过表单或超链接
从Servlet跳转到JSP:使用response对象
JSP中两种跳转语句:
四种属性范围:
现在从Servlet中要传递的值只使用一次,如果把此值存放在session范围之中,则此内容只要用户一直与服务器保持连接,则此块内存空间要一直被占用,那么性能会很低。
解决方法:RequestDispatcher接口,是用于由Servlet到JSP进行服务器端跳转的接口
通过以上代码可以发现:
使用MVC开发程序,代码稍微复杂
JSP与JavaBean之间没有什么特别明显的直接关系
而Servlet根据JavaBean返回的内容进行跳转
Servlet中最好只有以下几种代码:
接收参数
调用JavaBean
进行跳转
有一些简单的逻辑判断
案例-使用mvc+DAO完成用户登陆
11.2 JSP Model II 体系结构/MVC设计模式
11.3 使用MVC设计模式改写用户注册程序
11.3.1 使用serlvet实现Controller层
11.3.2 使用jsp实现表示层
11.3.3 使用JavaBean实现模型层
11.3.4 使用JDBC和DAO模式实现数据库层
11.4 本章小结
JSP + DAO设计模式
使用JSP+JavaBean开发速度快,有一个问题:JSP与JavaBean之间紧密耦合在一起,会对开发及维护造成麻烦。
使用JSP+JavaBean(模式1)开发适用于一次开发完成,而且团队成员较少是使用。
JSP + Servlet + JavaBean
对于模式一JSP与JavaBean之间紧密耦合在一起
分析:
JSP优点,开发前台界面方便,做UI开发容易
Servlet优点:是JAVA程序,安全性高,性能高
Servlet缺点:显示不方便
JavaBean优点:可重复调用,需要接受用户的请求参数,进行相应的处理
问题:
JSP跳转到Servlet可以通过表单或超链接
从Servlet跳转到JSP:使用response对象
<h1>MVCDEMO</h1> <!-- <h1><%=request.getAttribute("name")%></h1> --> <h1><%=session.getAttribute("name")%></h1> ―――――――――
package org.sky.darkness.servlet ; import java.io.* ; import javax.servlet.* ; import javax.servlet.http.* ; public class MVCServlet extends HttpServlet { public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException { this.doPost(req,resp) ; } public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException { // 要传递一个值到mvcdemo.jsp中 // 要传递的内容只使用一次 // 一个页面跳转有用,request范围 // 既然request无法传递,那就扩大范围-session // req.setAttribute("name","darkness") ; req.getSession().setAttribute("name","darkness") ; resp.sendRedirect("mvcdemo.jsp"); } };
JSP中两种跳转语句:
四种属性范围:
现在从Servlet中要传递的值只使用一次,如果把此值存放在session范围之中,则此内容只要用户一直与服务器保持连接,则此块内存空间要一直被占用,那么性能会很低。
解决方法:RequestDispatcher接口,是用于由Servlet到JSP进行服务器端跳转的接口
req.setAttribute("name","darkness") ; // 与<jsp:forward/>功能相同 req.getRequestDispatcher("mvcdemo.jsp").forward(req,resp);
-----------------mvc_login.jsp-------------------------------------- <form action="mvcdemo" method="POST"> 输入姓名:<input type="text" name="uname"> <input type="submit" value="提交"> </form>
-----------------MVCServlet.java-------------------------------------- package org.sky.darkness.servlet ; import java.io.* ; import javax.servlet.* ; import javax.servlet.http.* ; import org.sky.darkness.bean.MVCCheck ; public class MVCServlet extends HttpServlet { public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException { this.doPost(req,resp) ; } public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException { String name = req.getParameter("uname") ; MVCCheck mc = new MVCCheck() ; // 将请求内容设置到mc对象之中 mc.setName(name) ; String path = null ; if(mc.isValidate()) { // 保存名字在request范围之中 req.setAttribute("name",mc.getName()) ; path = "mvc_success.jsp" ; } else { path = "mvc_failure.jsp" ; } // 进行跳转 req.getRequestDispatcher(path).forward(req,resp) ; } }; /* <servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.sky.darkness.servlet.MVCServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>/mvcdemo</url-pattern> </servlet-mapping> */
------------------------------------- MVCCheck.java------------------------ package org.sky.darkness.bean ; public class MVCCheck { private String name ; public void setName(String name) { this.name = name ; } public String getName() { return this.name ; } // 验证 public boolean isValidate() { if(this.name==null||"".equals(this.name)) { return false ; } else { return true ; } } };
<%@page contentType="text/html;charset=gb2312"%> <h1>输入成功!!!</h1> <h2>欢迎:<%=request.getAttribute("name")%>光临!!!</h2> <%@page contentType="text/html;charset=gb2312"%> <h1>输入失败!!!</h1> <h2><a href="mvc_login.htm">重新登陆</a></h2>
通过以上代码可以发现:
使用MVC开发程序,代码稍微复杂
JSP与JavaBean之间没有什么特别明显的直接关系
而Servlet根据JavaBean返回的内容进行跳转
Servlet中最好只有以下几种代码:
接收参数
调用JavaBean
进行跳转
有一些简单的逻辑判断
案例-使用mvc+DAO完成用户登陆
DROP TABLE person ; CREATE TABLE person ( id varchar(20) not null primary key , name varchar(20) not null , password varchar(20) ) ; INSERT INTO person (id,name,password) VALUES ('sky','darkness','wind') ; INSERT INTO person (id,name,password) VALUES ('cloud','hacker','creaker') ; -- 提交事务 commit ;
-----------------login.jsp-------------------------------------------------------------------- <%@page contentType="text/html;charset=gb2312"%> <%@page import="java.util.*"%> <html> <head> <title>登陆</title> </head> <body> <center> <h1>登陆范例——MVC实现</h1> <hr> <br> <br> <!-- 加入更加详细的错误提示 --> <% if(request.getAttribute("errors")!=null) { // 有错误,要进行打印输出 List all = (List)request.getAttribute("errors") ; Iterator iter = all.iterator() ; while(iter.hasNext()) { %> <li><%=iter.next()%> <% } } %> <form action="LoginServlet" method="post"> <table> <tr> <td colspan="2">用户登陆</td> </tr> <tr> <td>用户名:</td> <td><input type="text" name="id" value="${person.id}"></td> </tr> <tr> <td>密 码:</td> <td><input type="password" name="password" value="${person.password}"></td> </tr> <tr> <td colspan="2"> <input type="submit" value="登陆"> <input type="reset" value="重置"> </td> </tr> </table> </form> </center> </body> </html> -------------------------LoginServlet.java--------------------------------------------- // 建立MVC中的C,完成JSP+Servlet+JavaBean的开发模式 package org.sky.darkness.servlet ; import java.io.* ; import java.util.* ; import javax.servlet.* ; import javax.servlet.http.* ; import org.sky.darkness.factory.* ; import org.sky.darkness.vo.* ; public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { this.doPost(request,response) ; } public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { // 声明一个集合类,用于保存错误信息 List errors = new ArrayList() ; // 完成登陆验证,替换掉login_conf.jsp String path = "login.jsp" ; // 1、接收请求内容 String id = request.getParameter("id") ; String password = request.getParameter("password") ; // 2、进行数据合法性验证,包括是否为空,长度是否满足等 // 要将接收到的内容设置给PersonVO对象 PersonVo pv = new PersonVo() ; pv.setId(id) ; pv.setPassword(password) ; pv.setErrors(errors) ; // 3、如果合法,则进行数据库验证 if(pv.invalidate()) { // 数据合法,可以进行数据库验证 if(DAOFactory.getPersonDAOInstance().isLogin(pv)) { // 用户ID、密码合法 // 修改跳转路径 // 保存用户名到request范围之中 // request.setAttribute("name",pv.getName()) ; path = "login_success.jsp" ; } else { // 用户ID、密码非法 errors.add("错误的用户ID及密码!") ; } } // 将错误信息保存 request.setAttribute("errors",errors) ; request.setAttribute("person",pv) ; request.getRequestDispatcher(path).forward(request,response) ; } }; -------------------------login_success.jsp--------------------------- <%@page contentType="text/html;charset=gb2312"%> <html> <head> <title>登陆</title> </head> <body> <center> <h1>登陆范例——MVC实现</h1> <hr> <br> <br> <h2>登陆成功</h2> <h3>欢迎<font color="red" size="15"> ${person.name} </font>光临!!!</h3> </center> </body> </html> -----------------------------PersonVo.java--------------------- // 只包含setter和getter方法的类 package org.sky.darkness.vo ; import java.util.* ; public class PersonVo { // 表中所有字段 private String id ; private String name ; private String password ; // 此属性用于保存全部错误信息 private List errors ; public boolean invalidate() { boolean flag = true ; // 验证ID if(this.id==null||"".equals(this.id)) { flag = false ; errors.add("ID不能为空!") ; } else { // 进行长度验证:3~10位 if(this.id.length()<3||this.id.length()>10) { flag = false ; errors.add("ID的长度应为3~10位!") ; } } // 验证密码 if(this.password==null||"".equals(this.password)) { flag = false ; errors.add("密码不能为空!") ; } else { // 进行长度验证:3~10位 if(this.password.length()<3||this.password.length()>10) { flag = false ; errors.add("密码的长度应为3~10位!") ; } } return flag ; } public void setErrors(List errors) { this.errors = errors ; } public List getErrors() { return this.errors ; } // 生成getter和setter方法 public void setId(String id) { this.id = id ; } public void setName(String name) { this.name = name ; } public void setPassword(String password) { this.password = password ; } public String getId() { return this.id ; } public String getName() { return this.name ; } public String getPassword() { return this.password ; } }; ----------------------------------PersonDAO.java---------------------- // 本接口定义本项目中所操作person表的全部方法 package org.sky.darkness.dao ; // 使用PersonVo类 import org.sky.darkness.vo.* ; public interface PersonDAO { // 需要一个登陆验证的方法 public boolean isLogin(PersonVo pv) ; } ---------------------PersonDAOImpl.java--------------------------------- // 具体实现DAO接口的类 package org.sky.darkness.daoimpl ; // 需要连接数据库 // 需要对VO的内容进行具体的验证 import java.sql.* ; import org.sky.darkness.dao.* ; import org.sky.darkness.dbc.* ; import org.sky.darkness.vo.* ; public class PersonDAOImpl implements PersonDAO { public boolean isLogin(PersonVo pv) { boolean flag = false ; // 在此处成具体的数据库验证 // 声明一个数据库操作对象 PreparedStatement pstmt = null ; // 声明一个结果集对象 ResultSet rs = null ; // 声明一个SQL变量,用于保存SQL语句 String sql = null ; // DataBaseConnection为具体的数据库连接及关闭操作类 DataBaseConnection dbc = null ; // 连接数据库 dbc = new DataBaseConnection() ; // 编写SQL语句 sql = "SELECT name FROM person WHERE id=? and password=?" ; try { // 实例化数据库操作对象 pstmt = dbc.getConnection().prepareStatement(sql) ; // 设置pstmt的内容,是按ID和密码验证 pstmt.setString(1,pv.getId()) ; pstmt.setString(2,pv.getPassword()) ; // 查询记录 rs = pstmt.executeQuery() ; // 判断是否有记录 if(rs.next()) { // 如果有记录,则执行此段代码 // 用户是合法的,可以登陆 flag = true ; pv.setName(rs.getString(1)) ; } // 依次关闭 rs.close() ; pstmt.close() ; } catch(Exception e) { System.out.println(e) ; } finally { // 最后一定要保证数据库已被关闭 dbc.close() ; } return flag ; } }; -------------------------DAOFactory.java--------------------- // 取得DAO实例的工厂类 package org.sky.darkness.factory ; import org.sky.darkness.dao.* ; import org.sky.darkness.daoimpl.* ; public class DAOFactory { public static PersonDAO getPersonDAOInstance() { return new PersonDAOImpl() ; } }; ---------------------DataBaseConnection.java------------------ // 本类只用于数据库连接及关闭操作 package org.sky.darkness.dbc ; import java.sql.* ; public class DataBaseConnection { // 属性 // 定义数据库操作的常量、对象 // 数据库驱动程序 private final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ; // 数据库连接地址 private final String DBURL = "jdbc:oracle:thin:@localhost:1521:sky" ; // 数据库用户名 private final String DBUSER = "scott" ; // 数据库连接密码 private final String DBPASSWORD = "tiger" ; // 声明一个数据库连接对象 private Connection conn = null ; // 在构造方法之中连接数据库 public DataBaseConnection() { try { // 加载驱动程序 Class.forName(DBDRIVER) ; // 连接数据库 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ; } catch (Exception e) { System.out.println(e) ; } } // 返回一个数据库连接 public Connection getConnection() { /// 返回连接对象 return this.conn ; } // 关闭数据库连接 public void close() { try { this.conn.close() ; } catch (Exception e) { } } };
- 案例-mvc_dao实现留言管理程序.rar (15.1 KB)
- 下载次数: 25
发表评论
-
Flex端使用alivepdf直接导出PDF文件:测试中文有乱码
2011-07-21 16:15 2876Flex端使用alivepdf直接导出PDF文件:测试中文有乱 ... -
关于Project facet Java 6.0 is not supported的问题解决方案
2009-09-21 10:33 2113今天在Eclipse下发布使用java6.0的项目时遇到了“P ... -
JAVA日期格式化
2009-09-04 16:02 1626JAVA日期格式化直接使用SimpleDateFormat类, ... -
MyEclipse7.x下VSS(Visual SourceSafe)的安装和使用
2009-09-01 11:05 2089一、下载VSS插件 可以去官方网站下载,也可以在这里ht ... -
使JfreeChart横坐标数据换行显示
2009-08-31 20:50 6450在jfreechart中如果横坐标的数据太多显示的时候会变成 ... -
Struts2整合Freemarker生成静态页面
2009-08-10 09:42 6346这是生成静态页面的预览: 其对应的模板文件: & ... -
Struts2与Spring整合
2009-08-05 21:51 1323【先引入struts2、spring相 ... -
The method getJspApplicationContext(ServletContext) is undefined for the type
2009-07-08 10:45 10834The method getJspApplicationCo ... -
Java Base64类库学习笔记
2009-06-26 14:12 1868Java Base64 这是一个用于编码和解码(encode/ ... -
base64_encode和base64_decode的JAVA实现
2009-06-26 13:32 8265Base64是网络上最常见的用于传输8Bit字节代码的编码方式 ... -
Struts2参数传递
2009-05-01 08:07 6686要使用struts2,首先需要 ... -
OGNL入门
2009-05-01 07:30 3613package org.darkness.ognl.tes ... -
JSP复习笔记——文件上传
2009-04-28 11:57 1247SmartUpload主要的功能是上传文件 上传图片,可以通过 ... -
JSP复习笔记——第10章 连接数据库 之 JDBC相关
2009-04-28 11:00 1204批处理: import java.sql.*; publ ... -
JSP复习笔记——第10章 连接数据库 之 jsp+DAO实现留言管理程序
2009-04-28 10:57 1875案例-jsp+DAO实现留言管理程序 ------------ ... -
JSP复习笔记——第10章 连接数据库 之 使用JSP+DAO完成用户登陆
2009-04-28 10:52 1014使用JSP+DAO完成用户登陆 import java. ... -
JSP复习笔记——第10章 连接数据库 之 DAO设计模式
2009-04-28 10:51 1469之前的开发可以发现以下问题: 1、 所有的JDBC代码写在JS ... -
JSP复习笔记——第10章 连接数据库 之 JSP+JDBC留言管理程序
2009-04-28 10:48 1375JSP+JDBC留言管理程序 -- 创建表 -- 用户表 ... -
JSP复习笔记——第10章 连接数据库 之 使用JSP基于数据库完成用户登陆程序
2009-04-28 10:45 1377使用JSP基于数据库完成用户登陆程序 使用Statement存 ... -
JSP复习笔记——第10章 连接数据库 之 使用数据源
2009-04-28 10:43 917JDBC基本操作过程: 打开数据库连接 操作数据库 ...
相关推荐
JSP复习笔记——第10章 连接数据库 之 JDBC相关 - 堕落天使 - JavaEye技术网站.mhtJSP复习笔记——第10章 连接数据库 之 JDBC相关 - 堕落天使 - JavaEye技术网站.mht
【JSP学习笔记——初学者的选择】 JSP(JavaServer Pages)是JavaEE平台中用于构建动态网页的应用技术。作为初学者,理解JSP的基本概念和技术特性至关重要。 1. **为何选择JSP?** JSP的出现主要是为了解决...
【JSP源码——jsp+servlet+javaBean实现MVC】是基于Java Web技术构建的一种经典MVC(Model-View-Controller)模式的应用实例。在Web开发中,MVC模式被广泛采用,它将应用程序的业务逻辑、数据处理和用户界面分离,...
MVC(Model-View-Controller)设计模式是一种广泛应用在Web开发中的架构模式,尤其是在Java Web领域,如JSP(JavaServer Pages)项目中。这种模式将应用程序的业务逻辑、用户界面和数据访问分离开来,提高了代码的可...
《JSP毕业设计——MVC设计模式在游戏卡在线销售系统中的应用》 在这个毕业设计项目中,我们探讨了如何运用MVC(Model-View-Controller)设计模式来构建一个基于JSP的游戏卡在线销售系统。JSP(JavaServer Pages)是...
本文将深入探讨如何运用JSP与Servlet技术,基于MVC模式来设计和编写网站。 #### MVC模式解析 MVC模式是一种软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种...
总之,这个JSP交友网站项目涵盖了Web开发的多个方面,从基础的JSP语法到高级的MVC设计模式,从数据库操作到前端交互,从服务器部署到安全防护,都是学习和实践JSP程序设计的绝佳案例。通过这个项目,开发者可以提升...
6. **MVC(Model-View-Controller)模式**:学习如何利用JSP实现MVC设计模式,以分离业务逻辑、数据模型和用户界面。 7. **JSP的生命周期和状态管理**:理解JSP页面从加载到销毁的过程,以及session和cookie等在...
MVC 设计模式是软件架构中的一种经典设计模式,广泛应用于 Java Web 开发中。MVC 模式将应用程序分为三个主要部分:Model(模型)、View(视图)和 Controller(控制器),每个部分都有其特定的职责和功能。 MVC ...
4. **chap09**:这一章可能涵盖更高级的主题,如JSP的MVC设计模式实现,Servlet过滤器和监听器,或者JSP的异常处理和国际化。也可能涉及数据库连接和JDBC操作,因为这是Web开发中的常见需求。 通过这些源文件,学习...
本压缩包"JSP实例开发源码——jsp+servlet+javaBean实现MVC.zip"提供了一个基于JSP、Servlet和JavaBean的MVC(Model-View-Controller)设计模式的实例开发源码。这个模式是Web应用程序开发中的经典架构,用于分离...
Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统 Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统 Jsp+JavaBean+Servlet(MVC设计模式)的寝室管理系统
### 基于MVC设计模式构筑JSP/Servlet+EJB的Web应用 #### 概述 随着互联网的快速发展,Web应用已经从简单的静态内容发布转变为支持动态交互内容的处理,例如在线娱乐、电子商务等。为了满足这些变化,Web应用程序...
本文将深入探讨"Web学习笔记——jsp基础语法"这一主题,重点关注JSP(JavaServer Pages)的基础知识。JSP是Java平台上的动态网页技术,它允许开发者将HTML、XML或其他标记语言与Java代码结合,以创建交互式的Web应用...
9. **MVC模式**:JSP通常与Model(模型)、View(视图)和Controller(控制器)设计模式相结合,实现业务逻辑与表现层的分离,提高代码复用性和可维护性。 10. **JSP与Servlet协作**:Servlet通常用于处理请求和...
【标题】"jsp网络编程——源文件(12——13)"主要涵盖了JSP(Java Server Pages)技术在网络编程中的应用,这部分内容通常包括了第十二章和第十三章的知识点。JSP是Java平台上的动态网页技术,它允许开发者在HTML或...
jsp _MVC模式_课程设计 有利于大家的开发技术
1. **MVC模式**:Struts是一个基于MVC设计模式的开源框架,它将业务逻辑、数据和用户界面分离,使得代码更易于维护和扩展。 2. **ActionServlet**:作为入口点,处理所有HTTP请求,并根据配置文件决定调用哪个Action...
(基于JSP的完整java毕业设计)jsp MVC设计模式应用之游戏卡在线销售系统(论文)(附源码).rar(基于JSP的完整java毕业设计)jsp MVC设计模式应用之游戏卡在线销售系统(论文)(附源码).rar(基于JSP的完整java毕业...