SpringMVC使用注解实现登录功能

2022-11-13 16:11:38 功能 注解 登录

本文实例为大家分享了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>**
    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;
 
    
    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";
    }
    
    @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";
    }
    
    
    @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注解类

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

相关文章