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"); } }