zoukankan      html  css  js  c++  java
  • 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");
    }
    }
    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    ACM-ICPC(10/21)
    ACM-ICPC (10/20)
    ACM-ICPC (10/19)
    ACM-ICPC (10/17)
    ACM-ICPC (10/16) Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)
    ACM-ICPC (10/15) Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)
    ACM-ICPC (10/14)
    战神CPU计算机硬件组装
    ACM-ICPC (10/12)
    ACM-ICPC (10/11)
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/10426334.html
Copyright © 2011-2022 走看看