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设计思路的更多相关文章

  1. MVC3 数据验证用法之密码验证设计思路

    描述:MVC数据验证使用小结 内容:display,Required,stringLength,Remote,compare,RegularExpression 本人最近在公司用mvc做了一个修改密码 ...

  2. iOS 组件化 —— 路由设计思路分析

    原文 前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高.为了更好的应对各种需求,开发人员从软件工程的角度,将App架构由原来简单的MVC变成MVVM,VIPER等复杂架构.更换适合业 ...

  3. asp.net webform设计思路的思考

    我使用asp.net的webform框架进行web应用程序的开发已经差不多四年了,在整个开发生涯中,也使用过一年asp.net的mvc框架.因为网上经常有讨论webform框架和mvc框架的优劣,所以 ...

  4. Backbone设计思路和关键源码分析

    一. Backbone的江湖地位: backbone作为一个老牌js框架为大规模前端开发提供了新的开发思路:前端MVC模式,这个模式也是前端开发演变过程中的一个重要里程碑,也为MVVM和Redux等开 ...

  5. MVC设计之MVC设计模式(介绍)

    mvc介绍; 首先先引用一个百度百科的介绍: MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用 ...

  6. TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

    TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...

  7. 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路

    最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...

  8. ENode框架单台机器在处理Command时的设计思路

    设计目标 尽量快的处理命令和事件,保证吞吐量: 处理完一个命令后不需要等待命令产生的事件持久化完成就能处理下一个命令,从而保证领域内的业务逻辑处理不依赖于持久化IO,实现真正的in-memory: 保 ...

  9. WebGIS中快速整合管理多源矢量服务以及服务权限控制的一种设计思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在真实项目中,往往GIS服务数据源被其他多个信息中心或者第三方 ...

随机推荐

  1. Windows下Codeblocks调试Cocos2d-x项目体验(一次失败的体验)

    很久之前的一篇文章有介绍过在Ubuntu下安装Cocos2d-x3.11并使用Codeblock调试Cocos2d-x程序:http://www.cnblogs.com/moonlightpoet/p ...

  2. Elasticsearch学习之有用博客

    推荐阅读:1.阿里:https://elasticsearch.cn/article/61712.滴滴:http://t.cn/EUNLkNU3.腾讯:http://t.cn/E4y9ylL4.携程: ...

  3. C#队列Queue实现一个简单的电商网站秒杀程序

    电商的秒杀和抢购,对程序员来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要. 我们 ...

  4. react 路由导航栏 withRouter

    codesandbox https://codesandbox.io/s/9l6prnyxjy app.js import React, { Component, Fragment } from &q ...

  5. git push fatal: The remote end hung up unexpectedly

    git push fatal: The remote end hung up unexpectedly git config http.postBuffer git gc --aggressive 不 ...

  6. sqoop/1.4.6/下载

    http://archive.apache.org/dist/sqoop/1.4.6/

  7. SQL Server 2008作业失败:无法确定所有者是否有服务器访问权限

    转自:http://www.mzwu.com/article.asp?id=3592 下午准备将服务器数据导一份到本地,连上服务器找数据库备份文件发现最后一次备份是7月1日,竟然十几天没生成新备份,查 ...

  8. [转]在centos 6.4下安装opencv 2.3.1

    系统环境介绍: centos 6.4 1.安装依赖包 yum install cmake gcc gcc-c++ gtk+-devel gimp-devel gimp-devel-tools gimp ...

  9. linux命令: 两个查找工具 locate,find

    linux 中有很多查找工具,今天主要讲解locate,find两个工具. 1.locate (1)查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db 注意:如果这 ...

  10. join算法分析

    对于单条语句,explain看下key,加个索引 多个条件,加复合索引 where a = ? order by b 加(a,b)的复合索引 上面都是比较基本的,这篇我们分析一些复杂的情况--join ...