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

Posted 清晨喂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb.12.三层架构项目集成相关的知识,希望对你有一定的参考价值。

首先先来回顾一下前面分享的内容

回顾

web01
什么是jsp?
jsp是一种文件格式,用于编写java,html,css,javascript,jsp本质上是java的额外封装,解析过程中优先解析java

例如:<a href="<%=“www.baidu.com”%>"> 解析顺序:.jsp -> .java -> .class ->jvm执行

安装tomcat
教程:JavaWeb01.web环境搭建

tomcat默认端口:8080

如果出现了端口异常,仅需要双击服务器修改端口

Web02
基本指令
<%=输入内容%>
<% java脚本 %>
<% page页面指令 %>
<% include 包含指令 %>
表单提交方式
get 通过地址栏带参,参数有长度限制
post 不通过地址栏带参,参数没有长度限制
ps:文件上传的时候,必须使用post,必须是多段式表单

Web03
jsp的跳转方式
转发 forward

可以携带数据(请求中的)
地址栏不变
服务器行为
重定向 redirect

不可以携带数据(请求中的)
地址栏会变
是客户端行为
Web04
数据库连接语句
jdbc:oracle:thin:@localhost:1521:orcl
Web07
cookie和session的异同
同:都可以设定存在时间:session默认30min,cookie默认浏览器关闭

异:

session 服务端存储
cookie 客户端存储
应用场景:

浏览记录 cookie
鉴权 session
部分记录存数据库里,缓冲数据库
Web09
分页功能的sql语句
【规律】:page当前页面 rows显示条数

       page:1 rows:10  1~10

       page:2 rows:10  11~20

       page:3 rows:10  21~30

begin(开始位置):(page-1)rows+1 end(结束位置):pagerows

【sql语句】:

select * from (
select a.*,rownum myr from t_news a
)b where myr between begin and end;
Web10
文件上传
操作流程

将文件保存到电脑路径中
将保存的电脑路径存到数据库
绑定tomcat映射,为保存文件的目录加上访问路径
ps:文件上传可以使用UUID生成一个不重复的名字 UUID.randomUUID()

富文本编辑器
使用实质:将输入的语句变成html语句进行保存

Web11
在没有使用三层架构的情况
jsp 将页面显示出来
dao 在数据库中取得数据并进行处理
dao层 1.取得数据 2.处理数据

【系统的耦合性:各个模块连接的紧密度】

三层架构
各司其职
高内聚,低耦合
【结构】

表示层
业务逻辑层
数据库访问层
【调用顺序】

表示层 -> 业务逻辑层 -> 数据库访问层 ->获得数据 ->数据库访问层 -> 业务逻辑层 -> 表示层

【命名规则】

com.biz -> Biz接口,规范实现类,通过里氏替换原则在表示层中实现具体方法

com.biz.impl -> Biz的接口实现类,具体处理数据具体方法的体现

com.dao -> Dao接口,数据库访问层实现类的规范

com.dao.impl -> Dao接口的实现类,访问数据库方法具体体现

然后,昨天我们分享了三层架构
今天来分享一下三层架构的具体应用
分层实现用户登录
首先创建实体类

package com.zking.pojo;
/**
 * 用户实体类
 * @author zjjt
 *
 */
 
public class User 
 
    private Integer userId;
    private String userName;
    private String userPwd;
 
    public Integer getUserId() 
        return userId;
    
 
    public void setUserId(Integer 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() 
    
 
    public User(Integer userId, String userName, String userPwd) 
        this.userId = userId;
        this.userName = userName;
        this.userPwd = userPwd;
    
 

再编写数据访问层:数据访问接口

package com.zking.dao;
 
import com.zking.pojo.User;
/**
 * 用户的数据访问接口
 * @author zjjt
 *
 */
public interface IUserDao 
    User login(User user);
   

数据访问接口的实现

package com.zking.dao.impl;
 
import com.zking.dao.IUserDao;
import com.zking.pojo.User;
import com.zking.util.DBHelper;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
 * 数据库访问接口类
 * @author zjjt
 *
 */
 
public class UserDaoImpl implements IUserDao 
 
    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;
 
    public User login(User user) 
        try 
            con=DBHelper.getCon();
            String sql="select * from t_user where user_name=?";
            ps=con.prepareStatement(sql);
            ps.setString(1, user.getUserName());
            rs=ps.executeQuery();
            if(rs.next())
                //将信息赋值给User对象
                User u=new User();
                u.setUserName(rs.getString(2));
                u.setUserPwd(rs.getString(3));
                return u;
            
        catch (Exception e) 
            e.printStackTrace();
        finally 
            DBHelper.close(con,ps,rs);
        
        return null;
    
 

编写业务逻辑层:编写业务逻辑层接口

public interface IUserBiz 
  
	String login(User user);   

业务逻辑层接口实现

package com.zking.biz.impl;
 
import com.zking.biz.IUserBiz;
import com.zking.dao.IUserDao;
import com.zking.dao.impl.UserDaoImpl;
import com.zking.pojo.User;
 
import java.util.List;
 
public class UserBizImpl implements IUserBiz 
 
    //需要去调用dao层的方法
 
    //一个厨师对应多个送菜的人 里式替换原则
    private IUserDao userDao=new UserDaoImpl();
 
    @Override
    public String login(User user) 
        User u = userDao.login(user);
        // user 表示层给我的
        // u 数据库来的
        if(u==null)
            return "account not found";
        
        if(!u.getUserPwd().equals(user.getUserPwd()))
            return "password error";
        
        return "login success";
    

表示层:面向接口编程

<%@page import="com.zking.pojo.User"%>
<%@page import="com.zking.biz.impl.UserBizImpl"%>
<%@page import="com.zking.biz.IUserBiz"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
     //表示层
     //表示层-业务逻辑层(biz)-数据库操作层(dao)
     String username=request.getParameter("username");
     String password=request.getParameter("password");
    //将数据封装到实体类中
     User user= new User(0,username,password);
     //判断用户是否登录
     
     //面向接口编程
     //1、先编写接口
     //2、实现该接口
     //3、使用里氏替换原则来声明接口对象
     //4、调用接口的方法类
      IUserBiz userBiz=new UserBizImpl();
     //调用业务逻辑层的方法
     String massage=userBiz.login(user);
     //输出结果 
     
%>
<h2><%=massage%></h2>

登录界面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="doLogin.jsp" method="post">
<p><input type="text" name="username"></p>
    <p><input type="text" name="password"></p>
    <p><button>登录</button></p></form>
</body>
</html>

好了今天的分享就到这里了

JavaWeb.三层架构项目集成

前言:到现在我一共发表了11篇与Web相关的文章,那么今天这一篇在讲三层架构项目集成的同时,我会把之前的在简单的讲一下。

前篇总结

什么是jsp

    -是一种文件格式
    - 写java,html,css,js
    - jsp本质上是java的额外封装,解析过程中优先解析java
        <a href="<%="www.baidu.com"%>">
    - .jsp -> .java -> .class -> jvm执行

 安装tomcat
    - 默认端口 8080
    - 如果出现了端口异常,修改端口

jsp的跳转方式
    - 转发 forward 
        - 可以携带数据(请求中的)
        - 地址栏不变
        - 是服务器行为
    - 重定向 redirect 
        - 不可以携带数据(请求中的)
        - 地址栏变
        - 是客户端行为

基本指令
    - <%=输入内容 %>
    - <% java脚本 %>
    - <%@page 页面指令 %>
    - <%@include 包含指令 %>
表单提交方式
    - get  通过地址栏带参,参数有长度限制
    - post 不通过地址栏带参,参数没有长度限制

    > 文件上传的时候 必须是post,必须是多段式表单

jdbc
    - jdbc:oracle:thin:@localhost:1521:orcl

【都可以设定存在时间:session-30分钟,cookie-浏览器关闭】
session 服务端存储
cookie  客户端存储
应用场景:
    * 浏览记录  cookie
    * 鉴权  session
    * 存数据库里面,缓冲数据库

sql语句怎么写?规律
    【规律】 page当前页数 rows显示条数
            page:1 rows:10  1~10
            page:2 rows:10  11~20
            page:3 rows:10  21~30
        begin(开始位置): (page-1)*rows+1
        end(结束位置): page*rows
    【sql】
        select * from (
            select a.*,rownum myr from stu a
        )b where myr between begin and end;

文件上传
    - 文件上传的主要操作
        * 1.将文件保存到电脑路径中
        * 2.将保存的电脑路径存到数据库
        * 3.绑定tomcat映射,为你保存文件的目录加上一个访问路径
    - 如果诞生一个不重复的名字
        * 使用UUID    UUID.randomUUID()
富文本编辑器 (把你输入的语句变成了html来保存)

没有学习三层架构时:
    * jsp 将页面显示出来
    * dao 去数据库取数据,处理数据

    dao层:1.拿数据 2.负责处理数据
    【系统的耦合性:各个模块连接的紧密度】

【三层架构】
    * 各司其职
    * 高内聚,低耦合

【结构】
    * 表示层     
    * 业务逻辑层     biz    
    * 数据库访问层   dao     

【调用顺序】
    表示层->业务逻辑层->数据库访问层
    表示层<-业务逻辑层<-数据库访问层

【命令规则】
    com.biz -> Biz接口
    com.biz.impl ->Biz的接口实现类
    com.dao -> Dao接口
    com.dao.impl -> Dao接口的实现类

三层架构项目集成

我们今天在一篇主要是在上一篇的基础上的完善代码

建立以下包和类和接口:

 

 用户登录首页代码:

   <form action="dologin.jsp" method="post">
        <P><input type="text" name="username"></P>
        <p><input type="text" name="password"></p>
        <p><button>登录</button></p>
    </form>

处理登陆代码:

<%
//表示层 -> 业务逻辑层(biz) -> 数据库操作层(dao)
//取得用户数据
String username=request.getParameter("username");
String password=request.getParameter("password");
//将数据封装到实体类
User user = new User(username, password);

//登录
IUserBiz userBiz=new UserBizImpl();
//调用业务逻辑层的方法
String msg= userBiz.login(user);
%>
<h1><%=msg%></h1>

IGoodsBiz.java代码:

int insertGoods(Goods goods);

    int deleteGoods(Goods goods);

    int editGoods(Goods goods);

    List<Goods> queryGoods(Goods goods);

IUserBiz.java代码:

 String login(User user);

GoodsBizlmpl.java代码:

public class GoodsBizlmpl implements IGoodsDao

	@Override
	public int insertGoods(Goods goods) 
		// TODO Auto-generated method stub
		return 0;
	

	@Override
	public int deleteGoods(Goods goods) 
		// TODO Auto-generated method stub
		return 0;
	

	@Override
	public int editGoods(Goods goods) 
		// TODO Auto-generated method stub
		return 0;
	

	@Override
	public List<Goods> queryGoods(Goods goods) 
		// TODO Auto-generated method stub
		return null;
	

IGoodsDao.java代码:

int insertGoods(Goods goods);

	    int deleteGoods(Goods goods);

	    int editGoods(Goods goods);

	    List<Goods> queryGoods(Goods goods);

IUserDao.java代码:

User queryByName(User user);

GoodsDaolmpl.java代码:

public class GoodsDaolmpl implements IGoodsDao

	@Override
	public int insertGoods(Goods goods) 
		// TODO Auto-generated method stub
		return 0;
	

	@Override
	public int deleteGoods(Goods goods) 
		// TODO Auto-generated method stub
		return 0;
	

	@Override
	public int editGoods(Goods goods) 
		// TODO Auto-generated method stub
		return 0;
	

	@Override
	public List<Goods> queryGoods(Goods goods) 
		// TODO Auto-generated method stub
		return null;
	

UserDaolmpl.java代码:

public class UserDaoImpl implements IUserDao

	@Override
	public User queryByName(User user) 
		// 根据用户名和密码去数据库查询数据
		if("lxy".equals(user.getUsername())&&"lxy123".equals(user.getPassword())) 
            return new User("","");
		
		return null;
	

User.java代码:

private String username;
	private String password;
	
	
	public String getUsername() 
		return username;
	
	public void setUsername(String username) 
		this.username = username;
	
	public String getPassword() 
		return password;
	
	public void setPassword(String password) 
		this.password = password;
	
	
	public User(String username, String password) 
		super();
		this.username = username;
		this.password = password;
	

DBHelper.java代码:

//加载驱动
    static
        try 
            Class.forName("oracle.jdbc.driver.OracleDriver");
         catch (ClassNotFoundException e) 
            e.printStackTrace();
        
    

    //定义链接字符串
    private static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";

    //获得链接
    public static Connection getCon() 
        try 
            return DriverManager.getConnection(URL,"scott","sa123");
         catch (SQLException e) 
            e.printStackTrace();
        
        return null;
    

    //关闭资源
    public static void close(Connection con,PreparedStatement ps, ResultSet rs) 
        try 
            if (con!=null&&!con.isClosed()) 
                con.close();
            if (ps!=null) 
                ps.close();
            
            if (rs!=null) 
                rs.close();
            
        catch (Exception e) 
            e.printStackTrace();
        
    

今天就到这里,拜拜ヽ(✿゚▽゚)ノ 。

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

Spring集成web环境-基本三层架构环境搭建

Spring集成web环境-基本三层架构环境搭建

Spring集成web环境-基本三层架构环境搭建

JavaWeb.三层架构项目集成

C# Dapper基本三层架构使用 (Web UI层)

Web开发之三层架构