三层架构集成

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.daocom.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层里面进行代码的输出。

以上是关于三层架构集成的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb.三层架构项目集成

JAVA三层架构里面的main方法写在哪里?有main方法吗

eclipse怎么集成配置JDK和Tomcat

tomcat的安装和在eclipse的集成

JavaWeb.12.三层架构项目集成

eclipse怎么集成配置JDK和Tomcat