jsp的三层架构

学了有两年的.net了,它的三层架构很好用。现在学jsp,我们一样可以用三层架构来开发。下面详细介绍

1)创建数据库

drop table MyUser
create table MyUser
(
id int identity(1,1) not null,
name Varchar(50),
psw Varchar(50),
nickname Varchar(50),
age int,
email Varchar(50)
)

2)model层

package model;

public class MyUser {
 private int id;
 private String name;
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPsw() {
  return psw;
 }
 public void setPsw(String psw) {
  this.psw = psw;
 }
 public String getNickname() {
  return nickname;
 }
 public void setNickname(String nickname) {
  this.nickname = nickname;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public String getEmail() {
  return email;
 }
 public void setEmail(String email) {
  this.email = email;
 }
 private String psw;
 private String nickname;
 private int age;
 private String email;

}

3)数据库的链接

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DB {
 public static Connection createConn() {
  Connection conn = null;
  try {
   Class.forName("net.sourceforge.jtds.jdbc.Driver");
   conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/jsp", "sa", "123456");
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return conn;
 }
 
 public static PreparedStatement prepare(Connection conn, String sql) {
  PreparedStatement ps = null;
  try {
   ps = conn.prepareStatement(sql);
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return ps;
 }
 
 public static void close(Connection conn) {
  
  try {
   conn.close();
   conn = null;
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
 public static void close(Statement stmt) {
  try {
   stmt.close();
   stmt = null;
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
 public static void close(ResultSet rs) {
  try {
   rs.close();
   rs = null;
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
}

4)service层

package service;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import util.DB;
import model.MyUser;

public class MyUserService {

 public static void add(MyUser user) {
  Connection conn = DB.createConn();
  String sql = "insert into MyUser values(?,?,?,?,?)";
  PreparedStatement ps = DB.prepare(conn, sql);
  try {
   ps.setString(1, user.getName());
   ps.setString(2, user.getPsw());
   ps.setString(3, user.getNickname());
   ps.setInt(4, user.getAge());
   ps.setString(5, user.getEmail());
   ps.executeUpdate();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  DB.close(ps);
  DB.close(conn);
 }
 
 public static MyUser getByName(String name){
  Connection conn = DB.createConn();
  String sql = "select * from MyUser where name = ?";
  PreparedStatement ps =DB.prepare(conn, sql);
  MyUser user=null;
  try {
   ps.setString(1, name);
   ResultSet rs = ps.executeQuery();
  
   if(rs.next()) {
    user = new MyUser();
    user.setId(rs.getInt("id"));
    user.setName(rs.getString("name"));
    user.setPsw(rs.getString("psw"));
    user.setNickname(rs.getString("nickname"));
    user.setAge(rs.getInt("age"));
    user.setEmail(rs.getString("email"));

   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
  DB.close(ps);
  DB.close(conn);
  return user;
 }
}

5)页面层调用service层的方法就行了

<%
String name=request.getParameter("name");
String psw=request.getParameter("psw");
String nickname=request.getParameter("nickname");
int age=Integer.valueOf(request.getParameter("age"));
String email=request.getParameter("email");
MyUser newUser=new MyUser();
newUser.setName(name);
newUser.setPsw(psw);
newUser.setNickname(nickname);
newUser.setAge(age);
newUser.setEmail(email);

MyUser user=MyUserService.getByName(name);
if(user!=null){ %>
<jsp:forward page="error.jsp"></jsp:forward>
<%}
else
{
 MyUserService.add(newUser);
%>
<jsp:forward page="success.jsp"></jsp:forward>
<% 

}
%>

 

....

....

....

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSP 三层架构通常包含以下三层: 1. 表现层(Presentation Layer):负责展示数据,接收用户输入,通常使用 JSP 和 Servlet 实现。 2. 业务逻辑层(Business Layer):负责处理业务逻辑,包括数据处理、数据校验、调用其他系统等,通常使用 Java 类实现。 3. 数据访问层(Data Access Layer):负责与数据库交互,进行数据查询、更新等操作,通常使用 JDBC 或者 ORM 框架实现。 以下是一个简单的 JSP 三层架构示例: 1. Presentation Layer: ```jsp <%-- login.jsp --%> <form action="login.do" method="POST"> <input type="text" name="username" placeholder="用户名"> <input type="password" name="password" placeholder="密码"> <button type="submit">登录</button> </form> ``` ```java // LoginServlet.java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); UserService userService = new UserServiceImpl(); User user = userService.login(username, password); if (user != null) { request.getSession().setAttribute("user", user); response.sendRedirect("home.jsp"); } else { request.setAttribute("error", "用户名或密码错误"); request.getRequestDispatcher("login.jsp").forward(request, response); } } ``` 2. Business Layer: ```java // UserService.java public interface UserService { User login(String username, String password); } // UserServiceImpl.java public class UserServiceImpl implements UserService { private UserDao userDao = new UserDaoImpl(); @Override public User login(String username, String password) { if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) { return null; } User user = userDao.getUserByUsernameAndPassword(username, password); return user; } } ``` 3. Data Access Layer: ```java // UserDao.java public interface UserDao { User getUserByUsernameAndPassword(String username, String password); } // UserDaoImpl.java public class UserDaoImpl implements UserDao { @Override public User getUserByUsernameAndPassword(String username, String password) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; User user = null; try { conn = ConnectionUtil.getConnection(); ps = conn.prepareStatement("SELECT * FROM user WHERE username=? AND password=?"); ps.setString(1, username); ps.setString(2, password); rs = ps.executeQuery(); if (rs.next()) { user = new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); } } catch (SQLException e) { e.printStackTrace(); } finally { ConnectionUtil.close(conn, ps, rs); } return user; } } ``` 在这个示例中,Presentation Layer 通过调用 Business Layer 中的 UserService 来处理业务逻辑,并且 Business Layer 又调用 Data Access Layer 中的 UserDao 来与数据库交互,实现了三层架构的分层思想。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值