javaWeb中servlet开发(5)——WEB开发模式:Mode I与Mode II

1、servlet开发

2、model I模式

客户端通过访问JSP,调用里面的javabean,而通过javabean调用处理数据库的操作,javabean中有专门处理数据库的操作,数据库主要以DAO为主,出去了数据库外也包含业务处理。

3、model II 开发模式

servlet特点:可以接收用户的请求,还可以调用Java程序,由于本身就是以Java程序运行的,所以肯定要比jsp性能高,而且安全性能高。

最终,servlet所有的操作内容都有交个jsp显示,这样一来,servlet缺点就避免了。

JavaBean完成具体的单个功能,jsp完成显示功能,servlet负责连接jsp和javabean。

jsp+servlet+javabean,这样的设计非常适合大型的项目开发,而且维护方便。

3、MVC设计模式

4、MVC 设计模式的应用

5.1 sql实现

CREATE TABLE user(
	userid			VARCHAR(30)		PRIMARY KEY ,
	name			VARCHAR(30)		NOT NULL ,
	password		VARCHAR(32)		NOT NULL
) ;
/*======================= 插入测试数据 =======================*/
INSERT INTO user (userid,name,password) VALUES (‘admin‘,‘administrator‘,‘admin‘) ;

5.2 数据库连接

public class DatabaseConnection {
	private static final String DBDRIVER = "com.mysql.jdbc.Driver";
	private static final String DBURL = "jdbc:mysql://localhost/struts?useUnicode=true&characterEncoding=utf-8";
	private static final String DBUSER = "root";
	private static final String DBPASSWORD = "alice";
	private Connection conn;
	private static int count = 0;

	public DatabaseConnection() {
		System.out.println("************* count = " + this.count++);
		try {
			Class.forName(DBDRIVER);
			this.conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public Connection getConnection() {
		return this.conn;
	}

	public void close() {
		if (this.conn != null) {
			try {
				this.conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

  5.3 vo类

public class User {
    private String userid ;
    private String name ;
    private String password ;

    public void setUserid(String userid){
        this.userid = userid ;
    }
    public void setName(String name){
        this.name = name ;
    }
    public void setPassword(String password){
        this.password = password ;
    }
    public String getUserid(){
        return this.userid ;
    }
    public String getName(){
        return this.name ;
    }
    public String getPassword(){
        return this.password ;
    }
}

5.4 IUSERDAO接口

public interface IUserDAO {
	// 现在完成的是登陆验证,那么登陆操作只有两种返回结果
	public boolean findLogin(User user) throws Exception ;
}

 5.5 DAO接口实现类

public class UserDAOImpl implements IUserDAO {
    private Connection conn = null ;
    private PreparedStatement pstmt = null ;
    public UserDAOImpl(Connection conn){
        this.conn = conn ;
    }
    public boolean findLogin(User user) throws Exception{
        boolean flag = false ;
        String sql = "SELECT name FROM user WHERE userid=? AND password=?" ;
        this.pstmt = this.conn.prepareStatement(sql) ;
        this.pstmt.setString(1,user.getUserid()) ;
        this.pstmt.setString(2,user.getPassword()) ;
        ResultSet rs = this.pstmt.executeQuery() ;
        if(rs.next()){
            user.setName(rs.getString(1)) ;    // 取出一个用户的真实姓名
            flag = true ;
        }
        this.pstmt.close() ;
        return flag ;
    }
} 

5.6 UserDAOProxy:定义代理,负责数据库的打开和关闭并调用真实主体

public class UserDAOProxy implements IUserDAO {
    private DatabaseConnection dbc = null ;
    private IUserDAO dao = null ;
    public UserDAOProxy(){
        try{
            this.dbc = new DatabaseConnection() ;
        }catch(Exception e){
            e.printStackTrace() ;
        }
        this.dao = new UserDAOImpl(dbc.getConnection()) ;
    }
    public boolean findLogin(User user) throws Exception{
        boolean flag = false ;
        try{
            flag = this.dao.findLogin(user) ;    // 调用真实主体,完成操作
        }catch(Exception e){
            throw e ;
        }finally{
            this.dbc.close() ;
        }
        return flag ;
    }
} 

5.7 Factory工厂类:取得DAO接口的实例化

public class DAOFactory {
    public static IUserDAO getIUserDAOInstance(){
        return new UserDAOProxy() ;
    }
}

5.8 servlet类

接收请求参数,进行参数验证,调用DAO 完成具体登录验证,并根据DAO验证结果返回登录信息。

public class LoginServlet extends HttpServlet {
    public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
        String path = "login.jsp" ;
        String userid = req.getParameter("userid") ;
        String userpass = req.getParameter("userpass") ;
        List<String> info = new ArrayList<String>() ;    // 收集错误
        if(userid==null || "".equals(userid)){
            info.add("用户id不能为空!") ;
        }
        if(userpass==null || "".equals(userpass)){
            info.add("密码不能为空!") ;
        }
        if(info.size()==0){    // 里面没有记录任何的错误
            User user = new User() ;
            user.setUserid(userid) ;
            user.setPassword(userpass) ;
            try{
                if(DAOFactory.getIUserDAOInstance().findLogin(user)){
                    info.add("用户登陆成功,欢迎" + user.getName() + "光临!") ;
                } else {
                    info.add("用户登陆失败,错误的用户名和密码!") ;
                }
            }catch(Exception e){
                e.printStackTrace() ;
            }
        }
        req.setAttribute("info",info) ;
        req.getRequestDispatcher(path).forward(req,resp) ;
    }
    public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
        this.doGet(req,resp) ;
    }
<script language="javascript">
	function validate(f){
		if(!(/^\w{5,15}$/.test(f.userid.value))){
			alert("用户ID必须是5~15位!") ;
			f.userid.focus() ;
			return false ;
		}
		if(!(/^\w{5,15}$/.test(f.userpass.value))){
			alert("密码必须是5~15位!") ;
			f.userpass.focus() ;
			return false ;
		}
	}
</script>
<%
	request.setCharacterEncoding("GBK") ;
%>
<%
	List<String> info = (List<String>) request.getAttribute("info") ;
	if(info != null){	// 有信息返回
		Iterator<String> iter = info.iterator() ;
		while(iter.hasNext()){
%>
			<h4><%=iter.next()%></h4>
<%
		}
	}
%>
<form action="LoginServlet" method="post" onSubmit="return validate(this)">
	用户ID:<input type="text" name="userid"><br>
	密  码:<input type="password" name="userpass"><br>
	<input type="submit" value="登陆">
	<input type="reset" value="重置">
</form>
</body>
</html>

  

时间: 2024-10-27 08:23:08

javaWeb中servlet开发(5)——WEB开发模式:Mode I与Mode II的相关文章

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX

Manual | BSD手册| Linux手册 | 数据库手册 | 编程开发手册 | WEB开发手册 | 软件应用手册 | 网络技术手册 | GNU手册

豆豆手册 □ BSD手册 □ Linux手册 □ 数据库手册 □ 编程开发手册 □ WEB开发手册 □ 软件应用手册 □ 网络技术手册 □ GNU手册 在线手册 首 页 BSD手册 ·FreeBSD Handbook 简体中文版 ·NetBSD Internals ·NetBSD 指导手册 ·FreeBSD Porter 手册 ·FREEBSD 使用者手册 ·FreeBSD 5.x 架设管理与应用 ·FreeBSD 6.0架设管理与应用 ·OpenBSD FAQ中文版 Linux手册 ·Turb

如何OE开发中实现一个在web开发中的小效果

近期公司里面有一个需求,就是当业务人员点击订单列表中的某一条时希望打开一个新的窗口动作,然后把这一条记录中的某些值带过去,这样一个效果在web开发中很简单,或许就是分分钟的事情.但是在客户端这种开发中确实不易,尤其是OpenERP这种有诸多限制的框架里面. 那么如何实现呢? 这个地方我的想法主要分两步:1.打开一个新的窗口(Form视图的)2.把值带入到新的窗口里面. 第一步里面我按日常的操作在view里面创建一个向导(wizard),然后给name和id赋值,然后在创建一个wizard文件(名

javaweb学习总结十五(web开发的相关概念以及常用服务器介绍)

一:java web开发的相关概念 1:web分为静态web和动态web 2:模拟web服务器 web页面如果想让外部网络访问,必须通过网络程序读取资源,流程: a:用户通过浏览器访问网络程序 b:网络程序读取资源,然后响应给用户 代码: 1 /** 2 * 3 */ 4 package com.hlcui.testweb; 5 6 import java.io.FileInputStream; 7 import java.io.IOException; 8 import java.io.Out

APP开发和web开发的区别

1.web开发: 1.浏览器直接访问,协议是http,基本都是PC访问,也就是在家和办公场合,网络比较好. 2.web如果多个服务集成的话使用的是ESB来统一集成 2.APP开发 1.手机app客户端访问,协议可以自定义,也可是http,基本都是手机终端,网络是好是坏.并发要比PC大,因为手机容易携带,访问量大,请求都是多个服务提供api.解决的方法就是存在一个网关服务. ==============================================================

iOS开发 Android开发 移动Web开发

通常,来自移动端的测试需求涉及2类: iOS/Android 移动端H5 因此,需要把基础的概念清清楚楚地落地 Client端 Server端 平台描述 语言 相同 差别 / web平台 web平台开发 基于浏览器的网页语言技术 html/css/js 本质相同 开发框架不同, 以解决在移动设备上的: 1.  适配问题 2.  支持一些特殊操作 3.  功能调用 / 移动设备平台 移动Web开发 (web app)[Mobile web app] 介于二者之间 html5 / Android平台

javaWeb中servlet开发——过滤器

servlet开发--过滤器(filter) servlet有三种,分为简单servlet.过滤器servlet.监听servlet 简单servlet是作为一种程序所必须的开发结构保存的,继承httpServlet类形式. 过滤器servlet和监听servlet不是程序所必须的. 要想完成一个过滤器的开发,首先必须让一个类实现Filter接口,此接口是javax.serclet中的.根据这个包的特点可发现,此接口的主要功能是完成公共协议的操作. Filter接口中的方法: 简单的servle

javaWeb中servlet开发——监听器

监听的定义 对application的监听 application是servletContext接口的对象,表示的是整个上下文环境,如果要想实现对application监听则可以使用如下两个接口: servletContextListener:是对整个上下文环境的监听 servletContextAttrubiteListener:是对属性的监听. import javax.servlet.* ; public class ServletContextListenerDemo implement

javaWeb中servlet开发(3)——Servlet生命周期

生命周期:是一个程序的存在周期,servlet由于是受容器的管理,所以容器来决定其生命周期 1.servlet生命周期 2.servlet生命周期对应的方法 3.servlet生命周期代码 public class LifeCycleServlet extends HttpServlet{ public void init() throws ServletException{ System.out.println("** 1.Servlet初始化 --> init()") ; }