您的位置:首页 > 编程语言 > Java开发

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模式,有哪里不足之处欢迎大家拍砖。

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息