SpringMVC使用注解實(shí)現(xiàn)登錄功能
本文實(shí)例為大家分享了SpringMVC使用注解實(shí)現(xiàn)登錄的具體代碼,供大家參考,具體內(nèi)容如下
一、使用Component\Controller\Service\Repository四大注解類:
- @Component 是通用標(biāo)注
- @Controller 標(biāo)注 web 控制器
- @Service 標(biāo)注 Servicec 層的服務(wù)
- @Respository 標(biāo)注 DAO層的數(shù)據(jù)訪問(wèn)
這些注解都是類級(jí)別的,可以不帶任何參數(shù),也可以帶一個(gè)參數(shù),代表bean名字,在進(jìn)行注入的時(shí)候就可以通過(guò)名字進(jìn)行注入了。
二、@Resource和@Autowired注解的異同
- @Autowired默認(rèn)按類型裝配,默認(rèn)情況下必須要求依賴對(duì)象必須存在,如果要允許null值,可以設(shè)置它的required屬性為false
例如:@Autowired(required=false),如果我們想使用名稱裝配可以結(jié)合@Qualifier注解進(jìn)行使用
- @Resource,默認(rèn)安裝名稱進(jìn)行裝配,名稱可以通過(guò)name屬性進(jìn)行指定,如果沒(méi)有指定name屬性,當(dāng)注解寫在字段上時(shí),默認(rèn)取字段名進(jìn)行安裝名稱查找 ,如果注解寫在setter方法上默認(rèn)取屬性名進(jìn)行裝配 。當(dāng)找不到與名稱匹配的bean時(shí)才按照類型進(jìn)行裝配。但是需要注意的是,如果name屬性一旦指定,就只會(huì)按照名稱進(jìn)行裝配。
三、其他注解類
(1) PathVariable注解類
@RequestMapping注解中使用占位符的情況下,需要使用@PathVariable注解指定占位符參數(shù)
(2) RequestParam注解類
表單提交數(shù)據(jù)時(shí),可以通過(guò)這個(gè)注解來(lái)解決request.getParameter("uname")
(3) CookieValue注解類
如果要保存字符串?dāng)?shù)據(jù),可以使用這個(gè)注解
(4) SessionAttributes注解類
如果希望在多個(gè)請(qǐng)求之間公用某個(gè)模型屬性數(shù)據(jù),則可以在控制器類標(biāo)注一個(gè)@SessionAttributes,SpringMVC會(huì)將模型中對(duì)應(yīng)的屬性暫存到HttpSerssion中除了SessionAttributes,還可以直接用原生態(tài)的request.getSession()來(lái)處理
(5) ResponseBody注解類
用于將Controller的方法返回的對(duì)象,通過(guò)適當(dāng)?shù)腍ttpMessageConverter(轉(zhuǎn)換器)轉(zhuǎn)換為指定格式后,寫入到Response對(duì)象的body數(shù)據(jù)區(qū); 返回如json、xml等時(shí)使用
(6)RequestHeader注解類
@RequestHeader注解,可以把Request請(qǐng)求header部分的值綁定到方法的參數(shù)上
四、應(yīng)用注解來(lái)實(shí)現(xiàn)登錄
(1)、創(chuàng)建工程如下:
(2)、配置文件pom.xml(主要是修改:dependencies的內(nèi)容)
<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 ?? ??? ?"> ?? ?<!-- 自動(dòng)掃描 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數(shù)據(jù) --> ? ? ? ? ? ? ? ? <ref bean="mappingJackson2HttpMessageConverter" /> ? ? ? ? ? ? </util:list> ? ? ? ? ? </property> ? ? </bean> ? ?<!-- 讀寫JSON對(duì)象 --> ? <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文件同前一個(gè)springmvc中的文件相同
(5)JSP頁(yè)面(省略)
(6)創(chuàng)建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 { ? ?? ?/** ?? ? * 根據(jù)用戶名來(lái)查詢 ?? ? * @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對(duì)象 public class UserController { ? ?? ?//業(yè)務(wù)層 ?? ?@Resource ?? ?private UserService userService; ?? ? ?? ?@RequestMapping("login") ?? ?public String toLoginPage(){ ?? ??? ?return "jsp/login.jsp"; ?? ?} ?? ?/** ?? ? *? ?? ? * @param uname 表單傳過(guò)來(lái)的參數(shù) ?? ? * @param upass? ?? ? * @param request ?請(qǐng)求對(duì)象 ?? ? * @return ?? ? */ ?? ?@RequestMapping(value="dologin",method=RequestMethod.POST) ?? ?public String doLogin(@RequestParam String uname,@RequestParam String upass,HttpServletRequest request,ModelMap map){ ?? ??? ?try { ?? ??? ??? ?//調(diào)用方法 ?? ??? ? User user=userService.doLogin(uname,upass); ?? ??? ?? ?? ??? ? //存入user ?? ??? ? map.put("user", user); ?? ??? ? /// ?? ??? ?? ?? ??? ?} catch (Exception e) { ?? ??? ??? ?// TODO: handle exception ?? ??? ??? ?request.setAttribute("error", e.getMessage()); ?//提示錯(cuò)誤消息 ?? ??? ??? ?return "jsp/login.jsp"; ?//返回登錄頁(yè)面 ?? ??? ?} ?? ??? ?return "jsp/success.jsp"; ?? ?} ?? ? ?? ?/** ?? ? * 退出 ?? ? * @return ?? ? */ ?? ?@RequestMapping("dologout") ?? ?public String doLogout(SessionStatus status){ ?? ??? ?//清空session ?? ??? ?status.setComplete(); ?? ??? ?//返回登錄頁(yè)面 ?? ??? ?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; ?? ?} ? }
效果:
注意:這里是數(shù)字
注意:這里只能是數(shù)字,不能字符串,否則找不到頁(yè)面!
總結(jié):
應(yīng)用了四大注解類Component、Controller、Service、Repository;掌握PathVariable,RequestParam注解類
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringMVC?@RequestMapping注解屬性詳細(xì)介紹
- SpringMVC @RequestMapping注解作用詳解
- SpringMVC @DeleteMapping注解無(wú)法獲取參數(shù)值問(wèn)題及解決
- SpringMVC中RequestBody注解的List參數(shù)傳遞方式
- SpringMVC @RequestMapping注解應(yīng)用方法示例講解
- SpringMVC常用注解載入與處理方式詳解
- SpringMVC使用注解配置方式
- SpringMVC基于注解方式實(shí)現(xiàn)上傳下載
- Spring MVC注解式開(kāi)發(fā)示例完整過(guò)程
相關(guān)文章
Spring?Session(分布式Session共享)實(shí)現(xiàn)示例
這篇文章主要介紹了Spring?Session(分布式Session共享)實(shí)現(xiàn)示例,文章內(nèi)容詳細(xì),需要的朋友可以參考下2023-01-01Java中零拷貝和深拷貝的原理及實(shí)現(xiàn)探究(代碼示例)
深拷貝和零拷貝是兩個(gè)在 Java 中廣泛使用的概念,它們分別用于對(duì)象復(fù)制和數(shù)據(jù)傳輸優(yōu)化,下面將詳細(xì)介紹這兩個(gè)概念的原理,并給出相應(yīng)的 Java 代碼示例,感興趣的朋友一起看看吧2023-12-12MyBatis-Plus找不到Mapper.xml文件的幾種解決方法
mybatis-plus今天遇到一個(gè)問(wèn)題,就是mybatis 沒(méi)有讀取到mapper.xml 文件,所以下面這篇文章主要給大家介紹了關(guān)于MyBatis-Plus找不到Mapper.xml文件的幾種解決方法,需要的朋友可以參考下2022-06-06Mybatis-Plus接口BaseMapper與Services使用詳解
這篇文章主要為大家介紹了Mybatis-Plus接口BaseMapper與Services使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05intellij idea創(chuàng)建第一個(gè)動(dòng)態(tài)web項(xiàng)目的步驟方法
這篇文章主要介紹了intellij idea創(chuàng)建第一個(gè)動(dòng)態(tài)web項(xiàng)目的步驟方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10SpringBoot使用Flyway進(jìn)行數(shù)據(jù)庫(kù)遷移的實(shí)現(xiàn)示例
Flyway是一個(gè)數(shù)據(jù)庫(kù)遷移工具,它提供遷移歷史和回滾的功能,本文主要介紹了如何使用Flyway來(lái)管理Spring Boot應(yīng)用程序中的SQL數(shù)據(jù)庫(kù)架構(gòu),感興趣的可以了解一下2023-08-08SpringBoot實(shí)戰(zhàn)之高效使用枚舉參數(shù)(原理篇)案例詳解
這篇文章主要介紹了SpringBoot實(shí)戰(zhàn)之高效使用枚舉參數(shù)(原理篇)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09