JavaWeb中最简单的MVC设计
2013-03-14 14:03
274 查看
MVC模式:JSP+JavaBean+Servlet模式
此模式适合开发复杂的web应用程序,在这种模式下,JavaBean用于封装业务数据,JSP负责显示数据和提交数据,Servlet负责接收数据和调用模型层的业务逻辑。
简单案例:
实现功能:添加一个用户username,并可以显示出用户。
设计思路:1.有add.jsp和show.jsp两个页面分别用于添加用户和显示用户。
2.有实体类User和DAO类
DAO类也就是对数据的一些操作方法。
3.用AddServlet.java和ShowServlet.java分别处理add.jsp接收的数据和 show.jsp显示数据
在MVC模式中我们一般是先从底层开发(Model)也就是先开发实体类和DAO类(处理业务逻辑和访问数据),然后在开发(Control层)servlet用来接收数据和调用Model层的业务逻辑。最后在开发(View层)JSP用来显示数据和提交数据。
所以按照步骤从底向上开发。
1.创建表t_user(用MySql数据库)
create table t_user(id int auto_increment primary key, username varchar(50));
2.在MyEclipse把mysql的jar包导入到工程名为mvc里。
3.创建工具类DBUtil.java来实现对数据库的操作。
package com.jxau.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
//JDBC的封装类
public class DBUtil {
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("驱动加载失败");
}
}
public static Connection getConn(){
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql:///test", "root", "root");
} catch (SQLException e) {
System.out.println("连接失败");
}
return conn;
}
public static PreparedStatement getPstmt(Connection conn,String sql){
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(sql);
} catch (SQLException e) {
System.out.println("发送语句失败");
}
return pstmt;
}
public static ResultSet getRs(PreparedStatement pstmt){
ResultSet rs = null;
try {
rs = pstmt.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
public static void close(ResultSet rs ,PreparedStatement pstmt,Connection conn){
if(rs!=null){
try {
rs.close();
rs = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pstmt!=null){
try {
pstmt.close();
pstmt = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
conn = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4.创建实体类User
package com.jxau.pojo;
//创建实体类User
public class User {
4000
private int id ;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
5.开发DAO层 :接口UserDao
package com.jxau.dao;
import java.util.List;
import com.jxau.pojo.User;
//对user操作的接口
public interface UserDao {
//对User进行添加操作
public void saveUser(User user);
//对User进行查询操作
public List<User> getUser();
}
6.dao的实现类UserDaoImpl.java
package com.jxau.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.jxau.dao.UserDao;
import com.jxau.pojo.User;
import com.jxau.util.*;
//对user操作的实现类
public class UserDaoImpl implements UserDao {
@Override
public void saveUser(User user) {
Connection conn = DBUtil.getConn();
PreparedStatement pstmt = DBUtil.getPstmt(conn, "insert into t_user values(null,?)");
try {
pstmt.setString(1, user.getUsername());
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.close(null, pstmt, conn);
}
}
@Override
public List<User> getUser() {
List<User> users = new ArrayList<User>();
Connection conn = DBUtil.getConn();
PreparedStatement pstmt = DBUtil.getPstmt(conn, "select * from t_user");
try {
pstmt.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ResultSet rs = DBUtil.getRs(pstmt);
try {
while(rs.next()){
User user = new User();
user.setUsername(rs.getString("username"));
users.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.close(rs, pstmt, conn);
}
return users;
}
}
7.开发Control层:Servlet
一、创建AddServlet.java用来添加用户
package com.jxau.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jxau.dao.impl.UserDaoImpl;
import com.jxau.pojo.User;
public class AddUser extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//创建一个用户
User user = new User();
//创建一个dao类
UserDaoImpl userdaoimpl = new UserDaoImpl();
//接收从jsp传过来的参数
String username = request.getParameter("username");
//添加到user中
user.setUsername(username);
//保存到dao类
userdaoimpl.saveUser(user);
//用来告知用户添加成功。
response.sendRedirect("./success.jsp");
}
}
二、创建showServlet.java用来显示用户
package com.jxau.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jxau.dao.impl.UserDaoImpl;
import com.jxau.pojo.User;
public class ShowServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//得到所有的用户
List<User> users = new UserDaoImpl().getUser();
//放入request
request.setAttribute("users",users);
//请求转发
request.getRequestDispatcher("./show.jsp").forward(request, response);
}
}
8.开发view层:JSP
一、add.jsp用来添加用户
核心代码如下:
<body>
<form action="./addUser.do" method="post">
username:<input type="text" name="username"><input type="submit" value="add">
</form>
</body>
二、创建show.jsp用来显示用户
注意:先要判断用户是否第一次访问show.jsp
<%
List<User> users =(List<User>)request.getAttribute("users");//得到所有的用户
if(users == null){
//如果是第一次进来
%>
<jsp:forward page="./show.do"></jsp:forward>
<%
return;
}
%>
如果用户第二次进入此jsp就执行下面的代码:
<body>
<table align="center" border=1>
<tr>
<td>编号</td>
<td>姓名</td>
</tr>
<%for(Iterator<User> i = users.iterator();i.hasNext();){
User user = i.next();
%>
<tr>
<td><%=user.getId()%></td>
<td><%=user.getUsername()%></td>
</tr>
<%} %>
</table>
</body>
9.使用浏览器测试。
so一个简单的MVC设计模式就开发成功!
MVC设计模式最主要还是体现分布式开发原则。即不能跨层传输数据。
小弟刚学MVC模式,有哪里不足之处欢迎大家拍砖。
此模式适合开发复杂的web应用程序,在这种模式下,JavaBean用于封装业务数据,JSP负责显示数据和提交数据,Servlet负责接收数据和调用模型层的业务逻辑。
简单案例:
实现功能:添加一个用户username,并可以显示出用户。
设计思路:1.有add.jsp和show.jsp两个页面分别用于添加用户和显示用户。
2.有实体类User和DAO类
DAO类也就是对数据的一些操作方法。
3.用AddServlet.java和ShowServlet.java分别处理add.jsp接收的数据和 show.jsp显示数据
在MVC模式中我们一般是先从底层开发(Model)也就是先开发实体类和DAO类(处理业务逻辑和访问数据),然后在开发(Control层)servlet用来接收数据和调用Model层的业务逻辑。最后在开发(View层)JSP用来显示数据和提交数据。
所以按照步骤从底向上开发。
1.创建表t_user(用MySql数据库)
create table t_user(id int auto_increment primary key, username varchar(50));
2.在MyEclipse把mysql的jar包导入到工程名为mvc里。
3.创建工具类DBUtil.java来实现对数据库的操作。
package com.jxau.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
//JDBC的封装类
public class DBUtil {
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("驱动加载失败");
}
}
public static Connection getConn(){
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql:///test", "root", "root");
} catch (SQLException e) {
System.out.println("连接失败");
}
return conn;
}
public static PreparedStatement getPstmt(Connection conn,String sql){
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(sql);
} catch (SQLException e) {
System.out.println("发送语句失败");
}
return pstmt;
}
public static ResultSet getRs(PreparedStatement pstmt){
ResultSet rs = null;
try {
rs = pstmt.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
public static void close(ResultSet rs ,PreparedStatement pstmt,Connection conn){
if(rs!=null){
try {
rs.close();
rs = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pstmt!=null){
try {
pstmt.close();
pstmt = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
conn = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4.创建实体类User
package com.jxau.pojo;
//创建实体类User
public class User {
4000
private int id ;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
5.开发DAO层 :接口UserDao
package com.jxau.dao;
import java.util.List;
import com.jxau.pojo.User;
//对user操作的接口
public interface UserDao {
//对User进行添加操作
public void saveUser(User user);
//对User进行查询操作
public List<User> getUser();
}
6.dao的实现类UserDaoImpl.java
package com.jxau.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.jxau.dao.UserDao;
import com.jxau.pojo.User;
import com.jxau.util.*;
//对user操作的实现类
public class UserDaoImpl implements UserDao {
@Override
public void saveUser(User user) {
Connection conn = DBUtil.getConn();
PreparedStatement pstmt = DBUtil.getPstmt(conn, "insert into t_user values(null,?)");
try {
pstmt.setString(1, user.getUsername());
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.close(null, pstmt, conn);
}
}
@Override
public List<User> getUser() {
List<User> users = new ArrayList<User>();
Connection conn = DBUtil.getConn();
PreparedStatement pstmt = DBUtil.getPstmt(conn, "select * from t_user");
try {
pstmt.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ResultSet rs = DBUtil.getRs(pstmt);
try {
while(rs.next()){
User user = new User();
user.setUsername(rs.getString("username"));
users.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.close(rs, pstmt, conn);
}
return users;
}
}
7.开发Control层:Servlet
一、创建AddServlet.java用来添加用户
package com.jxau.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jxau.dao.impl.UserDaoImpl;
import com.jxau.pojo.User;
public class AddUser extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//创建一个用户
User user = new User();
//创建一个dao类
UserDaoImpl userdaoimpl = new UserDaoImpl();
//接收从jsp传过来的参数
String username = request.getParameter("username");
//添加到user中
user.setUsername(username);
//保存到dao类
userdaoimpl.saveUser(user);
//用来告知用户添加成功。
response.sendRedirect("./success.jsp");
}
}
二、创建showServlet.java用来显示用户
package com.jxau.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jxau.dao.impl.UserDaoImpl;
import com.jxau.pojo.User;
public class ShowServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//得到所有的用户
List<User> users = new UserDaoImpl().getUser();
//放入request
request.setAttribute("users",users);
//请求转发
request.getRequestDispatcher("./show.jsp").forward(request, response);
}
}
8.开发view层:JSP
一、add.jsp用来添加用户
核心代码如下:
<body>
<form action="./addUser.do" method="post">
username:<input type="text" name="username"><input type="submit" value="add">
</form>
</body>
二、创建show.jsp用来显示用户
注意:先要判断用户是否第一次访问show.jsp
<%
List<User> users =(List<User>)request.getAttribute("users");//得到所有的用户
if(users == null){
//如果是第一次进来
%>
<jsp:forward page="./show.do"></jsp:forward>
<%
return;
}
%>
如果用户第二次进入此jsp就执行下面的代码:
<body>
<table align="center" border=1>
<tr>
<td>编号</td>
<td>姓名</td>
</tr>
<%for(Iterator<User> i = users.iterator();i.hasNext();){
User user = i.next();
%>
<tr>
<td><%=user.getId()%></td>
<td><%=user.getUsername()%></td>
</tr>
<%} %>
</table>
</body>
9.使用浏览器测试。
so一个简单的MVC设计模式就开发成功!
MVC设计模式最主要还是体现分布式开发原则。即不能跨层传输数据。
小弟刚学MVC模式,有哪里不足之处欢迎大家拍砖。
相关文章推荐
- 浅谈JavaWeb的简单设计架构MVC
- 简单干净的C# MVC设计案例:BrothersDropdownList()
- 第六章:通过mvc模型设计一个简单的留言系统
- 对Android中设计模式MVC,MVP,MVVM的简单理解
- MVC模型和JavaWeb模型入门_简单的注册登录案例
- Golanger Web Framework(框架简单实现了MVC的设计方式)
- 对MVC架构简单概述设计(三)
- [javaEE] javaweb的mvc设计思想
- Jetty上的简单MVC容器设计
- 简单的php-mvc设计
- 学习笔记_Java_day12_设计模式MVC(13).JavaWeb的三层框架(14)
- Asp.net MVC 仿照博客园的简单网站首页 列表设计
- MVC的设计模式在JavaWeb中的实现
- 仿tp mvc基本设计与简单实现
- python代码简单模拟Java中的MVC设计
- 如何简单的理解JavaWeb中的mvc?
- MVC设计思想简单介绍
- 结合一个简单的项目分析MVC设计流程
- MVC的设计模式在JavaWeb中的实现
- 23种设计模式的简单实现(上 1-12)