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

SpringMVC基础-01

时间:2020-06-17 20:09:43      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:tran   win   not   erro   必须   ora   param   enc   chrome   

1、流程
  1)、导包
commons-logging-1.1.3.jar
spring-aop-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
  2)、写配置;
       1)web.xml可能要写什么
            配置springmvc的前端控制器,指定springmvc配置文件位置
     web.xml:
 1 <!DOCTYPE web-app PUBLIC
 2         "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 3         "http://java.sun.com/dtd/web-app_2_3.dtd" >
 4 
 5 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
 6          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 7          id="WebApp_ID" version="3.0">
 8     <display-name>2.SpringMVC_helloworld</display-name>
 9     <welcome-file-list>
10         <welcome-file>index.jsp</welcome-file>
11     </welcome-file-list>
12 
13     <!-- SpringMVC思想是有一个前端控制器能拦截所有请求,并智能派发;
14         这个前端控制器是一个servlet;应该在web.xml中配置这个servlet来拦截所有请求
15      -->
16 
17     <!-- The front controller of this Spring Web application,
18     responsible for handling all application requests -->
19     <servlet>
20         <servlet-name>springDispatcherServlet</servlet-name>
21         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
22 
23         <init-param>
24             <!-- contextConfigLocation:指定SpringMVC配置文件位置 -->
25             <param-name>contextConfigLocation</param-name>
26             <param-value>classpath:springmvc.xml</param-value>
27         </init-param>
28         <!-- servlet启动加载,servlet原本是第一次访问创建对象;
29         load-on-startup:服务器启动的时候创建对象;值越小优先级越高,越先创建对象;
30          -->
31         <load-on-startup>1</load-on-startup>
32     </servlet>
33 
34     <!-- Map all requests to the DispatcherServlet for handling -->
35     <!--  *.do   *.action  *.haha -->
36     <!--
37         /:拦截所有请求,不拦截jsp页面,*.jsp请求
38         /*:拦截所有请求,拦截jsp页面,*.jsp请求
39 
40 
41         处理*.jsp是tomcat做的事;所有项目的小web.xml都是继承于大web.xml
42         DefaultServlet是Tomcat中处理静态资源的?
43             除过jsp,和servlet外剩下的都是静态资源;
44             index.html:静态资源,tomcat就会在服务器下找到这个资源并返回;
45             我们前端控制器的/禁用了tomcat服务器中的DefaultServlet
46 
47 
48         1)服务器的大web.xml中有一个DefaultServlet是url-pattern=/
49         2)我们的配置中前端控制器 url-pattern=/
50                 静态资源会来到DispatcherServlet(前端控制器)看那个方法的RequestMapping是这个index.html
51         3)为什么jsp又能访问;因为我们没有覆盖服务器中的JspServlet的配置
52         4) /*  直接就是拦截所有请求;我们写/;也是为了迎合后来Rest风格的URL地址
53     -->
54     <servlet-mapping>
55         <servlet-name>springDispatcherServlet</servlet-name>
56         <!--
57  /*和/都是拦截所有请求; /:会拦截所有请求,但是不会拦截*.jsp;能保证jsp访问正常;
58  /*的范围更大;还会拦截到*.jsp这些请求;一但拦截jsp页面就不能显示了;
59           -->
60         <url-pattern>/</url-pattern>
61     </servlet-mapping>
62 </web-app>

    2)框架自身可能要写什么

      springmvc.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 6         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
 7 
 8     <!-- 扫描所有组件 -->
 9     <context:component-scan base-package="com.atguigu"></context:component-scan>
10 
11     <!-- 配置一个视图解析器 ;能帮我们拼接页面地址-->
12     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
13         <property name="prefix" value="/WEB-INF/pages/"></property>
14         <property name="suffix" value=".jsp"></property>
15     </bean>
16 </beans>

    3)、测试

HelloController.java:

 1 package com.atguigu.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 
 6 /**
 7  * 1、告诉SpringMVC这个类是一个处理器
 8  * @author lfy
 9  *
10  * HelloWorld:细节:
11  * 1、运行流程:
12  *         1)、客户端点击链接会发送 http://localhost:8080/springmvc/hello 请求
13  *         2)、来到tomcat服务器;
14  *         3)、SpringMVC的前端控制器收到所有请求;
15  *         4)、来看请求地址和@RequestMapping标注的哪个匹配,来找到到底使用那个类的哪个方法来处理
16  *         5)、前端控制器找到了目标处理器类和目标方法,直接利用反射执行目标方法;
17  *         6)、方法执行完成以后会有一个返回值;SpringMVC认为这个返回值就是要去的页面地址
18  *         7)、拿到方法返回值以后;用视图解析器进行拼串得到完整的页面地址;
19  *         8)、拿到页面地址,前端控制器帮我们转发到页面;
20  *
21  *2、@RequestMapping22  *        就是告诉SpringMVC;这个方法用来处理什么请求;
23  *        这个/是可以省略,即使省略了,也是默认从当前项目下开始;
24  *        习惯加上比较好    /hello  /hello
25  *        RequestMapping的使用:?
26  *3、如果不指定配置文件位置?
27  *        /WEB-INF/springDispatcherServlet-servlet.xml
28  *        如果不指定也会默认去找一个文件;
29  *            /WEB-INF/springDispatcherServlet-servlet.xml
30  *    就在web应用的/WEB-INF、下创建一个名叫   前端控制器名-servlet.xml
31  */
32 @Controller
33 public class HelloController {
34 
35     @RequestMapping("/hello01")
36     public String nihao(){
37         return "success";
38     }
39 
40     @RequestMapping("/handle01")
41     public String hanle01(){
42         System.out.println("handle01....");
43         return "error";
44     }
45 
46     @RequestMapping("/hello03")
47     public String hanle02(){
48         return "success";
49     }
50 }

RequestMappingTest.java:

 1 package com.atguigu.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.PathVariable;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 
 7 /**
 8  *     @RequestMapping模糊匹配功能
 9  * 
10  * @author lfy
11  * 
12  * URL地址可以写模糊的通配符:
13  *     ?:能替代任意一个字符
14  *     *:能替代任意多个字符,和一层路径
15  *     **:能替代多层路径
16  *
17  */
18 @Controller
19 public class RequestMappingTest {
20     
21     @RequestMapping("/antTest01")
22     public String antTest01(){
23         System.out.println("antTest01...");
24         return "success";
25     }
26     
27     /**
28      * ?匹配一个字符,0个多个都不行;
29      *         模糊和精确多个匹配情况下,精确优先
30      * 
31      * @return
32      */
33     @RequestMapping("/antTest0?")
34     public String antTest02(){
35         System.out.println("antTest02...");
36         return "success";
37     }
38     
39     /**
40      *   *匹配任意多个字符
41      * @return
42      */
43     @RequestMapping("/antTest0*")
44     public String antTest03(){
45         System.out.println("antTest03...");
46         return "success";
47     }
48     
49     /**
50      *  *:匹配一层路径
51      * @return
52      */
53     @RequestMapping("/a/*/antTest01")
54     public String antTest04(){
55         System.out.println("antTest04...");
56         return "success";
57     }
58     
59     @RequestMapping("/a/**/antTest01")
60     public String antTest05(){
61         System.out.println("antTest05...");
62         return "success";
63     }
64     
65     //路径上可以有占位符:  占位符 语法就是可以在任意路径的地方写一个{变量名}
66     //   /user/admin    /user/leifengyang
67     // 路径上的占位符只能占一层路径
68     @RequestMapping("/user/{id}")
69     public String pathVariableTest(@PathVariable("id")String id){
70         System.out.println("路径上的占位符的值"+id);
71         return "success";
72     }
73 
74 }

RequestMappingTestController.java:

 1 package com.atguigu.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestMethod;
 6 
 7 @Controller
 8 @RequestMapping("/haha")
 9 public class RequestMappingTestController {
10 
11     /**
12      * @RequestMapping其它属性13      * method14      *      HTTP协议中的所有请求方式:
15      *      GET,POST,HEAD,PUT,PATCH,DELETE,OPTIONS,TRACE;
16      *      method = RequestMethod.POST:只接收这种类型的请求,默认是什么都可以
17      *          不是规定的方式报错:4xx:都是客户端错误
18      *
19      * params:规定请求参数
20      *      param1:表示请求必须包含名为param1的请求参数
21      *          eg:params = {"username"}
22      *              发送请求的时候必须带上一个名为username的参数  没带都会400
23      *      !param1:表示请求不能包含名为param1的请求参数
24      *          eg:params={"!username"}
25      *              发送请求的时候必须不携带上一个名为username的参数;带了都会400
26      *
27      *      param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
28      *          eg:params={"username!=123"}
29      *              发送请求的时候;携带的username值必须不是123(不带username或者username不是123)
30      *      {“param1=value1”, “param2”}: 请求必须包含名为 param1 和 param2 的两个请求参数,且 param1 参数的值必须为 value1
31      *          eg:params={"username!=123","pwd","!age"}
32      *              请求参数必须满足以上规则;
33      *              请求的username不能是123,必须有pwd的值,不能有age
34      * headers:规定请求头;也和params一样能写简单的表达式,可以指定哪个浏览器访问
35      * consumes:只接收内容类型是哪种的请求,规定请求头中的Content-Type
36      * produces:告诉浏览器返回的内容类型是什么,给响应头中加上Content-Type:text/html;charset=utf-8
37      */
38 
39    
40     @RequestMapping(value="/handle02",method=RequestMethod.POST)
41     public String handle02(){
42         System.out.println("handle02...");
43         return "success";
44     }
45 
46     /**
47      *
48      * @return
49      */
50     @RequestMapping(value="/handle03",params={"username!=123","pwd","!age"})
51     public String handle03(){
52         System.out.println("handle03....");
53         return "success";
54     }
55 
56     /**
57      * User-Agent:浏览器信息;
58      * 让火狐能访问,让谷歌不能访问
59      *
60      * 谷歌:
61      * User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
62      * 火狐;
63      * User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0
64      * @return
65      *
66      */
67     @RequestMapping(value="/handle04",headers={"User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0"})
68     public String handle04(){
69         return "success";
70     }
71 }

index.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2          pageEncoding="UTF-8" %>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7     <title>Insert title here</title>
 8 </head>
 9 <body>
10 <!--以前一个servlet;这个servlet配置一个url-pattern(/hello)  -->
11 <a href="hello">你好</a><br/>
12 <h1>RequestMapping测试</h1>
13 <a href="handle01">test01-写在方法上的requestMapping</a><br/>
14 <a href="haha/handle01">test01-写在方法上的requestMapping</a>
15 <h1>测试RequestMapping的属性</h1>
16 <a href="haha/handle02">handle02</a><br/>
17 <form action="haha/handle02" method="post">
18     <input type="submit"/>
19 </form>
20 <a href="haha/handle03">handle03-测试params</a><br/>
21 <a href="haha/handle04">handle04-测试headers</a>
22 <hr/>
23 <h1>RequestMapping-Ant风格的URL</h1>
24 <a href="antTest01">精确请求地址-antTest01</a><br/>
25 <a href="user/admin">测试PathVariable</a>
26 </body>
27 </html>

error.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10 <h1>嘿嘿</h1>
11 </body>
12 </html>

success.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10 <h1>成功!</h1>
11 </body>
12 </html>

 

 

SpringMVC基础-01

标签:tran   win   not   erro   必须   ora   param   enc   chrome   

原文地址:https://www.cnblogs.com/116970u/p/13154096.html

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