SpringMVC使用注解实现登录功能

本文实例为大家分享了SpringMVC使用注解实现登录的具体代码,供大家参考,具体内容如下

一、使用Component\Controller\Service\Repository四大注解类:

  • @Component 是通用标注
  • @Controller 标注 web 控制器
  • @Service 标注 Servicec 层的服务
  • @Respository 标注 DAO层的数据访问

这些注解都是类级别的,可以不带任何参数,也可以带一个参数,代表bean名字,在进行注入的时候就可以通过名字进行注入了。

二、@Resource和@Autowired注解的异同

  • @Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false

例如:@Autowired(required=false),如果我们想使用名称装配可以结合@Qualifier注解进行使用

  • @Resource,默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找 ,如果注解写在setter方法上默认取属性名进行装配 。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

三、其他注解类 

(1) PathVariable注解类

@RequestMapping注解中使用占位符的情况下,需要使用@PathVariable注解指定占位符参数

(2) RequestParam注解类

表单提交数据时,可以通过这个注解来解决request.getParameter("uname")

(3) CookieValue注解类

如果要保存字符串数据,可以使用这个注解

(4) SessionAttributes注解类

如果希望在多个请求之间公用某个模型属性数据,则可以在控制器类标注一个@SessionAttributes,SpringMVC会将模型中对应的属性暂存到HttpSerssion中除了SessionAttributes,还可以直接用原生态的request.getSession()来处理

(5) ResponseBody注解类

用于将Controller的方法返回的对象,通过适当的HttpMessageConverter(转换器)转换为指定格式后,写入到Response对象的body数据区;  返回如json、xml等时使用

(6)RequestHeader注解类

@RequestHeader注解,可以把Request请求header部分的值绑定到方法的参数上

四、应用注解来实现登录

(1)、创建工程如下:

(2)、配置文件pom.xml(主要是修改:dependencies的内容)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>springmvc</groupId>
    <artifactId>springmvc</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name />
    <description />
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1-b05</version>
        </dependency>
 
        <!-- jackson start -->
 
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.1.0</version>
        </dependency>
        <!-- jackson end -->
    </dependencies>
    <build>
        <finalName>springmvc</finalName>
        <sourceDirectory>${basedir}/src</sourceDirectory>
        <outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory>
        <resources>
            <resource>
                <directory>${basedir}/src</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webappDirectory>${basedir}/WebRoot</webappDirectory>
                    <warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

(3)spring-mvc.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/util  http://www.springframework.org/schema/util/spring-util-3.0.xsd
        ">
    <!-- 自动扫描 com.hlx 包下面的所有组件(使用了springmvc注解)-->
    <context:component-scan base-package="com.hlx.*" />
 
   <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <util:list >
                <!-- 配置处理JSON数据 -->
                <ref bean="mappingJackson2HttpMessageConverter" />
            </util:list>
 
        </property>
    </bean>
 
 <!-- 读写JSON对象 -->
  <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="supportedMediaTypes">
     <list>
      <value>text/html;charset=UTF-8</value>
     </list>
    </property>
  </bean>
  
</beans>

(4)web.xml文件同前一个springmvc中的文件相同

(5)JSP页面(省略)

(6)创建src/main/java 下 bean,dao.service,controller

package com.hlx.bean;
 
public class User {
    private String uname;
    private String upass;
 
    public String getUname() {
        return uname;
    }
 
    public void setUname(String uname) {
        this.uname = uname;
    }
 
    public String getUpass() {
        return upass;
    }
 
    public void setUpass(String upass) {
        this.upass = upass;
    } 
    public User() {
        super();
    }
 
    public User(String uname, String upass) {
        super();
        this.uname = uname;
        this.upass = upass;
    }
 
    @Override
    public String toString() {
        return "User [uname=" + uname + ", upass=" + upass + "]";
    }
 
    
}
package com.hlx.dao;
 
import org.springframework.stereotype.Repository;
 
import com.hlx.bean.User;
 
@Repository
public class UserDao {
 
    /**
     * 根据用户名来查询
     * @param uname
     * @return
     */
    public User selectByName(String uname) {
        if ("admin".equals(uname)) {
            User user = new User("admin", "aaa");
            return user;
        }
        return null;
    }
 
}
package com.hlx.service;
 
import javax.annotation.Resource;
 
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.ModelAndView;
 
import com.hlx.bean.User;
import com.hlx.dao.UserDao;
 
@Service
public class UserService {
 
    @Resource
    private UserDao userDao;
 
    /**
     * 登录处理
     * @param uname
     * @param upass
     * @return
     * @throws Exception
     */
    public User doLogin(String uname, String upass) throws Exception {
        // 判断
        if (uname == null || "".equals(uname)) {
            throw new Exception("用户名不能为空!");
        }
        if (upass == null || "".equals(upass)) {
            throw new Exception("密码不能为空!");
        }
 
        User user = userDao.selectByName(uname);
 
        if (user == null) {
            throw new Exception("用户名不存在!");
        }
 
        if (!user.getUpass().equals(upass)) {
            throw new Exception("密码不正确!");
        }
 
        return user;
 
    }
}
package com.hlx.controller;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
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.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
 
 
import com.hlx.bean.User;
import com.hlx.service.UserService;
 
@Controller
@SessionAttributes("user") //保存user对象
public class UserController {
 
    //业务层
    @Resource
    private UserService userService;
    
    @RequestMapping("login")
    public String toLoginPage(){
        return "jsp/login.jsp";
    }
    /**
     * 
     * @param uname 表单传过来的参数
     * @param upass 
     * @param request  请求对象
     * @return
     */
    @RequestMapping(value="dologin",method=RequestMethod.POST)
    public String doLogin(@RequestParam String uname,@RequestParam String upass,HttpServletRequest request,ModelMap map){
        try {
            //调用方法
         User user=userService.doLogin(uname,upass);
         
         //存入user
         map.put("user", user);
         ///
         
        } catch (Exception e) {
            // TODO: handle exception
            request.setAttribute("error", e.getMessage());  //提示错误消息
            return "jsp/login.jsp";  //返回登录页面
        }
        return "jsp/success.jsp";
    }
    
    /**
     * 退出
     * @return
     */
    @RequestMapping("dologout")
    public String doLogout(SessionStatus status){
        //清空session
        status.setComplete();
        //返回登录页面
        return "jsp/login.jsp";
    }
    
}

效果:

package com.hlx.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
import com.hlx.bean.User;
 
@Controller
public class JSONController {
 
    @ResponseBody
    @RequestMapping("/getJson")
    public User getUserinfo(){
        User user = new User("mike", "123456");
        return user;
    }
}

效果:

package com.hlx.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
import com.hlx.bean.User;
 
@Controller
public class PathVariableControler {
    
    @ResponseBody
    @RequestMapping("/pathvariable/{uname}")
    public User test1(@PathVariable String uname){
        User user = new User();
        user.setUname("john");
        return user;
    }
    @ResponseBody
    @RequestMapping("/pathvariable2/{intval}")
    public User test1(@PathVariable Integer intval){
        User user = new User();
        user.setUname(intval + "");
        return user;
    }
 
}

效果:

注意:这里是数字

注意:这里只能是数字,不能字符串,否则找不到页面!

总结: 

应用了四大注解类Component、Controller、Service、Repository;掌握PathVariable,RequestParam注解类

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringMVC使用注解配置方式

    目录 SpringMVC注解配置方式 一.创建初始化类 二.spring的配置类 三.WebConfig 配置类 剩余配置 SpringMVC注解配置方式 使用配置类和注解代替 web.xml 和 SpringMVC配置文件 的功能. 一.创建初始化类 在 Servlet3.0 环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置 Servlet 容器. Spring 提供了这个接口的实现,名为Spr

  • SpringMVC常用注解载入与处理方式详解

    目录 一 . 前言 二 . RestController 部分 三 . RequestMapping 部分 四 . RequestParam和PathVariable 五 . RequestBody 和 ResponseBody 总结 一 . 前言 这一篇来看一下SpringMVC 中各个注解载入的方式和处理的时机 二 . RestController 部分 RestController 注解主要的作用是Bean的加载 , 值得关注的注解包括 : @Controller 和 @ResponseB

  • SpringMVC基于注解方式实现上传下载

    目录 一.文件下载 1-1.servlet原生方式下载 1-2.使用ResponseEntity实现下载 二.文件上传 2-1.添加commons-fileupload依赖 2-2.配置spring.xml注入CommonsMultipartResolver文件上传解析器 2-3.文件上传 一.文件下载 1-1.servlet原生方式下载 /**  * 基于servlet api的文件下载  */ @RequestMapping("/download") public String d

  • 一文搞懂SpringMVC中@InitBinder注解的使用

    目录 简介 应用示例 原理解读 环境:Springboot2.4.12 简介 ​@Controller或@ControllerAdvice类可以有@InitBinder方法来初始化WebDataBinder的实例,这些方法可以: 将请求参数(即表单或查询数据)绑定到模型对象. 将基于字符串的请求值(如请求参数.路径变量.头.cookie等)转换为控制器方法参数的目标类型. 渲染HTML表单时,将模型对象的值格式化为字符串值. @InitBinder方法可以注册控制器特定的java.bean.Pr

  • SpringMVC中@RequestMapping注解用法实例

    目录 1 修饰类和方法 2 value 3 method 4 params和headers 5 Ant路径 5 @PathVariable 6 HiddenHttpMethodFilter 7 @RequestParam 8 @RequestHeader 9 @CookieValue 总结 1 修饰类和方法 package site.exciter.springmvc.handlers; import org.springframework.stereotype.Controller; impo

  • 分析讲解SpringMVC注解配置如何实现

    目录 简介 注解类代替web.xml 注解类代替Spring-mvc.xml 简介 使用配置类和注解代替web.xml和SpringMVC配置文件的功能 在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器. Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类又会查找实现WebApplicationI

  • SpringMVC使用注解实现登录功能

    本文实例为大家分享了SpringMVC使用注解实现登录的具体代码,供大家参考,具体内容如下 一.使用Component\Controller\Service\Repository四大注解类: @Component 是通用标注 @Controller 标注 web 控制器 @Service 标注 Servicec 层的服务 @Respository 标注 DAO层的数据访问 这些注解都是类级别的,可以不带任何参数,也可以带一个参数,代表bean名字,在进行注入的时候就可以通过名字进行注入了. 二.

  • IDEA实现 springmvc的简单注册登录功能的示例代码

    1.基本环境搭建 spring简介 SpringMVC框架是以请求为驱动,围绕Servlet设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图.其中核心类是DispatcherServlet,它是一个Servlet,顶层是实现的Servlet接口. project创建 在图中填上项目名称即可,其他直接next 如上图所示,创建两个包,并且指定包的类型,如下图,java包指定为Sources Root,resouces包指定为Resources root 整个目录结构: pom依赖

  • SpringMVC 如何使用注解完成登录拦截

    为了实现用户登录拦截你是否写过如下代码呢? 1. 基于Filter import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.s

  • springmvc+spring+mybatis实现用户登录功能(上)

    由于本人愚钝,整合ssm框架真是费劲了全身的力气,所以打算写下这篇文章,一来是对整个过程进行一个回顾,二来是方便有像我一样的笨鸟看过这篇文章后对其有所帮助,如果本文中有不对的地方,也请大神们指教. 一.代码结构 整个项目的代码结构如图所示: controller为控制层,主要用于对业务模块的流程控制. dao为数据接入层,主要用于与数据库进行连接,访问数据库进行操作,这里定义了各种操作数据库的接口. mapper中存放mybatis的数据库映射配置.可以通过查看mybatis相关教程了解 mod

  • SpringMVC自定义拦截器登录检测功能的实现代码

    目录 一.定义登录控制器 二.自定义登录拦截器 一.定义登录控制器 目录结构 代码: 1.创建TUser类 package com.demo.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class TUser { private String name;

  • 一个注解搞定Spring Security基于Oauth2的SSO单点登录功能

    目录 一.说明 二.原理说明 2.1. 同域单点登录 2.2. 跨域单点登录 2.3. 基于Oauth2的跨域单点登录流程 三.Spring Security实现 四.demo下载地址 一.说明 单点登录顾名思义就是在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,免除多次登录的烦恼.本文主要介绍 同域 和 跨域 两种不同场景单点登录的实现原理,并使用 Spring Security 来实现一个最简单的跨域 SSO客户端 . 二.原理说明 单点登录主流都是基于共享 cookie

  • 基于AngularJS+HTML+Groovy实现登录功能

    AngularJS是开发基于浏览器的响应式RWD应用程序的一个前端MVC框架,由谷歌最初开发的 开源项目,干净的架构吸引了大量粉丝,适合建立CRUD类型的业务应用程序,并不适合开发游戏等应用, 使用声明性编程的用户界面和命令式编程的逻辑, 支持现代桌面和移动浏览器 Internet Explorer版本8.0及以上. AngularJS是一款客户端MVC的javascript框架,而客户端MVC代表未来架构(为什么要使用MVC+REST+CQRS 架构),如果你有Struts或SpringMVC

  • react-native 完整实现登录功能的示例代码

    react native实现登录功能,包括ui的封装.网络请求的封装.导航器的实现.点击事件. demo下载:react-native 完整实现登录功能 后台如果是springmvc实现的需要配置上如下代码 <!--加入multipart 的解析器,这个必须配置,一会在controller里抓取上传文件时要用.否则会报错.--> <bean id="multipartResolver" class="org.springframework.web.multi

  • springmvc+shiro+maven 实现登录认证与权限授权管理

    Shiro 是Shiro 是一个 Apache 下的一开源项目项目,旨在简化身份验证和授权. 1:shiro的配置,通过maven加入shiro相关jar包 <!-- shiro --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.1</version> <

  • Spring MVC+mybatis实现注册登录功能

    本文实例为大家分享了Spring MVC mybatis实现注册登录功能的具体代码,供大家参考,具体内容如下 前期准备: 如下图所示,准备好所需要的包 新建工程,导入所需要的包,在web.xml中配置好所需要的,如下 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee&q

随机推荐