在完成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. C# 6.0/7.0 的新特性

    转眼C#语言都已经迭代到7.0版本了,很多小伙伴都已经把C# 7.0 的新特性应用到代码中了,想想自己连6.0的新特性都还很少使用,今天特意搜集了一下6.0和7.0的一些新特性,记录一下,方便查阅. ...

  2. 《Cracking the Coding Interview》——第5章:位操作——题目8

    2014-03-19 06:33 题目:用一个byte数组来模拟WxH的屏幕,每个二进制位表示一个像素.请设计一个画水平线的函数. 解法:一个点一个点地画就可以了.如果要优化的话,其实可以把中间整字节 ...

  3. 《算法》C++代码 Floyd

    今天写写最短路径的Floyd算法(有翻译叫弗洛伊德,不过这奇葩翻译用来读读就好……). 这个算法的实质,广义来讲,其实是DP(动态规划).其实按说,算法应该先说说什么贪心.搜索.DP.二分之类的基本算 ...

  4. 【Binary Search Tree Iterator 】cpp

    题目: Implement an iterator over a binary search tree (BST). Your iterator will be initialized with th ...

  5. maven中scope标签作用

    scope 是用来限制 dependency 的作用范围的,影响 maven 项目在各个生命周期时导入的 package 的状态,主要管理依赖的部署. scope 的作用范围: (1)compile: ...

  6. python之urllib.request.urlopen(url)报错urllib.error.HTTPError: HTTP Error 403: Forbidden处理及引申浏览器User Agent处理

    最近在跟着院内大神学习python的过程中,发现使用urllib.request.urlopen(url)请求服务器是报错: 在园子里找原因,发现原因为: 只会收到一个单纯的对于该页面访问的请求,但是 ...

  7. 使用dib element proliant-tools制作deploy image

    element proliant-tools会在ipa ramdisk中安装一个rpm包hpssacli(HP的RAID管理工具),和一个python module proliantutils(里面P ...

  8. Codeforces 1088E 树形dp+思维

    比赛的时候看到题意没多想就放弃了.结果最后D也没做出来,还掉分了,所以还是题目做的太少,人太菜. 回到正题: 题意:一棵树,点带权值,然后求k个子连通块,使得k个连通块内所有的点权值相加作为分子除以k ...

  9. Python MySQLdb 模块使用方法

    import MySQLdb 2.和数据库建立连接 conn=MySQLdb.connect(host="localhost",user="root",pass ...

  10. HDU 1171 Big Event in HDU 母函数

    欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory ...