码迷,mamicode.com
首页 > 编程语言 > 详细

springMVC基础知识小结

时间:2018-05-07 22:45:53      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:inf   需要   cat   前缀   class   流程   加载   control   mvc   

SpringMVC学习笔记
第一讲 简单使用SpringMVC框架
    通过springMVC做一个简单的登录功能,从而简单了解一下SpringMVC的运行流程:
    1.导入相应的jar包
	  spring-webmvc.jar包
	2.SpringMVC配置文件springmvc.xml文件:
	  <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"  
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
            xmlns:aop="http://www.springframework.org/schema/aop"  
            xmlns:tx="http://www.springframework.org/schema/tx"  
            xmlns:context="http://www.springframework.org/schema/context"  
            xsi:schemaLocation="  
                http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
                http://www.springframework.org/schema/aop 
                http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
                http://www.springframework.org/schema/tx 
                http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
                http://www.springframework.org/schema/context 
                http://www.springframework.org/schema/context/spring-context-3.0.xsd">
            <!-- 扫描注解 -->
	        <context:component-scan base-package="com.xt.controller"></context:component-scan>
            <!-- 前后缀 -->
	        <bean
		       class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		       <property name="prefix" value="/WEB-INF/views/"></property>
		       <property name="suffix" value=".jsp"></property>
	        </bean>
        </beans>
	3.在web.xml中,配置springmvc的入口,以及初始参数
	  <?xml version="1.0" encoding="UTF-8"?>
        <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
        <servlet>
		    <servlet-name>spring</servlet-name>
		    <!-- SpringMVC入口 -->
		    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		    <init-param>
			    <param-name>contextConfigLocation</param-name>
			    <!-- spring配置文件所在的路径 如果不配置需要将配置文件的名称设置为spring-servlet.xml -->
			    <param-value>classpath:springmvc.xml</param-value>
		    </init-param>
		    <!-- 启动加载 -->
		    <load-on-startup>1</load-on-startup>
	    </servlet>
	    <servlet-mapping>
		    <servlet-name>spring</servlet-name>
		    <url-pattern>/</url-pattern>
	    </servlet-mapping>
      </web-app>
	  
	4.login.jsp:
	    <form action="login/userLogin" method="post">
           <ul>
               <li>用户名:<input type="text" name="userName"/></li>
               <li>密码:<input type="password" name="pwd"></li>
               <li>
                    <input type="submit" name="登录">
               </li>
           </ul>
        </form>
	5.LoginController.class文件:
	  @Controller
	  @RequestMapping("/userLogin")
	  public class LoginController{
	     @RequestMapping("/login")
	     public String login(String userName,String pwd){
		    Systom.out.println("用户名:"+userName);
			Systom.out.println("密码:"+pwd);
		    if(userName.equals("张三")&&pwd.equals("123"))
			    return "success";
			else
			    return "error";
		 }
	  }
	  
	解析:
	(1).因为在LoginController.class中,使用了注解,所以,在springmvc的配置文件中,我们需要
	    配置对注解的扫描范围。因为LoginController.class在com.xt.controller包下,所以我们就扫描
	    该包下的所有注解。base-package就是要扫描的包。否则注解无效
	(2). 对于转发,我们通常会在COntroller层中返回一个字符串,该字符串是即将跳转的目标地址。不含
	     后缀名。所以,在配置文件中会配置前后缀。
		 <property name="prefix" value="/WEB-INF/views/"></property>代表目标文件所在的位置;
		 <property name="suffix" value=".jsp"></property>代表目标文件的文件类型
	(3).在web.xml文件的配置中,我们需要注意的是首先要配置springmvc的入口,其次是配置文件springmvc.xml
	    的位置路径以及文件名称。
	(4).对于普通的从页面到controller层的参数传递,有多种方式。在这里我们首先学习最基本的传参方式。
	    也就是页面的name属性的值与controller层的方法中的形参名称相同。还有多种传参方式,在下一章中
		进行详细解说。
	(5).仅仅到这里,我们基本完成了从页面传参以及转发的过程,可以进行简单的开发了。但是需要注意的是,
	    我们发现,当页面传递参数到controller层中时,发生了乱码的现象。处理方法就是在web.xml中配置一个
		字符编码的过滤器。即:
		<!-- 字符编码过滤器 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	这样就解决了传参乱码的现象。当然也可以不在web.xml中写,可以创建一个filter类进行拦截。

第二讲 springMVC的传参方式
    在之前的讲解中,我们使用了最简单的传参方式,就是让页面的name属性与controller层中方法中的
	形参名称相同。还有一种传参的方式是由一名程序员在项目开发中实现的,叫做RestFul。这并不是
	一种新的编码方式,而是一种风格。
    例如:
	@RequestMapping("/login/{userName}/{pwd}")
    public String login(@PathVariable String userName,@PathVariable String pwd){
	    .......
	}
	在login.jsp中:
	<a href="login/张三/123456">登录</a>
	这样也可以将参数传到后台。
	注意:
	在@RequestMapping("/login/{userName}/{pwd}")中,{}与{}之间是用什么分隔符隔开,在前台就要用
	相同的分隔符隔开,否则会找不到请求路径。
	例如:
	@RequestMapping("/login/{userName}_{pwd}")
	那么在前台中:
	<a href="login/张三_123456">登录</a>
	
	在刚才的例子中,我们使用到了注解@PathVariable。否则参数无法传递到后台,结果是null。细心的
	同学会发现,在刚才的例子中,@RequestMapping中的参数名称与方法中的形参名称相同,即:
	@RequestMapping("/login/{userName}/{pwd}")
    public String login(@PathVariable String userName,@PathVariable String pwd){
	    .......
	}
	如果不相同就会报错:
	在请求路径中无法找到方法中所需的参数。
	那么,假如哪天我就是想让它们不相同怎么办?
	例如:
	@RequestMapping("/login/{a}/{b}")
    public String login(@PathVariable String userName,@PathVariable String pwd){
	    .......
	}
	这样肯定会报错,那么该怎么处理呢?
	很简单,就是在@PathVariable中指明参数:
	@RequestMapping("/login/{a}/{b}")
    public String login(@PathVariable("a") String userName,@PathVariable("b") String pwd){
	    .......
	}

第三讲 SpringMVC的转发与重定向以及静态资源的放行
    1.转发
	      在开发过程中,为了提升安全性,我们通常会将jsp页面放在web-inf目录下。因为在web-inf目录下的文件是
	  不能直接访问的。那么我们该如何访问这些文件呢?
	  (1).首先我们要在springMVC的配置文件中,配置视图解析。也就是前后缀:
	        <!-- 前后缀 -->
	        <bean>
		       class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		       <property name="prefix" value="/WEB-INF/views/"></property>
		       <property name="suffix" value=".jsp"></property>
	        </bean>
			prefix:前缀(路径)
			suffix:后缀
	  (2).在controller中,在进行转发的时候,直接返回一个字符串,该字符串就是即将要转发到的文件的名称。
	      例如:
		  @RequestMapping("/login")
	      public String login(String userName,String pwd){
		      System.out.println(userName);
		      System.out.println(pwd);
		      if(userName.equals("张三")&&pwd.equals("123456"))
			      return "success";
		      else
			      return "error";
	      }
		  return "success"就是转发到success.jsp。
	  (3).使用ModelAndView进行转发
	      官方为我们提供了一个类叫做ModelAndView,使用该类也可进行转发与重定向。
		  例如:
		  @RequestMapping("/login")
		  public ModelAndView login(String userName,String pwd){
		        ModelAndView mv = null;
				if(2>1){
				   mv = new ModelAndView("success");
				   mv.add("userName",userName);
				   mv.add("pwd",pwd);
				}else{
				   mv = new ModelAndView("error");
				}
				return  mv;	
		  }
		  解析:
		  ModelAndView类为我们提供了有参构造方法,该构造方法的参数就是我们即将要转发到的目标文件名称。
		  add()方法能够将要转发所带的的参数带到目标位置。
	  
	2.重定向
      (1).在进行重定向的时候,可以使用redirect
	      例如:
		  @RequestMapping("/login")
	      public String login(String userName,String pwd){
		      System.out.println(userName);
		      System.out.println(pwd);
		      if(userName.equals("张三")&&pwd.equals("123456"))
			      return "redirect:/success.jsp";
		      else
			      return "redirect:/error.jsp";
	      }
		  注意:
		  在进行重定向 的时候,加"/"与不加"/"是有区别的:
		  (1).加"/"表示从根目录进行查找
		  (2).不加"/"表示从本类开始查找
	
	(2).静态资源的放行
        在开发过程中,我们会引入很多js或者css文件,那么springMVC拦截器可能会将这些文件拦截,
        所以此时需要对这些文件进行放行。
        <!-- 静态资源放行 -->
	    <servlet-mapping>
		    <servlet-name>default</servlet-name>
		    <url-pattern>*.js</url-pattern>
	    </servlet-mapping>
        <servlet-mapping>
		    <servlet-name>default</servlet-name>
		    <url-pattern>*.css</url-pattern>
	    </servlet-mapping>		
        		
	
	
	

  

springMVC基础知识小结

标签:inf   需要   cat   前缀   class   流程   加载   control   mvc   

原文地址:https://www.cnblogs.com/schCode/p/9005076.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!