SpringMVC使用注解实现登录

来源:互联网 发布:淘宝全套模板 编辑:程序博客网 时间:2024/05/16 17:51
一、使用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.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://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;}@Overridepublic String toString() {return "User [uname=" + uname + ", upass=" + upass + "]";}}

package com.hlx.dao;import org.springframework.stereotype.Repository;import com.hlx.bean.User;@Repositorypublic 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;@Servicepublic class UserService {@Resourceprivate 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 {//业务层@Resourceprivate 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 exceptionrequest.setAttribute("error", e.getMessage());  //提示错误消息return "jsp/login.jsp";  //返回登录页面}return "jsp/success.jsp";}/** * 退出 * @return */@RequestMapping("dologout")public String doLogout(SessionStatus status){//清空sessionstatus.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;@Controllerpublic 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;@Controllerpublic 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 0
原创粉丝点击