MVC设计思路
MVC
学会重复、学会总结、学会预习和练习
前端页面 <----> 服务器(控制层、业务层、DAO层) <---> DB
说明:无论是框架还是servletJSP,用的都是MVC思想,只不过框架用的是注解比如@autowire、@Resource来进行依赖注入以及
bean的装配,而servletJsp用的是多态,创建对象,并利用构造器传值并调用等;
比如登录
1.创建一个项目架构
src下
xx.controller servlet或者springmvc
xx.dao 接口
xx.daoImpl 连接DB的操作及sql或MyBatis
xx.entity 与数据库中的表以及前台表相对应的实体类的一个映射
xx.service 业务逻辑的,用于逻辑控制
xx.serviceImpl 具体的实现
xx.util DBUtils
lib jdbc驱动
webapp
index.jsp
login.jsp
2.准备jdbc驱动和配置文件
3.在entity包下建一个和表相关的实体类 User (因为要测试是否能登录成功,必须先有一个人这个类作为中间媒介)
4.前端页面login.jsp
<%--
Created by IntelliJ IDEA.
User: shijinglu
Date: 2019/2/24
Time: 10:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login.do" type="post">
用户名:<input type="text" name="uname"><br>
密码:<input type="password" name="pwd"><br>
<input type="submit" value="登录">
<!--在登录页面显示错误信息-->
<% String str=(String)request.getAttribute("error");%>
out.println(str);
</form>
</body>
</html>
success.jsp
<%@ page import="sxt.entity.User" %><%--
Created by IntelliJ IDEA.
User: shijinglu
Date: 2019/2/24
Time: 14:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script type="text/javascript">
function loginout() {
<!--跳转到退出的那个servlet-->
window.location.href="logout";
}
</script>
</head>
<body>
欢迎你<%=((User)session.getAttribute("user")).getUname()%>,登录成功<br>
<input type="button" value="退出" onclick="loginout()">
<a type="loginout">退出2</a>
<a href="javascript">退出3</a>
</body>
</html>
5.控制层
package sxt.controller; import sxt.entity.User;
import sxt.service.UserService;
import sxt.serviceImpl.UserServiceImpl; 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 LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//1.设置编码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//2.接收前台数据
String uname=req.getParameter("uname");
String pwd=req.getParameter("pwd");
//3.调用service层 在MySQL中,由于id自增,所以不需要id
User user=new User(uname,pwd);//说明:实体类中要加带两个参数的构造器
UserService us=new UserServiceImpl();//调用业务层的方法
us.findUser();
if(u!=null){
HttpSession session=req.getSession();
resp.sendRedirect(req.getContextPath()+"/success.jsp");
}else{
req.setAttribute("error","用户名或密码不对");
res.getRequestDispatcher("/login.jsp").forword(req,resp);
}
}
}
6.业务层:
package sxt.service;
public interface UserService {
void findUser();
}
package sxt.serviceImpl;
import sxt.dao.UserDao;
import sxt.dao.UserDaoImpl;
import sxt.service.UserService;
public class UserServiceImpl implements UserService {
@Override
public void findUser() {
UserDao ud=new UserDaoImpl();
}
}
7.DAO层:连接数据的并进行相关操作的
package sxt.dao;
import sxt.entity.User;
public interface UserDao {
User selectOne(String uname, String pwd);
}
package sxt.dao;
import sxt.entity.User;
import java.sql.Connection;
public class UserDaoImpl implements UserDao{
@Override
public User selectOne(String uname, String pwd) {
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try{
//1.连接DB
conn=DBUtil.getConnection(conn,sql);
//2.把要准备预编译的sql操作准备好
String sql="select * from t_user where uname=? and id=?";
//3.获取PreparedStatement 预编译
ps=DBUtil.getPreparedStatement(conn,sql);
//4.给sql后面的参数赋值
String uname=ps.setString(1,uname);
String pwd=ps.setString(2,pwd);
//5.执行查询操作
rs=ps.executeQuery();
if(rs.next()){
//将返回的数据封装成一个对象
user=new User(rs.getInt("id"),rs.getString("uname"),rs.getPwd("pwd"));
}catch(SQLException e){
e.printStackTrace();
}finally{
DBUtil.closeAll(rs,ps,conn);
}
return user;
}
}
}
---------------------------------------------------------------------------------------------
退出:消除session并回到登录页面
package sxt.controller; 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 = "LoginOutServlet")
public class LoginOutServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//清除session
req.getSession().removeAttribute("user");
//重定向到登录页面
resp.sendRedirect(req.getContextPath()+"/login.jsp");
}
}
MVC设计思路的更多相关文章
- MVC3 数据验证用法之密码验证设计思路
描述:MVC数据验证使用小结 内容:display,Required,stringLength,Remote,compare,RegularExpression 本人最近在公司用mvc做了一个修改密码 ...
- iOS 组件化 —— 路由设计思路分析
原文 前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高.为了更好的应对各种需求,开发人员从软件工程的角度,将App架构由原来简单的MVC变成MVVM,VIPER等复杂架构.更换适合业 ...
- asp.net webform设计思路的思考
我使用asp.net的webform框架进行web应用程序的开发已经差不多四年了,在整个开发生涯中,也使用过一年asp.net的mvc框架.因为网上经常有讨论webform框架和mvc框架的优劣,所以 ...
- Backbone设计思路和关键源码分析
一. Backbone的江湖地位: backbone作为一个老牌js框架为大规模前端开发提供了新的开发思路:前端MVC模式,这个模式也是前端开发演变过程中的一个重要里程碑,也为MVVM和Redux等开 ...
- MVC设计之MVC设计模式(介绍)
mvc介绍; 首先先引用一个百度百科的介绍: MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用 ...
- TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析
TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...
- 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路
最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...
- ENode框架单台机器在处理Command时的设计思路
设计目标 尽量快的处理命令和事件,保证吞吐量: 处理完一个命令后不需要等待命令产生的事件持久化完成就能处理下一个命令,从而保证领域内的业务逻辑处理不依赖于持久化IO,实现真正的in-memory: 保 ...
- WebGIS中快速整合管理多源矢量服务以及服务权限控制的一种设计思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在真实项目中,往往GIS服务数据源被其他多个信息中心或者第三方 ...
随机推荐
- 写在开始前---web异常处理
分层项目中,有上层调用下层,每一层都可能出错,比如数据库连接,文件读写等异常.除了运行时程序的异常,还有业务逻辑的一些问题.发生异常需要做一定处理,既要让开发人员便于排查问题,又要让用户看到友好又便于 ...
- E - Stones 优先队列
来源1896 Because of the wrong status of the bicycle, Sempr begin to walk east to west every morning an ...
- 在php cli下可以使用 STDIN 来实现标准输入
简单的例子: echo "请输入一个数字:"; $num = trim(fgets(STDIN)); echo "请再输入一个数字:"; $num1 = ...
- 网络流24T
说出来你们可能不信,我咕了三个多星期了,今晚忽然不想再写题了,(写自闭了,把这边整理一下 1. 洛谷P2756 飞行员配对问题 二分图匹配: #include <bits/stdc++.h> ...
- react withClamp装饰器
Clamp.js 等待异步数据加载完后在初始化$clamp withClamp.js import React, { Component } from "react"; expor ...
- from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...
- mysql使用存储过程和event定期删除
-- 创建存储过程DELIMITER //CREATE PROCEDURE del_data()BEGIN DELETE FROM t_route_status WHERE route_date &l ...
- Java学习-050-AES256 之 java.security.InvalidKeyException: Illegal key size or default parameters 解决方法
在进行 Java AES 加密测试时,出现如下错误信息: java.security.InvalidKeyException: Illegal key size or default paramete ...
- MAVEN_day01 下载与安装及环境变量的配置
一.MAVEN简介 MAVEN是apache组织下的一个开源项目,是使用纯java编写的,之用于管理java工程. 二.MAVEN下载与安装 下载地址:http://maven.apache.org/ ...
- Linux是cat、tail、head查看文件任意几行的数据
Linux是cat.tail.head查看文件任意几行的数据 一.使用cat.tail.head组合 1.查看最后100行的数据 cat filename | tail -n 100 2.查看100到 ...