标签: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>
标签:inf 需要 cat 前缀 class 流程 加载 control mvc
原文地址:https://www.cnblogs.com/schCode/p/9005076.html