`
百合不是茶
  • 浏览: 345180 次
社区版块
存档分类
最新评论

Servlet的生命周期和MVC设计模式

阅读更多

昨天上课的时候龙哥主要讲了使用MVC模式和oracle的数据分页,昨天上课被oracle的数据分页搞得稀里糊涂的,所以今天重新自己再重新的过一遍,本来是准备今天搞ajax的,没办法咯

 

MVC设计模式,m模型   v 数据显示  c 数据的逻辑处理  ,所有的设计模式都只是一个固定的写法



 
1,Servlet的生命周期和工作原理   (来自网络资源):

Servlet生命周期分为三个阶段:

  1,初始化阶段  调用init()方法

  2,响应客户请求阶段  调用service()方法

  3,终止阶段  调用destroy()方法

 

Servlet初始化阶段:

  在下列时刻Servlet容器装载Servlet:

    1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码:

<loadon-startup>1</loadon-startup>

    2,在Servlet容器启动后,客户首次向Servlet发送请求

    3,Servlet类文件被更新后,重新装载Servlet

  Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。

    

Servlet工作原理:

  首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。

  每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。

 

 

2,MVC模式的实现; 实现数据显示,数据处理,模型三大模块的分离

   步骤:

 

1.定义一个主控Servlet--->[ControlServlet]

2.定义一个处理类的接口--->[ActionInterface]

3 数据库的处理来的javabean保存数据的定义 

4.定义一个登录处理类  --->[LoginAction]

5.在web.xml中配置Servlet,将处理类作为Servlet的初始化参数进行配置

 

 

 

 

代码如下;

 

  1,定义一个主控Servlet--->[controlServlet]

 

package servletMvc;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import configControlServlet.ActionInterface;

/**
 * 
 * @author Administrator 主控制器的Servlet 1.接受请求 2,将数据转发到对应的Servlet中处理 3.转发到试图层
 */
public class controlServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// 获得请求的路径
		String uri = request.getRequestURI();
		uri = uri.substring(uri.lastIndexOf("/") + 1, uri.lastIndexOf("."));
		System.out.println("请求的路径" + uri);

		// 将登陆请求转交给登陆的Servlet处理
		String className = this.getInitParameter(uri);
		System.out.println(className);
    
		//根据反射得到该类的Class对象
		try {
	  //根据获得的包,进行反射得到class对象
        Class c =  Class.forName(className);
        //根据class对象创建对象,返回的是LoginAction类实现的接口
        ActionInterface ac= (ActionInterface)c.newInstance();
        //通过对象调用ac的方法
         String str= ac.exectu(request, response);
        
         //判断LoginAction类中返回的结果是否null,不为null就会返回一个地址
        if(str!=null){
        	//跳转
        	request.getRequestDispatcher(str).forward(request, response);
        }
        
		} catch (Exception e) {
			e.printStackTrace();
			
			request.getRequestDispatcher("Error.jsp").forward(request, response);
		}
	}
}

 

 

2.定义一个处理类的接口--->[ActionInterface]

  

package configControlServlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
 *每个类都必须要实现这个接口 
 */
public interface ActionInterface {
 
	public String exectu(HttpServletRequest request,
	HttpServletResponse response) throws IOException, ServletException;
}

 

 

3 数据库的处理来的javabean保存数据的定义 

   3,1  数据库的连接单例模式

 

package Servlet.db;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * 
 * 
 * @author Administrator
 *数据库的连接类
 */
public class DBUtil {
	  
   public static Connection conn =null ;
   
	private  DBUtil(){
		
	}
    
   public static Connection getConn(){  
	   if(conn!=null){
		   return conn;
	}
	   try{
		   Class.forName("oracle.jdbc.driver.OracleDriver");
		   String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
		  conn= DriverManager.getConnection(url,"SCOTT", "tiger");
		   return conn;
	   }catch(Exception  e){
		   e.printStackTrace();
		   return null;
	   }
	   
   }

}

 

 

 

3,2 处理数据查询的类

 

package Servlet.db;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import Servlet.bean.User;
//处理数据查询的类
public class UserDao {

	public User getCheck(String userName,String userPwd){
		//获得连接对象
		Connection conn=DBUtil.getConn();
		//定义sql语句
		String sql="select usermailandphone,userpwd from bookeuser where usermailandphone=? and userPwd=?";
		//预编译
		try{
		PreparedStatement pstm=conn.prepareStatement(sql);
		pstm.setString(1, userName);
		pstm.setString(2, userPwd);
		ResultSet rs=pstm.executeQuery();
		System.out.println(sql);
		if(rs.next()){
			//创建对象,使用javaBean来处理数据
			User user= new User();
			user.setUserName(rs.getString(1));
			user.setUserPwd(rs.getString(2));
			return user;
		}
		}catch(Exception e){
			e.printStackTrace();
		}	
		return null;
	}
}

 

 

  3,3保存账号和密码的类javaBean

   

package Servlet.bean;
/**
 * 
 * @author Administrator
 *保存账号和密码的类  javaBean
 */
public class User {

	private String userName;
	private String userPwd;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserPwd() {
		return userPwd;
	}

	public void setUserPwd(String userPwd) {
		this.userPwd = userPwd;
	}

}

 

 

 

4.定义一个登录处理类  --->[LoginAction]

  

package configControlServlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import Servlet.bean.User;
import Servlet.db.UserDao;

/**
 * 
 * @author Administrator
 *
 */
public class LoginAction implements ActionInterface{
    UserDao dao = new UserDao();
	@Override
	public String exectu(HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		System.out.println("达到了登陆的Servlet");
		 //获取登陆的用户和密码
		String userName = request.getParameter("usernames");
		String userPwd=request.getParameter("userpwd");
		//连接数据库查询
		User user =dao.getCheck(userName, userPwd);
		if(user!=null){
			//保存绘画中
			HttpSession session=request.getSession();
			session.setAttribute("user", user);
			//返回登陆成功的页面
			return "LoginSuss.jsp";	
		}
		//返回到登陆失败的页面
		return "Error.jsp";	
	}
}

 

 

    

5.在web.xml中配置Servlet,将处理类作为Servlet的初始化参数进行配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>MVC</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  <description>主控制的Servlet</description>
  <servlet-name>controlServlet</servlet-name>
  <servlet-class>servletMvc.controlServlet</servlet-class>
  
    <init-param>
       <description>处理登陆的登陆的servlet</description>
        <param-name>login</param-name>
       <param-value>configControlServlet.LoginAction</param-value>
    </init-param>

  </servlet>
  
  <servlet-mapping>
  <servlet-name>controlServlet</servlet-name>
  <url-pattern>*.ser</url-pattern>
 </servlet-mapping> 
</web-app>

 

6,jsp代码;简单的显示页面这里就不写了

 

 

上面MVC全部的代码分析



 

 

 

 

  • 大小: 62 KB
  • 大小: 24 KB
0
0
分享到:
评论

相关推荐

    小区物业管理系统web项目,带Mysql数据库sql文件,带配置说明书,采用mvc设计模式,使用html,js,jsp等

    1、 Servlet容器:Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP(JSP本质上是一个Servlet)的生命周期,以及管理它们的共享数据。 2、 Tomcat服务器:Tomcat 是一个免费的开放源代码的Servlet容器...

    培训资料_servlet

    1、Servlet基本概念 2、Servlet基本运用、配置 3、Servlet生命周期 4、Servlet线程安全 5、Model2与MVC设计模式 6、过滤器 7、分页 8、上传组件SmartUpload 9、监听器 10、配置Tomcat连接池 11、实用技术

    java面试大全视频版

    设计模式和常用的设计模式 Java面试题16.http get post请求的区别 Java面试题17.说说你对Servlet的理解 Java面试题18.Servlet的生命周期 Java面试题19.Servlet中forward和redirect的区别 Java面试题20.jsp和Servlet...

    Java Web程序设计——图书借阅网站的实现——图书信息实验.docx

    1、实现Servlet的基本特性、生命周期和编程方式; 2、实现JSP的基本特性和编程方式; 3、实现JavaBean的基本特性和编程方式;; 4、实现MVC和DAO设计模式的编程特性; 5、使用MVC和DAO设计模式设计图书借阅网站中...

    Java Web程序设计——图书借阅网站的实现——读者信息实验.docx

    1、实现Servlet的基本特性、生命周期和编程方式; 2、实现JSP的基本特性和编程方式; 3、实现JavaBean的基本特性和编程方式;; 4、实现MVC和DAO设计模式的编程特性; 5、使用MVC和DAO设计模式设计图书借阅网站中...

    Java Web程序设计_图书借阅网站的实现——图书借还实验.docx

    1、实现Servlet的基本特性、生命周期和编程方式; 2、实现JSP的基本特性和编程方式; 3、实现JavaBean的基本特性和编程方式;; 4、实现MVC和DAO设计模式的编程特性; 5、使用MVC和DAO设计模式设计图书借阅网站中...

    JavaWeb实验完成作品.zip

    1、实现Servlet的基本特性、生命周期和编程方式; 2、实现JSP的基本特性和编程方式; 3、实现JavaBean的基本特性和编程方式;; 4、实现MVC和DAO设计模式的编程特性; 5、使用MVC和DAO设计模式设计图书借阅网站中...

    V512工作室Java web的ppt

    第17章 讲解DAO设计模式和分页显示,同时还讲解了Displaytag与Pager标记库。 第18章讲解与Java Web编程有关的主要的字符集和编码方法,还讲解了如何应对Java Web编程中出现的各种乱码问题。 第19章 讲解Java Web应用...

    吴天雄--JavaWeb完整笔记.doc

    模块四:MVC设计模式(三层架构、javaBean);模块五:EL表达式(运算、获取值、隐式对象);模块六:JSTL(if、choose、foreach);模块七:分页(复杂条件查询,pageBean的分页参数、附有前端和后台代码);模块八...

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    设计模式和常用的设计模式 Java面试题16.http get post请求的区别 Java面试题17.说说你对Servlet的理解 Java面试题18.Servlet的生命周期 Java面试题19.Servlet中forward和redirect的区别 Java面试题20.jsp和Servlet...

    韩顺平sevlet,jsp视频教程知识点.txt

    视频描述: (-) servlet体系结构的介绍(二) servlet的网络拓扑结构(三) servlet的几个实例(四) servlet的生命周期(五) 一个简单的用户登录系统 韩顺平 j2ee视频实战教程servlet第2讲(下集).wmv 视频描述-) servlet...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    《JavaServer Faces 2.0完全参考手册》对所有jsf功能都进行了解释,包括请求处理生命周期、托管bean、页面导航、组件开发、ajax、验证器、国际化和安全。贯穿全书的专家组意见提供了关于jsf设计的内部信息。 推荐...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版).part1

    《JavaServer Faces 2.0完全参考手册》对所有jsf功能都进行了解释,包括请求处理生命周期、托管bean、页面导航、组件开发、ajax、验证器、国际化和安全。贯穿全书的专家组意见提供了关于jsf设计的内部信息。 推荐...

    一篇不错的关于java工作流方面讲解及代码

    2.2.1 MVC设计思想 4 2.2.2 MVC的具体实现 5 2.2.3 MVC的不足 6 2.3 JSP技术介绍 6 2.3.1 JSP的运行原理 7 2.3.2 JSP的生命周期 8 2.3.3 Servlet和JavaBean技术介绍 8 2.3.4 Java 虚拟机 9 2.3.5 JSP访问SQL Server ...

    java实现工作流

    2.2.1 MVC设计思想 4 2.2.2 MVC的具体实现 5 2.2.3 MVC的不足 6 2.3 JSP技术介绍 6 2.3.1 JSP的运行原理 7 2.3.2 JSP的生命周期 8 2.3.3 Servlet和JavaBean技术介绍 8 2.3.4 Java 虚拟机 9 2.3.5 JSP访问SQL Server ...

    J2EE应用开发详解

    39 3.6 反射机制在Hibernate中的应用 42 3.7 小结 46 第4章 Servlet技术 47 4.1 Servlet简介 47 4.1.1 Servlet的特点 47 4.1.2 Servlet的优势 48 4.1.3 Servlet的工作过程 49 4.1.4 Servlet的生命周期 50 4.2 开发和...

    千方百计笔试题大全

    232、说出Servlet的生命周期,并说出Servlet和CGI的区别。 55 233、说出在JSP页面里是怎么分页的? 55 234、存储过程和函数的区别 55 235、事务是什么? 55 236、游标的作用?如何知道游标已经到了最后? 55 237、...

    java面试宝典

    232、说出Servlet的生命周期,并说出Servlet和CGI的区别。 55 233、说出在JSP页面里是怎么分页的? 55 234、存储过程和函数的区别 55 235、事务是什么? 55 236、游标的作用?如何知道游标已经到了最后? 55 237、...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    2.8 JSF的运行流程和生命周期 109 2.8.1 恢复视图阶段 110 2.8.2 应用请求值阶段 110 2.8.3 处理输入校验阶段 111 2.8.4 更新模型的值阶段 111 2.8.5 调用应用阶段 111 2.8.6 生成响应阶段 111 2.9 利用JSF的消息 ...

    Java Web程序设计教程

    5.1.2mvc设计模式 81 5.1.3struts2框架的mvc架构 82 5.2struts2概览 84 5.2.1struts2的工作流程 84 5.2.2struts2的简单应用 85 5.3struts2基础 87 5.3.1action详解 88 5.3.2结果与视图 91 5.3.3struts.xml的...

Global site tag (gtag.js) - Google Analytics