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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值