昨天上课的时候龙哥主要讲了使用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全部的代码分析