三层架构集成
Posted 绥彼岸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三层架构集成相关的知识,希望对你有一定的参考价值。
往期回顾(想看详细的可以去我主页自行查找)
JSP基本介绍和Tomcat
- 什么是JSP
- 是一种文件格式
- 写java,html,css,js
- jsp本质上是java的额外封装,解析过程中优先解析java
<a href=“<%=“www.baidu.com”%>”>- .jsp -> .java -> .class -> jvm执行
- Tomcat
- 默认端口 8080
- 如果出现了端口异常,修改端口
基本语法和表单提交
- 基本指令
- <%=输入内容 %>
- <% java脚本 %>
- <%@page 页面指令 %>
- <%@include 包含指令 %>
- 表单提交方式
- get 通过地址栏带参,参数有长度限制
- post 不通过地址栏带参,参数没有长度限制
- 文件上传的时候 必须是post,必须是多段式表单
页面跳转
- jsp的跳转方式
- 转发 forward
- 可以携带数据(请求中的)
- 地址栏不变
- 是服务器行为
- 重定向 redirect
- 不可以携带数据(请求中的)
- 地址栏变
- 是客户端行为
Session和Cookie
【都可以设定存在时间:session-30分钟,cookie-浏览器关闭】
session 服务端存储
cookie 客户端存储
应用场景:
- 浏览记录 cookie
- 鉴权 session
- 存数据库里面,缓冲数据库
富文本编辑器和文件上传
- 富文本编辑器 (把你输入的语句变成了html来保存)
- 文件上传
- 文件上传的主要操作
- 1.将文件保存到电脑路径中
- 2.将保存的电脑路径存到数据库
- 3.绑定tomcat映射,为你保存文件的目录加上一个访问路径
- 如果诞生一个不重复的名字
- 使用UUID UUID.randomUUID()
三层架构
没有学习三层架构:
- jsp 将页面显示出来
- dao 去数据库取数据,处理数据
- dao层:1.拿数据 2.负责处理数据【系统的耦合性:各个模块连接的紧密度】
【三层架构】
- 各司其职
- 高内聚,低耦合
【结构】
- 表示层
- 业务逻辑层 biz
- 数据库访问层 dao
【调用顺序】
表示层->业务逻辑层->数据库访问层—|
|
表示层<-业务逻辑层<-数据库访问层 <-|【命令规则】
com.biz -> Biz接口
com.biz.impl ->Biz的接口实现类
com.dao -> Dao接口
com.dao.impl -> Dao接口的实现类
三层架构实例
建包和建类和接口
util包:DBHelper:数据库连接包
package com.test.util;
/**
* 连接数据库的工具包
* @author 绥彼岸
*
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.driver.OracleDriver;
public class DBHelper
private Connection con;
private PreparedStatement ps;
private ResultSet rs;
//导入驱动(sqlserver,oracle,mysql),一定要执行 build path,且需要导入对应的jar包
static
//OracleDriver
try
Class.forName("oracle.jdbc.driver.OracleDriver");
catch (ClassNotFoundException e)
e.printStackTrace();
//编写连接语句
private static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";
/**
* 获得连接的方法
* @return
*/
public static Connection getCon()
try
return DriverManager.getConnection(URL,"scott","tiger");
catch (SQLException e)
e.printStackTrace();
return null;
/**
* 关闭资源的方法
* @param con
* @param ps
* @param rs
*/
public static void close(Connection con,PreparedStatement ps,ResultSet rs)
try
if(con!=null&&!con.isClosed())
con.close();
if(!ps.isClosed())
ps.close();
if(!rs.isClosed())
rs.close();
catch (SQLException e)
e.printStackTrace();
//测试是否连接到了数据库
public static void main(String[] args)
System.out.println(DBHelper.getCon());
pojo包:User:用户的实体类
package com.test.pojo;
/**
* 用户的实体类
* @author 绥彼岸
*
*/
public class User
private int userId;
private String userName;
private String userPwd;
public int getUserId()
return userId;
public void setUserId(int userId)
this.userId = userId;
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;
public User()
// TODO Auto-generated constructor stub
public User(int userId, String userName, String userPwd)
super();
this.userId = userId;
this.userName = userName;
this.userPwd = userPwd;
biz包:IUserBiz:业务逻辑层的接口
package com.test.biz;
import com.test.pojo.User;
/**
* 业务逻辑层的接口
* @author 绥彼岸
*
*/
public interface IUserBiz
String login(User user);
biz.impl包:UserBizImpl:业务逻辑层接口的实现类
package com.test.biz.impl;
import com.test.biz.IUserBiz;
import com.test.dao.IUserDao;
import com.test.dao.impl.UserDaoImpl;
import com.test.pojo.User;
/**
* 业务逻辑层接口的实现类
* @author 绥彼岸
*
*/
package com.test.biz.impl;
import com.test.biz.IUserBiz;
import com.test.dao.IUserDao;
import com.test.dao.impl.UserDaoImpl;
import com.test.pojo.User;
/**
* 业务逻辑层接口的实现类
* @author 绥彼岸
*
*/
public class UserBizImpl implements IUserBiz
private IUserDao userDao=new UserDaoImpl();
@Override
public String login(User user)
User use = userDao.login(user);
//判断账号是否正确,正确的话不会为null
if(use==null)
return "account not found";
//判断密码是否正确
if(!use.getUserPwd().equals(user.getUserPwd()))
return "password error";
//登录成功
return "login success";
dao包:IUserDao:数据库访问层的接口
package com.test.dao;
import com.test.pojo.User;
/**
* 数据库访问层的接口
* @author 绥彼岸
*
*/
public interface IUserDao
User login(User user);
dao.impl包:UserDaoImpl:数据库访问层接口的实现
package com.test.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.test.dao.IUserDao;
import com.test.pojo.User;
import com.test.util.DBHelper;
/**
* 数据库访问层接口的实现
* @author 绥彼岸
*
*/
public class UserDaoImpl implements IUserDao
private Connection con;
private PreparedStatement ps;
private ResultSet rs;
@Override
public User login(User user)
try
con = DBHelper.getCon();
String sql="SELECT * FROM T_USER WHERE USE_NAME=?";
ps=con.prepareStatement(sql);
ps.setString(1, user.getUserName());
rs=ps.executeQuery();
if(rs.next())
User use=new User();
use.setUserName(rs.getString(2));
use.setUserPwd(rs.getString(3));
return use;
catch (Exception e)
e.printStackTrace();
return null;
Spring集成web环境-基本三层架构环境搭建
Spring集成web环境-基本三层架构环境搭建
- 创建一个Spring项目文件itheima_spring_mvc,具体创建步骤可查看上一篇博客Spring课程工程构建
- 在pom.xml文件中,导入相关的坐标
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itheima</groupId>
<artifactId>itheima_spring_mvc</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
</dependencies>
</project>
- 在
src/main/java
目录里面创建com.itheima.dao
和com.itheima.service
包; - 在
com.itheima.dao
包里面创建UserDao接口文件和impl
包,并且在impl
包里面创建实现类UserDaoImpl
package com.itheima.dao;
public interface UserDao
public void save();
package com.itheima.dao.impl;
import com.itheima.dao.UserDao;
public class UserDaoImpl implements UserDao
public void save()
System.out.println("save running...");
- 在
com.itheima.service
包里面创建UserService接口文件和impl
包,并且在impl
包里面创建实现类UserServiceImpl
package com.itheima.service;
public interface UserService
public void save();
package com.itheima.service.impl;
import com.itheima.dao.UserDao;
import com.itheima.service.UserService;
public class UserServiceImpl implements UserService
private UserDao userDao;
public void setUserDao(UserDao userDao)
this.userDao=userDao;
public void save()
userDao.save();
- 在
src\\main\\resource
文件里面创建applicationContext.xml文件,在里面配置Dao和service
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!--配置Dao-->
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
<!--配置service-->
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
</beans>
- 在
src\\main\\java
里面创建com.itheima.web
包,并且在此包下面创建UserServlet文件
package com.itheima.web;
import com.itheima.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class UserServlet extends HttpServlet
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = app.getBean(UserService.class);
userService.save();
- 在
src/main/webapp/WEB-INF/web.xml
文件中进行配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.itheima.web.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/userServlet</url-pattern>
</servlet-mapping>
</web-app>
- 配置tomcat环境,点击打开
Edit Configurations..
- 出现tomcat问题,可以参考此处;倘若没有问题,此处可跳过。
- 最后点击apply,关闭页面即可。
- 设置虚拟访问路径
- 启动tomcat服务器,在浏览器地址栏访问
http://localhost:8080/userServlet
,此时控制台出现运行结果。
- 控制台出现
save running...
,证明了我们在访问时候表示web层调用业务层,业务层调dao层,最终在dao层里面进行代码的输出。
以上是关于三层架构集成的主要内容,如果未能解决你的问题,请参考以下文章