学习内容》:
//========学习内容=========
Tomcat容器
Servlet初识
Servlet练习(1)
Servlet练习(导包+字符集)
Servlet练习(登录及查询)
Servlet练习(查询及存款)
Servlet管理机制(1)
Servlet管理机制(2)
《代码内容》:
主要思路—->做一个银行系统——使用MVC分层架构的思想,实现—登录,查询,存款,取款,转账功能。
//===================================================================================//
src—->
controller->
CunAndQuController
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;
public class CunAndQuBalController 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='docun' method='post'>");
out.write("请"+uname+"输入存款金额<br>");
out.write("<input type='text' name='bal' value><br>");
out.write("<input type='submit' value='确认'>");
out.write("<input type='hidden' name='uname' value="+uname+">");
out.write("</form>");
out.write("<form action='doqu' method='post'>");
out.write("请"+uname+"输入取款金额<br>");
out.write("<input type='text' name='bal' 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>");
}
}
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协议的请求名。
没学懂的:
没有
**