学习内容》:

    //========学习内容=========
    Tomcat容器
    Servlet初识
    Servlet练习(1)
    Servlet练习(导包+字符集)
    Servlet练习(登录及查询)
    Servlet练习(查询及存款)
    Servlet管理机制(1)
    Servlet管理机制(2)

    《代码内容》:
    主要思路—->做一个银行系统——使用MVC分层架构的思想,实现—登录,查询,存款,取款,转账功能。
    //===================================================================================//

    src—->
    controller->
    CunAndQuController

    1. package controller;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. import java.io.PrintWriter;
    8. public class CunAndQuBalController extends HttpServlet {
    9. @Override
    10. public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    11. request.setCharacterEncoding("UTF-8");
    12. String uname = request.getParameter("uname");
    13. response.setCharacterEncoding("UTF-8");
    14. PrintWriter out = response.getWriter();
    15. out.write("<html>");
    16. out.write("<head>");
    17. out.write("<meta charset='UTF-8'>");
    18. out.write("</head>");
    19. out.write("<body>");
    20. out.write("<form action='docun' method='post'>");
    21. out.write("请"+uname+"输入存款金额<br>");
    22. out.write("<input type='text' name='bal' value><br>");
    23. out.write("<input type='submit' value='确认'>");
    24. out.write("<input type='hidden' name='uname' value="+uname+">");
    25. out.write("</form>");
    26. out.write("<form action='doqu' method='post'>");
    27. out.write("请"+uname+"输入取款金额<br>");
    28. out.write("<input type='text' name='bal' value><br>");
    29. out.write("<input type='submit' value='确认'>");
    30. out.write("<input type='hidden' name='uname' value="+uname+">");
    31. out.write("</form>");
    32. out.write("</body>");
    33. out.write("</html>");
    34. }
    35. }

    DoCunController

    package controller;
    
    import service.AtmService;
    import util.MySpring;
    
    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 DoCunController extends HttpServlet {
    
        private AtmService atmService = MySpring.getBean("service.AtmService");
    
        public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            String uname = request.getParameter("uname");
            String cunbal = request.getParameter("bal");
            atmService.cun(uname,Float.parseFloat(cunbal));
        }
    }
    

    DoQuController

    package controller;
    
    import service.AtmService;
    import util.MySpring;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.swing.*;
    import java.io.IOException;
    
    public class DoQuController extends HttpServlet {
    
        private static AtmService atmService = MySpring.getBean("service.AtmService");
    
        public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
            request.setCharacterEncoding("UTF-8");
            String uname = request.getParameter("uname");
            String bal = request.getParameter("bal");
            atmService.qu(uname,Float.parseFloat(bal));
        }
    
    }
    

    DoZhuanController

    package controller;
    
    import com.mysql.cj.protocol.a.MysqlBinaryValueDecoder;
    import service.AtmService;
    import util.MySpring;
    
    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 DoZhuanController extends HttpServlet {
    
        private static AtmService atmService = MySpring.getBean("service.AtmService");
    
        @Override
        public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            String uname = request.getParameter("uname");
            String zhuanbal = request.getParameter("zhuanbal");
            String youname = request.getParameter("youname");
            //调用业务层转账方法
            atmService.zhuan(uname,youname,Float.parseFloat(zhuanbal));
        }
    }
    

    LoginController

    package controller;
    
    import service.AtmService;
    import util.MySpring;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    public class LoginController extends HttpServlet {
    
        private static AtmService atmSevice = new AtmService();
    
        public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            String uname = request.getParameter("uname");
            String upassword = request.getParameter("upassword");
            //调用业务层的登录业务方法
            String loginResult = atmSevice.login(uname,upassword);
            System.out.println(loginResult);
            response.setCharacterEncoding("UTF-8");
            PrintWriter out = response.getWriter();
            out.write("<html>");
            out.write("<head>");
            out.write("<meta charset=\"UTF-8\">");
            out.write("</head>");
            out.write("<body>");
            if ("登录成功".equals(loginResult)){
                out.write("********ATM银行系统********<br>");
                out.write("欢迎尊敬的"+uname+"!祝您心情愉快<br>");
                out.write("<a href=\"query?uname="+uname+"\">查询</a><br>");
                out.write("<a href=\"cunbal?uname="+uname+"\">存款</a><br>");
                out.write("<a href=\"qubal?uname="+uname+"\">取款</a><br>");
                out.write("<a href=\"zhuanbal?uname="+uname+"\">转账</a><br>");
                out.write("</body>");
                out.write("</html>");
            }else {
                out.write("用户名或密码错误");
                out.write("</body>");
                out.write("</html>");
            }
        }
    
    }
    

    QueryController

    package controller;
    
    import service.AtmService;
    import util.MySpring;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    public class QueryController extends HttpServlet{
    
        private static AtmService atmService = MySpring.getBean("service.AtmService");
    
        public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            String uname = request.getParameter("uname");
            Float ubal = atmService.query(uname);
            response.setCharacterEncoding("UTF-8");
            PrintWriter out = response.getWriter();
            out.write("<html>");
            out.write("<head>");
            out.write("<meta charset='UTF-8'>");
            out.write("</head>");
            out.write("<body>");
            out.write("尊敬的"+uname+"您的可用余额为:"+ubal+" 感谢您的使用!");
            out.write("</body>");
            out.write("</html>");
        }
    
    }
    

    ViewZhuanBalController

    package controller;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @SuppressWarnings("all")
    public class ViewZhuanBalController extends HttpServlet {
    
        @Override
        public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            String uname = request.getParameter("uname");
            response.setCharacterEncoding("UTF-8");
            PrintWriter out = response.getWriter();
            out.write("<html>");
            out.write("<head>");
            out.write("<meta charset='UTF-8'>");
            out.write("</head>");
            out.write("<body>");
            out.write("<form action='dozhuan' method='post'>");
            out.write("请您输入要转账的用户<br>");
            out.write("<input type='text' name='youname' value=''><br>");
            out.write("请您输入要转账的金额<br>");
            out.write("<input type='text' name='zhuanbal' value=''><br>");
            out.write("<input type='submit' value='确认'>");
            out.write("<input type='hidden' name='uname' value="+uname+">");
            out.write("</form>");
            out.write("</body>");
            out.write("</html>");
        }
    }
    

    service—->
    AtmService

    package service;
    
    import dao.AtmDao;
    import domain.User;
    import jdk.swing.interop.SwingInterOpUtils;
    import util.MySpring;
    
    public class AtmService {
    
        private static AtmDao atmDao = MySpring.getBean("dao.AtmDao");
    
        //登录
        public String login(String uname,String upassword){
            //调用daoc层从数据库中读取信息
            User user = atmDao.queryOne(uname);
            if (user != null && upassword.equals(user.getUpassword())){
                return "登录成功";
            }
            return "用户名或密码错误";
        }
    
        //查询余额
        public Float query(String name) {
             return atmDao.queryOne(name).getUbal();
        }
    
        //存款
        public void cun(String uname, Float cunbal) {
            User user = atmDao.queryOne(uname);
            user.setUbal(user.getUbal()+cunbal);
            //调用dao层更新对象
            atmDao.update(user);
            System.out.println("存款成功");
        }
    
        //存款
        public void qu(String uname, Float bal) {
            User user = atmDao.queryOne(uname);
            if (user.getUbal()>bal) {
                user.setUbal(user.getUbal() - bal);
                atmDao.update(user);
                System.out.println("取款成功");
            }else {
                System.out.println("余额不足");
            }
        }
    
        public void zhuan(String uname, String youname, Float zhuanBal) {
            User myselfUser = atmDao.queryOne(uname);
            User youselfUser = atmDao.queryOne(youname);
            if (myselfUser.getUbal() > zhuanBal && myselfUser != null && youselfUser != null){
                myselfUser.setUbal(myselfUser.getUbal() - zhuanBal);
                youselfUser.setUbal(youselfUser.getUbal() + zhuanBal);
                atmDao.update(myselfUser);
                atmDao.update(youselfUser);
            }else {
                System.out.println("余额不足");
            }
        }
    }
    

    dao—->
    AtmDao

    package dao;
    
    import domain.User;
    
    import java.sql.*;
    
    @SuppressWarnings("all")
    public class AtmDao {
    
        /**读取数据库中的一条记录**/
        public User queryOne(String uname){
            String driver = "com.mysql.cj.jdbc.Driver";
            String url = "jdbc:mysql://localhost:3306/Atm?serverTimezone=CST&&characterEncoding=UTF-8";
            String userName = "root";
            String password = "at123123";
            String sql = "SELECT UNAME,UPASSWORD,UBAL FROM USER WHERE UNAME= ?";
            User user = null;
            try {
                Class.forName(driver);
                Connection conn = DriverManager.getConnection(url, userName, password);
                PreparedStatement pstat = conn.prepareStatement(sql);
                pstat.setString(1,uname);
                ResultSet resultSet = pstat.executeQuery();
                if (resultSet.next()){
                    user = new User(resultSet.getString("UNAME"), resultSet.getString("UPASSWORD"), resultSet.getFloat("UBAL"));
                    pstat.close();
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return user;
        }
    
        public void update(User user) {
            String driver = "com.mysql.cj.jdbc.Driver";
            String url = "jdbc:mysql://localhost:3306/Atm?serverTimezone=CST&&characterEncoding=UTF-8";
            String userName = "root";
            String password = "at123123";
            String sql = "UPDATE USER SET UPASSWORD=?,UBAL=? WHERE UNAME=?";
            try {
                Class.forName(driver);
                Connection conn = DriverManager.getConnection(url, userName, password);
                PreparedStatement pstat = conn.prepareStatement(sql);
                pstat.setString(1,user.getUpassword());
                pstat.setFloat(2,user.getUbal());
                pstat.setString(3,user.getUname());
                pstat.executeUpdate();
                pstat.close();
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    domain—->
    User

    package domain;
    
    public class User {
    
        private String Uname;
        private String Upassword;
        private Float Ubal;
    
        public User() {}
    
        public User(String uname, String upassword, Float ubal) {
            Uname = uname;
            Upassword = upassword;
            Ubal = ubal;
        }
    
        public String getUname() {
            return Uname;
        }
    
        public void setUname(String uname) {
            Uname = uname;
        }
    
        public String getUpassword() {
            return Upassword;
        }
    
        public void setUpassword(String upassword) {
            Upassword = upassword;
        }
    
        public Float getUbal() {
            return Ubal;
        }
    
        public void setUbal(Float ubal) {
            Ubal = ubal;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "Uname='" + Uname + '\'' +
                    ", Upassword='" + Upassword + '\'' +
                    ", Ubal=" + Ubal +
                    '}';
        }
    }
    

    web—>
    index.html

    <html lang="en">
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
            <form action="login" method="post">
                账号:<input type="text" name="uname" value=""><br>
                密码:<input type="password" name="upassword" value=""><br>
                     <input type="submit" value="登录">
            </form>
    
    </body>
    </html>
    

    学习总结:
    学懂的:
    通过实战项目的练习,可以熟练掌握Servlet的开发,学习到了很多设计思想,例如单例设计模式—-生命周期托管。
    Servlet的管理机制
    默认的Servlet对象和我们之前封装的一样,是生命周期托管—-延迟加载的方式
    如果想要修改为启动时立即加载,需要在web.xml中配置
    中间填数字,数组越小加载的对象越快
    继承HttpServlet中有三个父类方法可以重写
    init()方法
    destroy()方法
    service()方法

    ========================================================
    HttpServlet继承GenericServlet抽象类
    GenericServlet实现了Servlet, Serv**letConfig, Serializable接口
    HttpServlet中具体化了service方法,并且构成了方法重载

    service(ServletRequest req,ServletResponse resp)其中这个方法是重写了GenericServlet抽象类中的方法,并强制转换成了HtppServletReq,Resp这两个对象
    service(HttpServletRequest req,HttpServletResponse resp)这个方法中是一堆判断关于Http协议的请求名。

    没学懂的:
    没有
    **