在完成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. 剑指Offer - 九度1214 - 丑数

    剑指Offer - 九度1214 - 丑数2013-11-21 21:06 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. ...

  2. 如何自己编译apue.3e中代码 & 学习写makefile

    本来是搜pthread的相关资料,看blog发现很多linux程序员都看的一本神书<APUE>,里面有系统的两章内容专门讲pthread(不过是用c语言做的代码示例,这个不碍事,还是归到原 ...

  3. WIN10把照片查看器设为默认看图软件

    WIN10默认是PHOTO,没有以前WIN7的照片查看器好用,要改回来的方法如下:   在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo ...

  4. appium-手势密码实现-automationName 是automator2

    上一篇博客已经说了 appium-手势密码实现-automationName 是Appium的情况 下面就说一下automator2的情况: 手势密码的moveTo方法的参数进行了改变. 参数是相对于 ...

  5. 基于TensorFlow的循环神经网络(RNN)

    RNN适用场景 循环神经网络(Recurrent Neural Network)适合处理和预测时序数据 RNN的特点 RNN的隐藏层之间的节点是有连接的,他的输入是输入层的输出向量.extend(上一 ...

  6. HDU 4699 Editor(双向链表)

    双向链表直接模拟. 用一个辅助数组maxSum来维护一下前k项中[1,k]的最大和. 因为光标是一格一格的移动,所以每次光标右移的时候动态更新一下即可. 时间复杂度O(n). #include < ...

  7. vb如何将数据库中某个字段显示在一个文本框

    Dim mrc As ADODB.Recordset Private Sub cmdQuery_Click() Dim txtSQL As String Dim MsgText As String t ...

  8. token的作用

    token的作用 基于 Token 的身份验证方法 使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录.大概的流程是这样的: 客户端使用用户名跟密码请求登录 服务端收到请求,去验证 ...

  9. objective-c runtime 开发详情

    目录 概述 对象与类的实质 id与class 继承关系与isa 总结 C函数创建一个OC类 OC类与runtime NSObjectProtocol NSObject NSProxy 一.概述 Obj ...

  10. Scala 基础(5)—— 构建函数式对象

    有了 Scala 基础(4)—— 类和对象 的前提,现在就可以来构建一个基于 Scala 的函数式对象. 下面开始构造一个有理数对象 Rational. 1. 主构造方法和辅助构造方法 对于每一个类的 ...