SpringMVC学习笔记001

  情景:SpringMVC向后台控制层发送请求,特定方法处理该请求(获取传过来的数据,响应请求,把一些简单数据放入request即Model对象中)

  1. 在web.xml中加入SpringMVC的DispatcherServlet核心控制器,指明拦截哪些请求。
  2. 在WEB-INF文件夹下建立SpringMVC的XML配置文件,component-scan指明扫描那个包下的控制类。
  3. 被@Controller注解的类视为控制类,被@RequestMapping(value="",method=RequestMethod..POST)注解的方法表示处理该类请求(被value值匹配的请求),而且该请求只能是POST请求。
  4. 关于@RequestParam和Model model对象,如处理请求的方法 String login(@RequestParam("username") String userName,Model model){ model.addAttribute("userName",userName) }  表示从Request参数username取值赋值给userName,然后放入model对象中,model对象相当于request,里面存储的对象可以通过EL表达式 ${}获取。
  5. @RequestParam从request参数中取值,如果action层变量名和request参数名相同,不需要@RequestParam注解就可以获取值。

  Q1:场景:直接输入URL地址以访问控制层达到实现一些功能的目的,如列表 【模拟表单提交】

       A1:可以浏览器发送请求模拟表单提交等如http://localhost:8080/project/listViewer.spring?username=zhang

          若拦截以".spring"结尾请求,控制层方法将处理listViewer这个请求,并接受参数username的值

  Q2:场景:控制层限制请求的方式?

       A2:在请求处理方法上加@RequestMapping(value="",method=RequestMethod..POST)指明前台发送的请求只能是POST

   Q3:场景:解决多人开发路径可能重复的问题?(如前台登录发送/login请求,后台登录也发送/login请求)【有助于模块化开发】

       解决路径重复问题的办法就是限定各模块的访问路径。
        A3:两个请求可以是/a/login和/b/login,控制层有两个类分别处理/a或者/b下面的请求如:

         

1 @Controller
2 @RequestMapping("/a")
3 public class Login{
4       @RequestMapping("/login")
5        public String login(){} 
6 }

  如果在类的上方使用@RequestMapping注解,表示首先定义相对的父路径,然后在方法上定义的路径是相对于类级别的。

  Q4: 路径问题?controller响应请求是以当前路径为基准,响应文件的路径写法类似Linux切换目录。

     可以在springMVC-servlet.xml加入如下配置:

       <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"  p:prefix="/" />

     它的 功能就是限定默认访问的是/ 根路径。

     注:响应同一目录下文件,路径不要加/,一般情况全部JSP文件应该放在/WEB-INF目录下,这样可以防止直接通过路径访问,必须让后台处理后跳转。

   Q5:控制层重定向到控制层-有参数和无参数传递(区别在请求后面跟参数)

      A5:如控制层处理方法 return "redirect:/listUsername.spring?username=zhang";

        // SpringMVC重定向的关键代码在返回字符串加入"redirect:/"前缀。表示当前目录下发送一个listUsername.spring请求。

   Q6:匹配URL路径执行指定Controller (控制层的处理方法@RequestMapping的value值用变量表示,表示请求的路径该部分可以是任意值,都可以匹配上)

      A6:如发送的请求为 http://localhost:8080/springmvc/login/a/login.spring 表示发送/login目录下的login请求。

        

@Controller
@RequestMapping("/login/{subfolder}")
public class Login{
    @RequestMapping("/login")
    public String login(@PathVariable("subfolder") String subFolder){
        System.out.println(subFolder);
        return "/index.jsp";
    }
}

        打印输出a,这里login方法中传入的参数和上面@RequestMapping注解的名称相同时,不用向@PathVariable出入值。

      

             

原文地址:https://www.cnblogs.com/zplogo/p/5029918.html