目录
什么是三层架构
什么是MVC模式
MVC工作流程
三层架构与MVC
三层架构与MVC练习
附:sevlet的使用
什么是系统架构
即整合应用系统程序大的结构,经常提到的系统架构:三层架构、mvc;两者既有区别又有联系,但目的都是解耦。
三层架构=视图层+业务逻辑层+数据访问层
视图层 View 用于接收用户提交请求的代码
业务逻辑层 Service 系统的业务逻辑
数据访问层 Dao 直接操作数据库的代码
为了更好的降低各层间的耦合度,在三层架构程序设计中,采用面向抽象编程。即上层对下层的调用,是通过接口实现的。而下层对上层的真正服务提供者,是下层接口的实现类。服务标准(接口)是相同的,服务提供者(实现类)可以更换。这就实现了层间解耦合。
只要包含了视图层、应用层、数据访问层就是三层架构。
开发中,业务才是核心,技术辅助业务
简单业务 只开启一个事务
普通业务 开启三个事务
复杂业务 开启七个事务
MVC=Model+View+Controller(模型+视图+控制器)
模型:数据模型 entity 业务模型 service
视图 jsp:展示页面
控制器 sevlet:处理用户请求的
高内聚低耦合
一个类只做一种事
一个方法只做一件事
写只写一次
面向对象设计原则--重构原则
事不过三,三则重构(提取方法、类)
1.创建文件夹login-demo,用idea打开
2.初始操作
4.0.0
com.example
login-demo
1.0.0-SNAPSHOT
war
main / java resources webapp(web-inf/web.xml)
test / java
创建java下边的包 com.funtl.login.demo / web(controller ) service dao entity
项目结构如图
这就是一个三层架构(只要包含视图层、业务逻辑层、数据访问层就叫三层架构)和MVC
3.写实体类User
package com.example.login.demo.entity;
import java.io.Serializable;
public class User implements Serializable {
private String username;
private String loginId;
private String loginPwd;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getLoginId() {
return loginId;
}
public void setLoginId(String loginId) {
this.loginId = loginId;
}
public String getLoginPwd() {
return loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", loginId='" + loginId + '\'' +
", loginPwd='" + loginPwd + '\'' +
'}';
}
}
写UserDao
package com.example.login.demo.dao;
import com.example.login.demo.entity.User;
public interface UserDao {
public User login(String loginId, String loginPwd);
}
写UserDaoImpl
package com.example.login.demo.dao;
import com.example.login.demo.entity.User;
public class UserDaoImpl implements UserDao {
public User login(String loginId, String loginPwd) {
User user=null;
if("admin".equals(loginId)){
if("admin".equals(loginPwd)){
user=new User();
user.setLoginId("admin");
user.setLoginPwd("admin");
user.setUsername("lisa");
}
}
return user;
}
}
写UserService
package com.example.login.demo.service;
import com.example.login.demo.entity.User;
public interface UserService {
public User login(String loginId, String loginPwd);
}
写UserServiceImpl
package com.example.login.demo.service;
import com.example.login.demo.dao.UserDao;
import com.example.login.demo.dao.UserDaoImpl;
import com.example.login.demo.entity.User;
public class UserServiceImpl implements UserService {
public UserDao userDao=new UserDaoImpl();
public User login(String loginId, String loginPwd) {
return userDao.login(loginId,loginPwd);
}
}
创建LoginController,其实是sevlet,因此需要先引包
javax.servlet
javax.servlet-api
4.0.1
package com.example.login.demo.web.controller;
import com.example.login.demo.entity.User;
import com.example.login.demo.service.UserService;
import com.example.login.demo.service.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "LoginController", urlPatterns = "/login")
public class LoginController extends HttpServlet{
UserService userService=new UserServiceImpl();
protected void doGet(HttpServletRequest req, HttpServletResponse resq) throws ServletException, IOException{
}
protected void doPost(HttpServletRequest req, HttpServletResponse resq) throws ServletException, IOException{
String loginId=req.getParameter("loginId");
String loginPwd = req.getParameter("loginPwd");
User user=userService.login(loginId,loginPwd);
//登录失败的处理
if(user==null){
req.getRequestDispatcher("/fail.jsp").forward(req,resq);
}
//登录成功的处理
else{
req.getRequestDispatcher("/success.jsp").forward(req,resq);
}
}
}
get与post区别:
1.语义区别:获取、提交
2.post请求是2次,get是两次
创建登录成功与失败页面
在webapp下创建index.jsp fail.jsp success.jsp
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
登录
fail.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
登录
登录失败
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
登录
登录成功
4.点击运行,出现如下错误
突然发现webapp没有标识
只需要配置一下,将webapp文件夹关联上就可以了,如下图:
然后主页面就出现了,然而提交之后/login还是404,肯定是sevlet出现了问题
然而并没有好,检查许久发现/login路径不对
如图:
我改了一下tomcat的设置
就可以完美运行了!
我把源码放在https://download.csdn.net/download/shmily_syw/11235084
1.pom.xml中引入依赖
javax.servlet
javax.servlet-api
4.0.1
2.配置
方法一:web.xml中进行配置
LoginController
com.example.my.shop.Controller.LoginController
LoginController
/login
两个sevlet-name要相同
方法二:使用注解的方式
@WebServlet(name = "LoginController", urlPatterns = "/login")
public class LoginController extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resq) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest req, HttpServletResponse resq) throws ServletException, IOException{
}
}
3.通过注解访问sevlet