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

猜你喜欢

转载自www.cnblogs.com/shijinglu2018/p/10426334.html