mvc实例 java_MVC模式在Java Web应用程序中的实例分析

MVC实例应用模式

完成:MVC模式在Java Web应用程序中的实例分析

结合六个基本质量属性

分析具体功能模块的MVC设计实现(例如登录、用户权限等功能模块)

在实际项目中的具体应用

或分析MVC设计模式在具体网站中的应用(需要列举实例)

首先了解一下MVC框架是什么

模型-视图-控制器(MVC)是一个众所周知的以设计界面应用程序为基础的。它主要通过分离模型、视图及控制器在应用程序中的角色将业务逻辑从界面中解耦。通常,模型负责封装应用程序数据在视图层展示。视图仅仅只是展示这些数据,不包含任何业务逻辑。控制器负责接收来自用户的请求,并调用后台服务(manager或者dao)来处理业务逻辑。处理后,后台业务层可能会返回了一些数据在视图层展示。控制器收集这些数据及准备模型在视图层展示。MVC模式的核心思想是将业务逻辑从界面中分离出来,允许它们单独改变而不会相互影响。

e280b289d5164dddc5d62d98c5c5e67e.png

0c0b7d16b812aa97dfe131bdaf029992.png

以下介绍MVC实例

Controller部分

d6d51d5570c7bfa8a5db6294478f458d.png

LoginController.java

package com.flf.controller;

import java.util.Date;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.servlet.ModelAndView;

import com.flf.entity.Menu;

import com.flf.entity.Role;

import com.flf.entity.User;

import com.flf.service.MenuService;

import com.flf.service.UserService;

import com.flf.util.Const;

import com.flf.util.RightsHelper;

import com.flf.util.Tools;

@Controller

public class LoginController {

@Autowired

private UserService userService;

@Autowired

private MenuService menuService;

/**

* 访问登录页

* @return

*/

@RequestMapping(value="/login",method=RequestMethod.GET)

public String loginGet(){

return "login";

}

/**

* 请求登录,验证用户

* @param session

* @param loginname

* @param password

* @param code

* @return

*/

@RequestMapping(value="/login",method=RequestMethod.POST)

public ModelAndView loginPost(HttpSession session,@RequestParam String loginname,@RequestParam String password,@RequestParam String code){

String sessionCode = (String)session.getAttribute(Const.SESSION_SECURITY_CODE);

ModelAndView mv = new ModelAndView();

String errInfo = "";

if(Tools.notEmpty(sessionCode) && sessionCode.equalsIgnoreCase(code)){

User user = userService.getUserByNameAndPwd(loginname, password);

if(user!=null){

user.setLastLogin(new Date());

userService.updateLastLogin(user);

session.setAttribute(Const.SESSION_USER, user);

session.removeAttribute(Const.SESSION_SECURITY_CODE);

}else{

errInfo = "用户名或密码有误!";

}

}else{

errInfo = "验证码输入有误!";

}

if(Tools.isEmpty(errInfo)){

mv.setViewName("redirect:index.html");

}else{

mv.addObject("errInfo", errInfo);

mv.addObject("loginname",loginname);

mv.addObject("password",password);

mv.setViewName("login");

}

return mv;

}

/**

* 访问系统首页

* @param session

* @param model

* @return

*/

@RequestMapping(value="/index")

public String index(HttpSession session,Model model){

User user = (User)session.getAttribute(Const.SESSION_USER);

user = userService.getUserAndRoleById(user.getUserId());

Role role = user.getRole();

String roleRights = role!=null ? role.getRights() : "";

String userRights = user.getRights();

//避免每次拦截用户操作时查询数据库,以下将用户所属角色权限、用户权限限都存入session

session.setAttribute(Const.SESSION_ROLE_RIGHTS, roleRights); //将角色权限存入session

session.setAttribute(Const.SESSION_USER_RIGHTS, userRights); //将用户权限存入session

List

if(Tools.notEmpty(userRights) || Tools.notEmpty(roleRights)){

for(Menu menu : menuList){

menu.setHasMenu(RightsHelper.testRights(userRights, menu.getMenuId()) || RightsHelper.testRights(roleRights, menu.getMenuId()));

if(menu.isHasMenu()){

List

for(Menu sub : subMenuList){

sub.setHasMenu(RightsHelper.testRights(userRights, sub.getMenuId()) || RightsHelper.testRights(roleRights, sub.getMenuId()));

}

}

}

}

model.addAttribute("user", user);

model.addAttribute("menuList", menuList);

return "index";

}

/**

* 进入首页后的默认页面

* @return

*/

@RequestMapping(value="/default")

public String defaultPage(){

return "default";

}

/**

* 用户注销

* @param session

* @return

*/

@RequestMapping(value="/logout")

public String logout(HttpSession session){

session.removeAttribute(Const.SESSION_USER);

session.removeAttribute(Const.SESSION_ROLE_RIGHTS);

session.removeAttribute(Const.SESSION_USER_RIGHTS);

return "login";

}

}

View部分

8324bfe9d732c76c8855ce98ac2f1923.png

Login.jsp

XXX管理系统

body{margin-left: 0px;margin-top: 0px;margin-right: 0px;margin-bottom: 0px;background-color: #1B3142;}

.header{width:100%;height:41px;background: url(images/login-top-bg.gif) repeat-x;}

.center{width:100%;height:532px;background: url(images/login_bg.jpg) repeat-x;}

.login_right{float:right;width:50%;height:100%;background: url(images/login-wel.gif) bottom no-repeat;}

.login_left{float:right;width:295px;height:100%;background: url(images/login-content-bg.gif) no-repeat;}

.login_title{margin-left:35px;font-family: Arial, Helvetica, sans-serif;font-size: 14px;height:36px;line-height: 36px;color: #666666;font-weight: bold;}

.login_info{margin-left:35px;font-family: Arial, Helvetica, sans-serif;font-size: 12px;height:36px;line-height: 36px;color: #333333;}

.login_input{width:150px;height:20px;margin-left:30px;border:1px solid #7F9DB9;vertical-align: middle;}

.login_code{width:70px;height:20px;margin-left:30px;border:1px solid #7F9DB9;vertical-align: middle;}

.btn{width:60px;height:25px;border-width:0px;background-image: url(images/btn-bg2.gif);letter-spacing: 3px;margin-right:70px;cursor: pointer;}

.login_info img{vertical-align: middle;cursor: pointer;}

.errInfo{display:none;color:red;}

.logo{width:100%;height:68px;background: url(images/logo2.png) no-repeat;_background:none;_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/logo2.png';)}

.left_txt{font-family: Arial, Helvetica, sans-serif;font-size: 12px;line-height: 25px;color: #666666;}

.bottom{width:100%;height:auto;text-align:center;font-family: Arial, Helvetica, sans-serif;font-size: 10px;color: #ABCAD3;text-decoration: none;line-height: 20px;}

var errInfo = "${errInfo}";

$(document).ready(function(){

changeCode();

$("#codeImg").bind("click",changeCode);

if(errInfo!=""){

if(errInfo.indexOf("验证码")>-1){

$("#codeerr").show();

$("#codeerr").html(errInfo);

$("#code").focus();

}else{

$("#nameerr").show();

$("#nameerr").html(errInfo);

}

}

$("#loginname").focus();

});

function genTimestamp(){

var time = new Date();

return time.getTime();

}

function changeCode(){

$("#codeImg").attr("src","code.html?t="+genTimestamp());

}

function resetErr(){

$("#nameerr").hide();

$("#nameerr").html("");

$("#pwderr").hide();

$("#pwderr").html("");

$("#codeerr").hide();

$("#codeerr").html("");

}

function check(){

resetErr();

if($("#loginname").val()==""){

$("#nameerr").show();

$("#nameerr").html("用户名不得为空!");

$("#loginname").focus();

return false;

}

if($("#password").val()==""){

$("#pwderr").show();

$("#pwderr").html("密码不得为空!");

$("#password").focus();

return false;

}

if($("#code").val()==""){

$("#codeerr").show();

$("#codeerr").html("验证码不得为空!");

$("#code").focus();

return false;

}

return true;

}

Model

2f75ba84a6c26bfe40d63724212b8a2c.png

user.xml

/p>

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

loginname,username,password,rights,status,role_id

select u.user_id,u.username,u.loginname,u.password,r.role_id,r.role_name ,u.last_login

from tb_user u

left join tb_role r on u.role_id=r.role_id

where u.status=0

select u.user_id,u.username,u.loginname,u.password,r.role_id,r.role_name ,u.last_login

from tb_user u

left join tb_role r on u.role_id=r.role_id

where u.status=0

and u.loginname like "%"#{loginname}"%"

and u.role_id=#{roleId}

and u.last_login>=#{lastLoginStart}

and u.last_login<=#{lastLoginEnd}

select * from tb_user where 1=1

and loginname = #{loginname} and password=#{password}

and user_id = #{userId}

select * from tb_user u where u.user_id = #{userId}

select u.user_id,u.username,u.rights as user_rights,u.loginname,u.password,r.role_id,r.role_name,r.rights as role_rights

from tb_user u

left join tb_role r on u.role_id=r.role_id

where u.status=0 and u.user_id=#{userId}

select count(user_id) from tb_user where loginname=#{loginname}

select count(user_id) from tb_user where status=0

and loginname like "%"#{loginname}"%"

and role_id=#{roleId}

and last_login>=#{lastLoginStart}

and last_login<=#{lastLoginEnd}

insert tb_user () values (#{loginname},#{username},#{password},#{rights},0,#{roleId})

update tb_user set

loginname=#{loginname},

username=#{username},password=#{password},

rights=#{rights},

status=#{status},

role_id=#{roleId},

last_login=#{lastLogin}

where user_id=#{userId}

update tb_user set last_login=#{lastLogin} where user_id=#{userId}

update tb_user set

loginname=#{loginname},

username=#{username},

role_id=#{roleId}

,password=#{password}

where user_id=#{userId}

update tb_user set rights=#{rights} where user_id=#{userId}

delete from tb_user where user_id=#{userId}

在本实例中,还通过MyExceptionResolver.java检测异常,提高了系统的可用性,代码如下

package com.flf.resolver;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerExceptionResolver;

import org.springframework.web.servlet.ModelAndView;

//可用性

public class MyExceptionResolver implements HandlerExceptionResolver{

public ModelAndView resolveException(HttpServletRequest request,

HttpServletResponse response, Object handler, Exception ex) {

// TODO Auto-generated method stub

System.out.println("==============异常开始=============");

ex.printStackTrace();

System.out.println("==============异常结束=============");

ModelAndView mv = new ModelAndView("error");

mv.addObject("exception", ex.toString().replaceAll("\n", "
"));

return mv;

}

}

与此同时通过登录的权限控制提高了系统的安全性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值