在完成Dao层的实现之后,接下来我们需要继续开发我们网页的Control层以及View层。

从开发网页的角度来说:

1. Control层之下的Dao层和Service层可以看做是一个网页的底层负责与数据库交互,做数据持久化,实现一些逻辑业务等

2. Control层自身则是一个网页的中间层,负责联通Dao层以及View层,将View层的请求传向Dao层,并从Dao层获取数据,再返回到View层进行显示

3. View层则是网页的上层,负责直接与用户进行交互,获取用户的需求,将用户的需求转变成一个个的请求,向下传递与Control层。

并且从层级结构上来说,Control与View的连接更为紧密,所以往往这两层是一起进行开发的。

在进行Control层开发的时候,由于网页的每部分可执行的操作不同,可以依据这些不同的行为操作分化出许多个控制器对网页的操作进行监控,比如我们的网页在刚打开的时候,需要进行一个用户的登录的过程,那么这个过程我们可以分化出一个UserLoginController对用户的行为从View传下来的请求进行相应的响应和Action。

此处要补充说明一点,基于SpringMVC3.0之后的框架,网页的URL请求映射可采用注解的形式 @RequestMapping 进行,十分的方便开发,并且对于每一个URL请求的相应返回,可以通过对配置文件的配置,直接返回对应的字符串,view层就会展示相应的JSP页面,或者可以通过返回ModelAndView对象,可向jsp页面传入数据。

以下是实现用户登录控制器UserLoginController代码:

package Fmu.wellhold.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView; import Fmu.wellhold.dao.ITF.UserInfoDaoITF;
import Fmu.wellhold.dao.pojo.UserInfo; @Controller
public class UserLoginController { @Resource private UserInfoDaoITF userInfoService; @RequestMapping(value="/index",method={RequestMethod.GET})
public String modelAutoBindtoIndex(HttpServletRequest request)
{
//配合XML当中的视图映射实用
System.out.println(">>>> 已经启动Controller");
return "index";
} @RequestMapping(value="/index", method = {RequestMethod.POST})
public ModelAndView modelAutoBindtologin(HttpServletRequest request,UserInfo UserInfo)
{
List list=new ArrayList();
list=userInfoService.findByNamePwd(UserInfo.getId(),UserInfo.getPwd());
System.out.println("查询结果是:"+list.size());
if(list.isEmpty())
{
System.out.println(">>>> 不存在该用户");
// model.addAttribute("accountmodel", UserInfo);
return new ModelAndView("forworld","erro","the user is not exit");
}
else
{
UserInfo user = (UserInfo) list.get(0);
if(user.getNumber()<=10){
System.out.println(">>>> 该用户为管理员");
list.add(userInfoService.findAll());
System.out.println(list.get(0));
return new ModelAndView("showUser1","list",list);
} System.out.println(">>>> 普通用户登录");
Map map = new HashMap();
map.put("user", user);
return new ModelAndView("userInfo","map",map);
}
} }
方法modelAutoBindtoIndex作用是当浏览器输入http://localhost:8080/MoneyRecordSys/index的时候,向view层返回显示index.jsp的响应,而方法modelAutoBindtoLogin是当用户从index.jsp页面
post回一些数据的时候,控制器映射到的该方法负责进行逻辑处理,并且再次向View层返回View下一步要进行的响应,即应该继续显示哪个页面,此处为showUser1.jsp,并且将list这个对象传到该JSP当中,list[0]记录当前
用户信息,list[1]里头包涵另个list,这个list内容是网页当中所有用户的数据。 一下是index.jsp代码:
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
</style>
</head> <body>
<!-- 控制格式,纵向居中 -->
<table width="500" height="195" align="center">
<tr>
<td>&nbsp;</td>
</tr>
</table>
<!--标签中的name和ID是两个概念,name面向后台,id面向jsp -->
<form method="post">
<table width="1500" height="570" align="center" background="images/2.png">
<tr>
<td colspan="2">&nbsp;</td>
<td>${error}</td>
</tr>
<tr>
<td width="500">&nbsp;</td>
<td width=136><span style="font-size:30pt;font-family:宋体;font-weight:bold">用户名</span></td>
<td width="404"><input name="id" type="text" style="height:35px;width:350px"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><span style="font-size:30pt;font-family:宋体;font-weight:bold">密码</span></td>
<td><input name="pwd" type="password" style="height:35px;width:350px"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="2" align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" value="login" style="height:50px;width:200px;font-size:18pt;font-family:Calibri;font-weight:bold"></td>
</tr>
</table>
</form>
<br> </body>
</html>

此处补充说明一个点:在jsp当中,我们可以看到标签中的name和ID是两个概念,name是面向后台,id面向的则是jsp,在index.jsp我们将用户输入的用户名和密码以 name="id"和name="pwd"

POST回控制器对应的接受方法 public ModelAndView modelAutoBindtologin(HttpServletRequest request,UserInfo UserInfo),形参中并没有HttpServletResponse而是UserInfo是因为

UserInfo这个POJO类当中,正好有两个字段名为id和pwd,所以index.jsp  POST回来的用户名和密码则自动解析到了UserInfo当中。

当用户以管理员的权限登录成功之后,进入到主界面当中,并且可以向网页的注册用户信息进行一系列的操作,这一系列的操作,我们分化出一个UserOperationController控制器进行管理和监控,包括

添加用户,删除用户,更改用户的信息等操作。

package Fmu.wellhold.controller;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView; import Fmu.wellhold.dao.ITF.UserInfoDaoITF;
import Fmu.wellhold.dao.pojo.UserInfo; @Controller
public class UserOperationController { @Resource private UserInfoDaoITF UserInfoService;
@Resource private FileUpload fileUpload;//注入则不需要new了 @RequestMapping(value="showUser1",method={RequestMethod.GET})
public ModelAndView showUser(HttpServletRequest request,HttpServletResponse response)
{
String number = request.getParameter("number");
List list=new ArrayList<>();
list.add(UserInfoService.findByld(Integer.valueOf(number)));
// System.out.println("showUser控制器已启动");
list.add(UserInfoService.findAll());
return new ModelAndView("showUser1","list",list);
} @RequestMapping(value="updateTheUser",method={RequestMethod.GET})
public ModelAndView getToupdateTheUser(HttpServletRequest request,HttpServletResponse response) throws Exception
{
String number = request.getParameter("number");
String user= request.getParameter("user");
// System.out.println("updateTheUser,已经启动控制器");
List list=new ArrayList<>(); UserInfo user1=(UserInfo)UserInfoService.findByld(Integer.valueOf(user));
list.add(user1);
list.add(UserInfoService.findByld(Integer.valueOf(number)));
return new ModelAndView("updateTheUser","list",list); }
@RequestMapping(value="postTheUpdateUserInfo",method={RequestMethod.POST})
public ModelAndView updateTheUserInfo(HttpServletRequest request,HttpServletResponse response) throws Exception
{ Map<String, String> map = fileUpload.upload(request, response);
// System.out.println(map.toString());
UserInfo user = new UserInfo();
user.setId(map.get("id"));
user.setPwd(map.get("pwd"));
user.setName(map.get("name"));
user.setSex(map.get("sex"));
// user.setBirthday(map.get("birthday"));
user.setCome(map.get("come"));
user.setRemark(map.get("remark"));
user.setNumber(Integer.valueOf(map.get("number").toString()));
// System.out.println(user.toString());
UserInfoService.update(user);
// return null;
return showUser(request, response);
} @RequestMapping(value="deleteUser",method={RequestMethod.GET})
public ModelAndView deleteUser(HttpServletRequest request,HttpServletResponse response) throws Exception
{
String number=request.getParameter("deleteUserNum");
// System.out.println("deleteUser"+number);
UserInfoService.delete(Integer.valueOf(number));
return showUser(request, response);
} @RequestMapping(value="insertTheUser",method={RequestMethod.GET})
public ModelAndView getToInsertUser(HttpServletRequest request,HttpServletResponse response) throws Exception
{
String number = request.getParameter("number");
// System.out.println("insertTheUser,已经启动控制器");
List list=new ArrayList<>();
UserInfo user1=(UserInfo)UserInfoService.findByld(Integer.valueOf(number));
list.add(user1);
return new ModelAndView("insertTheUser","list",list);
} @RequestMapping(value="postTheInsertUserInfo",method={RequestMethod.POST})
public ModelAndView postTheInsertUserInfo(HttpServletRequest request,HttpServletResponse response) throws Exception
{
// System.out.println("postTheInsertUserInfo控制器已启动");
Map<String, String> map = fileUpload.upload(request, response);
// System.out.println(map.toString());
if (map != null)
{
UserInfo user = new UserInfo();
user.setId(map.get("id"));
user.setPwd(map.get("pwd"));
user.setName(map.get("name"));
user.setSex(map.get("sex"));
user.setCome(map.get("come"));
user.setRemark(map.get("remark"));
UserInfoService.insert(user);
}
else
{
PrintWriter out = response.getWriter();
out.print("<script type='text/javascript'>");
out.print("alert('你提交的新建用户为空');");
out.print("window.history.go(-1);");
out.print("</script>");
out.close();
}
return showUser(request, response);
} }

未完待续。。。

 

SpringMVC + Hibernate + MySQL 的简易网页搭建(Control实现篇)的更多相关文章

  1. SpringMVC + Hibernate + MySQL 的简易网页搭建(Dao层 实现篇)

    首先在搭建一个网站后台前,需要明确出一个合理的网页搭建的结构框架,即从DB  ==>  Dao层 ==>Service层 ==>Control层 ==>View层(该层严格意义 ...

  2. JSP+Spring+SpringMVC+Hibernate+Mysql实现的校园失物招领网站

    项目简介 项目来源于:https://github.com/wenlongup/LostAndFound 因原github仓库无数据库文件,经过本人修改,现将该仓库重新上传至个人gitee仓库. ht ...

  3. CentOS 7 yum nginx MySQL PHP 简易环境搭建

    用centos自带的yum源来安装nginx,mysql和php,超级方便,省去编译的麻烦,省去自己配置的麻烦,还能节省非常多的时间. 我们先把yum源换成国内的阿里云镜像源(当然不换也可以),先备份 ...

  4. SpringMvc+Hibernate+Mysql保存表情字符(昵称)到数据库报错的问题?

    背景: 一个中小型H5游戏 描述: 游戏通过微信授权登入, 获取到用户昵称并将用户信息保存至Mysql数据库, 当遇到有些用户微信昵称中带有表情(特殊字符)时, 保存至数据库出错! 核心错误: Cau ...

  5. CentOS 7 yum nginx MySQL PHP7 简易环境搭建(精)

    用centos自带的yum源来安装nginx,mysql和php,超级方便,省去编译的麻烦,省去自己配置的麻烦,还能节省非常多的时间. 我们先把yum源换成国内的阿里云镜像源(当然不换也可以),先备份 ...

  6. springMvc+hibernate的web application的构建

    闲来没事,想整理下一些知识. 这篇文章是关于spring的web程序的搭建,有什么不对的地方希望大家批评指正. 首先我们要了解什么是spring,这里可能很多大家也都明白,无非是一个管理对象的一个容器 ...

  7. springMVC+angular+bootstrap+mysql的简易购物网站搭建

    springMVC+angular+bootstrap+mysql的简易购物网站搭建 介绍 前端的css框架用了bootstrap, 以及bootstrap的JS组件, 以及很好用的angular(a ...

  8. Maven搭建SpringMVC+Hibernate项目详解 【转】

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  9. Maven搭建SpringMVC+Hibernate项目详解

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

随机推荐

  1. Synology DS213J 群晖NAS git server架设方法!

    最近单位购入一台Synology  DS213J用作数据存储. 本人打算将一些项目的源代码也放在上面,他本身的套件中心提供了SVN SERVER和GIT SERVER. 设置SVN SERVER非常简 ...

  2. Java基础-4变量与数据类型

    变量:变量是Java程序中的一个基本存储单元.变量是一个标识符.类型及一个可选初始值的组合定义.所有的变量都有一个作用域,即变量在某一区域有效. 基本的变量声明方式如下: int a; float b ...

  3. mac虚拟机上(centos系统)设置联网

    前面介绍了mac安装虚拟机VirtualBox,并在虚拟机上装上了centos,这里在说明一下联网问题. 首先打开centos系统,并输入命令$ ip addr 可得到如下: 发现找不到ip地址,这时 ...

  4. Python全栈工程师(每周总结:3)

     ParisGabriel                                                           每天坚持 一天一篇 点个订阅吧  灰常感谢    当个死 ...

  5. CentOS 6.3 下 vsftp搭建

    环境:CentOS6.3 ftp的三种用户模式 匿名用户:vsftp默认开启匿名用户,但只允许下载不允许上传:匿名用户anonymous或ftp:匿名用户目录/var/ftp,但实际上vsftp对匿名 ...

  6. 九 DIP 依赖倒置原则

    首先看定义: 1.高层模块不依赖于低层模块,两者都应该依赖于抽象层 2.抽象不能依赖于细节,细节必须依赖于抽象 首先,模块是个抽象的概念,可以大到一个系统中的子系统作为一个模块,也可以是某个子系统中的 ...

  7. 在.net2.0中实现Action和Func方法

    由于这两个是在.net3.5中新加入的特性,所以我们需要自己写一下. 格式如下: delegate void Action();        delegate void Action<T, T ...

  8. PHP文件操作函数及文件指针理解

    知识点: 一.fopen(),文件打开函数,读写参数有: 1.R  : 只读,指针在文件开头 2.r+:读写,指针同上 3.W :只写,写入前会删除文件内容,然后指针回到文件开头,文件不存在则创建 4 ...

  9. 想玩API,这些套路我来告诉你!

    小伙伴是不是时常听说各种api接口的问题呢,可能许多人第一感觉:那是什么个玩意儿,那么多人回去研究它,今天思梦PHP小编就来为你揭开他的神秘的面纱,先看一下百度百科上面的官方的解释: 其实说白了就是为 ...

  10. Custom LDAP Monitor Does Not Work

    Custom LDAP Monitor Does Not Work https://www.poppelgaard.com/netscaler-case-study-custom-ldap-monit ...