我爱Java系列---【 SpringMVC 入门案例】

一、整体流程(三大件:DispatcherServlet,HandlerMapping,HandlerAdapter

二、具体步骤(对上图步骤做了精简化处理,便于理解)

第一步:浏览器付出请求 

第二步:请求到达服务器(springmvc 对地址进行处理 )前端控制器 (拿到地址)

第三步:前端控制器找处理器映射器  对地址进行处理  变成数据链 返回给前端控制器

第四步:去找适配器  适配根据数据链找到对应的处理器(就是我们自己写的那个controller类)

第五步:处理器进行业务处理 然后得到结果吧这个结果(把结果放到一个模型(modelandview)对象)给适配器  适配器中转给前端控制器

第六步:找视图解析器  把模型(modelandview)进行整理  整理后的结果有给前端控制器

第七步:把6步得到的结果进行页面的渲染得到一张页面同时响应回浏览器

三、开发步骤

1.导入依赖

2、配置前端控制器(配置在web.xml 参考servlet的配置方式)
3、在springMVC的核心配置文件里面配<mvc:    作用:相当于拥有了映射器和适配器
4、配视图解析器
5、使用的时候传入参数(模型(modelandview)对象)

四、代码演示

准备工作:导入依赖

 

 1 <dependency>
 2       <groupId>javax.servlet</groupId>
 3       <artifactId>javax.servlet-api</artifactId>
 4       <version>3.1.0</version>
 5       <scope>provided</scope>
 6     </dependency>
 7     <dependency>
 8       <groupId>javax.servlet.jsp</groupId>
 9       <artifactId>javax.servlet.jsp-api</artifactId>
10       <version>2.3.3</version>
11       <scope>provided</scope>
12     </dependency>
13     <dependency>
14       <groupId>javax.servlet</groupId>
15       <artifactId>jstl</artifactId>
16       <version>1.2</version>
17     </dependency>
18     <!-- JSTL stop -->
19     <dependency>
20       <groupId>taglibs</groupId>
21       <artifactId>standard</artifactId>
22       <version>1.1.2</version>
23     </dependency>
24 
25     <dependency>
26       <groupId>org.springframework</groupId>
27       <artifactId>spring-context</artifactId>
28       <version>5.1.8.RELEASE</version>
29     </dependency>
30     <dependency>
31       <groupId>org.springframework</groupId>
32       <artifactId>spring-webmvc</artifactId>
33       <version>5.1.8.RELEASE</version>
34     </dependency>
35     <dependency>

 

 

 

1、  创建 web.xml 文件

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 5          version="3.1">
 6     
 7     <servlet>
 8         <servlet-name>springmvc</servlet-name>
 9         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
10         <!--配置初始化参数,用于读取 SpringMVC 的配置文件
11             在springmvc配置文件中指定要扫描的controller所在的包的路径-->
12         <init-param>
13             <param-name>contextConfigLocation</param-name>
14             <param-value>classpath:springmvc.xml</param-value>
15         </init-param>
16 
17         <!-- 配置 servlet 的对象的创建时间点:应用加载时创建。
18             取值只能是非 0 正整数,表示启动顺序 -->
19         <load-on-startup>1</load-on-startup>
20     </servlet>
21     <servlet-mapping>
22         <servlet-name>springmvc</servlet-name>
23        <!-- <url-pattern>*.do</url-pattern>-->
24         <url-pattern>/</url-pattern><!--接收所有请求-->
25     </servlet-mapping>
26     
27     <filter>
28         <filter-name>encodingFilter</filter-name>
29         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
30         <init-param>
31             <param-name>encoding</param-name>
32             <param-value>utf-8</param-value>
33         </init-param>
34     </filter>
35     <filter-mapping>
36         <filter-name>encodingFilter</filter-name>
37         <url-pattern>/*</url-pattern>
38     </filter-mapping>
39     
40 </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        xmlns:mvc="http://www.springframework.org/schema/cache"
 6      
 7        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">
 8     <!--指定要扫描的UserController所在的包的路径,这样就可以扫描类中的注解了,此时类中的注解才能正常被spring容器所操作-->
 9     <context:component-scan base-package="com.heima.web"></context:component-scan>
10 
11     <!--指明我就是要用requestMapping handler映射处理器
12         //两个原因:
13                 版本原因  其实RequestMappingHandlerMapping在以前版本就已经有这个类了,但是5.0以前版本,默认并不是这个
14                 其他的原因  转换 Jason转换  自定义格式转换 都需要他
15                 -->
16     <!--<mvc:annotation-driven></mvc:annotation-driven>-->相当于有了映射器和适配器
17 
18     <!--定制化内部视图解析器-->
19     <bean id="InternalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
20 
21         <property name="prefix" value="/WEB-INF/pages/"/>
22         <property name="suffix" value=".jsp"/>
23     </bean>
24 </beans>

 

3.创建UserController类

  1 @Controller//1.把UserController这个类放进spring容器中
  2 @RequestMapping("/user")
  3 public class UserController {
  4     @RequestMapping("/test1")//2.指定下面这个方法所映射的路径
  5     public ModelAndView test1(ModelAndView modelAndView){
  6         Date date = new Date();
  7         String content = "当前时间:"+date.toLocaleString();
  8         //类似于request.setAttribute("属性名","属性值")
  9         modelAndView.addObject("content",content);
 10         //等同于request.getDispatcher("").forward(request,response)
 11         modelAndView.setViewName("user/list");
 12         return modelAndView;
 13 
 14     }
 15 
 16     @RequestMapping("/test2_1")
 17     public ModelAndView test2(ModelAndView modelAndView,int id){
 18         System.out.println(id);
 19         Date date = new Date();
 20         String content = "当前时间:"+date.toLocaleString();
 21         //类似于request.setAttribute("属性名","属性值")
 22         modelAndView.addObject("content",content);
 23         //等同于request.getDispatcher("").forward(request,response)
 24         modelAndView.setViewName("hello/Hello");
 25         return modelAndView;
 26 
 27     }
 28     @RequestMapping("/test2_2")
 29     public ModelAndView test2_2(ModelAndView modelAndView,User user){
 30         System.out.println(user);
 31         Date date = new Date();
 32         String content = "当前时间:"+date.toLocaleString();
 33         //类似于request.setAttribute("属性名","属性值")
 34         modelAndView.addObject("content",content);
 35         //等同于request.getDispatcher("").forward(request,response)
 36         modelAndView.setViewName("hello/Hello");
 37         return modelAndView;
 38 
 39     }
 40 
 41     @RequestMapping(value = "/test3",method = RequestMethod.POST)
 42     public ModelAndView test3(ModelAndView modelAndView,User user){
 43         System.out.println(user);
 44         Date date = new Date();
 45         String content = "当前时间:"+date.toLocaleString();
 46         //类似于request.setAttribute("属性名","属性值")
 47         modelAndView.addObject("content",content);
 48         //等同于request.getDispatcher("").forward(request,response)
 49         modelAndView.setViewName("user/list");
 50         return modelAndView;
 51 
 52     }
 53     /*params表示必须传的参数*/
 54     @RequestMapping(value = "/test4",params = "username")
 55     public ModelAndView test4(ModelAndView modelAndView,User user){
 56         System.out.println(user);
 57         Date date = new Date();
 58         String content = "当前时间:"+date.toLocaleString();
 59         //类似于request.setAttribute("属性名","属性值")
 60         modelAndView.addObject("content",content);
 61         //等同于request.getDispatcher("").forward(request,response)
 62         modelAndView.setViewName("user/list");
 63         return modelAndView;
 64 
 65     }
 66 
 67     /*headers表示必须带"user-agent"请求头,这个默认带,换一个就报404了*/
 68     @RequestMapping(value = "/test5",headers = "user-agent")//
 69     public ModelAndView test5(ModelAndView modelAndView,User user){
 70         System.out.println(user);
 71         Date date = new Date();
 72         String content = "当前时间:"+date.toLocaleString();
 73         //类似于request.setAttribute("属性名","属性值")
 74         modelAndView.addObject("content",content);
 75         //等同于request.getDispatcher("").forward(request,response)
 76         modelAndView.setViewName("user/list");
 77         return modelAndView;
 78 
 79     }
 80 
 81 /*@RequestParam 解决三个问题:1.大部分情况为了解决不传参问题,给定默认值
 82                              2.为了解决前后端参数名不同步问题,前后端参数名不一致
 83                              3.最后才是为了解决编译导致无参数名问题
 84  */
 85 
 86     @RequestMapping(value = "/test6")//@RequestParam(name = "id")可以防止setting-->java compiler-->generate debugging info没有被选中
 87                                     //若没有被选中,程序只认识数据类型,却识别不出来数据名,@RequestParam(name = "id")可以强制指明数据名
 88     public ModelAndView test6(ModelAndView modelAndView, @RequestParam(name = "id",defaultValue = "123") int id, @RequestParam(name = "username")String username,@RequestParam(name = "price")double price){
 89         System.out.println(id+"---"+username+"---"+price);
 90 
 91         Date date = new Date();
 92         String content = "当前时间:"+date.toLocaleString();
 93         //类似于request.setAttribute("属性名","属性值")
 94         modelAndView.addObject("content",content);
 95         //等同于request.getDispatcher("").forward(request,response)
 96         modelAndView.setViewName("user/list");
 97         return modelAndView;
 98 
 99     }
100 
101     /*javaBean数据的绑定,注意参数名一定要与类里的属性名保持一致*/
102     @RequestMapping(value = "/test7")
103     public ModelAndView test7(ModelAndView modelAndView,User user){
104         System.out.println(user);
105 
106         Date date = new Date();
107         String content = "当前时间:"+date.toLocaleString();
108         //类似于request.setAttribute("属性名","属性值")
109         modelAndView.addObject("content",content);
110         //等同于request.getDispatcher("").forward(request,response)
111         modelAndView.setViewName("user/list");
112         return modelAndView;
113 
114     }
115 
116     /*javaBean数据的绑定,注意参数名一定要与类里的属性名保持一致*/
117     @RequestMapping(value = "/test8")
118     public ModelAndView test8(ModelAndView modelAndView,User user){
119         System.out.println(user);
120 
121         Date date = new Date();
122         String content = "当前时间:"+date.toLocaleString();
123         //类似于request.setAttribute("属性名","属性值")
124         modelAndView.addObject("content",content);
125         //等同于request.getDispatcher("").forward(request,response)
126         modelAndView.setViewName("user/list");
127         return modelAndView;
128 
129     }
130 
131 
132     /*复合对象类型数组是参数数据的绑定,注意:前端name=user.username*/
133     @RequestMapping(value = "/test9")
134     public ModelAndView test9(ModelAndView modelAndView, QueryVo queryVo){
135         System.out.println(queryVo);
136 
137         Date date = new Date();
138         String content = "当前时间:"+date.toLocaleString();
139         //类似于request.setAttribute("属性名","属性值")
140         modelAndView.addObject("content",content);
141         //等同于request.getDispatcher("").forward(request,response)
142         modelAndView.setViewName("user/list");
143         return modelAndView;
144 
145     }
146 
147     /*复合对象类型map集合是对象数据的绑定,注意:前端name=smap['name'],定义map不能用map关键字*/
148     @RequestMapping(value = "/test10")
149     public ModelAndView test10(ModelAndView modelAndView, QueryVo queryVo){
150         System.out.println(queryVo);
151 
152         Date date = new Date();
153         String content = "当前时间:"+date.toLocaleString();
154         //类似于request.setAttribute("属性名","属性值")
155         modelAndView.addObject("content",content);
156         //等同于request.getDispatcher("").forward(request,response)
157         modelAndView.setViewName("user/list");
158         return modelAndView;
159         }
160 
161     //练习11 演示复合对象类型list集合是对象参数绑定
162     @RequestMapping(value = "/test11")
163     public ModelAndView test11(ModelAndView modelAndView, QueryVo queryVo){
164         System.out.println(queryVo);
165 
166         Date date = new Date();
167         String content = "当前时间:"+date.toLocaleString();
168         //类似于request.setAttribute("属性名","属性值")
169         modelAndView.addObject("content",content);
170         //等同于request.getDispatcher("").forward(request,response)
171         modelAndView.setViewName("user/list");
172         return modelAndView;
173     }
174 }

4.创建User类,和QueryVo类

 

 1 public class User {
 2     private int id;
 3     private String username;
 4     private String desc;
 5 
 6     @Override
 7     public String toString() {
 8         return "User{" +
 9                 "id=" + id +
10                 ", username='" + username + '\'' +
11                 ", desc='" + desc + '\'' +
12                 '}';
13     }
14 
15     public int getId() {
16         return id;
17     }
18 
19     public void setId(int id) {
20         this.id = id;
21     }
22 
23     public String getUsername() {
24         return username;
25     }
26 
27     public void setUsername(String username) {
28         this.username = username;
29     }
30 
31     public String getDesc() {
32         return desc;
33     }
34 
35     public void setDesc(String desc) {
36         this.desc = desc;
37     }
38 }

 

 1 public class QueryVo {
 2     private User user;
 3     private int age;
 4     private String [] hobbies;
 5     private Map smap;
 6     private List<User> users;
 7 
 8     public List<User> getUsers() {
 9         return users;
10     }
11 
12     public void setUsers(List<User> users) {
13         this.users = users;
14     }
15 
16     public Map getSmap() {
17         return smap;
18     }
19 
20     public void setSmap(Map smap) {
21         this.smap = smap;
22     }
23 
24     public String[] getHobbies() {
25         return hobbies;
26     }
27 
28     public void setHobbies(String[] hobbies) {
29         this.hobbies = hobbies;
30     }
31 
32     public User getUser() {
33         return user;
34     }
35 
36     public void setUser(User user) {
37         this.user = user;
38     }
39 
40     public int getAge() {
41         return age;
42     }
43 
44     public void setAge(int age) {
45         this.age = age;
46     }
47 
48 
49     @Override
50     public String toString() {
51         return "QueryVo{" +
52                 "user=" + user +
53                 ", age=" + age +
54                 ", hobbies=" + Arrays.toString(hobbies) +
55                 ", smap=" + smap +
56                 ", users=" + users +
57                 '}';
58     }
59 }

5.创建前端页面list.jspindex.jsp

 

list.jsp页面 
1
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <html> 3 <head> 4 <title>Title</title> 5 </head> 6 <body> 7 <div style="text-align: center ;margin:100px 100px;color: blue;"> 8 <font size="20px">${content}</font> 9 </div> 10 </body> 11 </html>

 

index.jsp页面 
1
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 </head> 6 <body> 7 <h2>Hello World!</h2> 8 <div> 9 <fieldset> 10 <legend>练习1</legend> 11 <a href="/user/test1">常规使用1</a> 12 </fieldset> 13 14 <fieldset> 15 <legend>练习2</legend> 16 <a href="/user/test2_1">常规使用2</a> 17 </fieldset> 18 19 <fieldset> 20 <legend>练习3</legend> 21 <a href="/user/test3">指明请求必须是某类型</a> 22 <form action="/user/test3" method="post"> 23 <input type="text" name="username"><br> 24 <input type="submit" value="点我提交"> 25 </form> 26 27 </fieldset> 28 29 <fieldset> 30 <legend>练习4</legend> 31 <a href="/user/test4">演示RequestMapping必须传某某参数</a> 32 <form action="/user/test4" > 33 <input type="text" name="username"><br> 34 <input type="submit" value="点我提交"> 35 </form> 36 37 </fieldset> 38 39 <fieldset> 40 <legend>练习5</legend> 41 <a href="/user/test5">演示带某某请求</a> 42 <form action="/user/test5" > 43 <input type="text" name="username"><br> 44 <input type="submit" value="点我提交"> 45 </form> 46 47 </fieldset> 48 49 <fieldset> 50 <legend>练习6</legend> 51 <a href="/user/test6">演示简单类型的参数绑定</a> 52 <form action="/user/test6" > 53 id:<input type="text" name="id"><br> 54 username:<input type="text" name="username"><br> 55 price:<input type="text" name="price"><br> 56 <input type="submit" value="点我提交"> 57 </form> 58 59 </fieldset> 60 61 <fieldset> 62 <legend>练习7</legend> 63 <a href="/user/test7">演示javaBean的参数绑定</a> 64 <form action="/user/test7" > 65 id:<input type="text" name="id"><br> 66 用户名:<input type="text" name="username"><br> 67 描述:<input type="text" name="desc"><br> 68 <input type="submit" value="点我提交"> 69 </form> 70 71 </fieldset> 72 73 <fieldset> 74 <legend>练习8</legend> 75 <a href="/user/test8">演示复合对象的参数绑定</a> 76 <form action="/user/test8" > 77 id:<input type="text" name="user.id"><br> 78 age:<input type="text" name="age"><br> 79 用户名:<input type="text" name="user.username"><br> 80 描述:<input type="text" name="user.desc"><br> 81 <input type="submit" value="点我提交"> 82 </form> 83 84 </fieldset> 85 86 <fieldset> 87 <legend>练习9</legend> 88 <a href="/user/test9">演示复合对象的数组参数的绑定</a> 89 <form action="/user/test9" > 90 id:<input type="text" name="user.id"><br> 91 age:<input type="text" name="age"><br> 92 用户名:<input type="text" name="user.username"><br> 93 描述:<input type="text" name="user.desc"><br> 94 爱好:<input type="checkbox" name="hobbies" value="抽烟">抽烟 95 <input type="checkbox" name="hobbies" value="喝酒">喝酒 96 <input type="checkbox" name="hobbies" value="烫头">烫头 <br> 97 <input type="submit" value="点我提交"> 98 </form> 99 </fieldset> 100 101 <fieldset> 102 <legend>练习10</legend> 103 <a href="/user/test10">演示复合对象的map集合参数的绑定</a> 104 <form action="/user/test10" > 105 id:<input type="text" name="user.id"><br> 106 age:<input type="text" name="age"><br> 107 用户名:<input type="text" name="user.username"><br> 108 描述:<input type="text" name="user.desc"><br> 109 爱好:<input type="checkbox" name="hobbies" value="抽烟">抽烟 110 <input type="checkbox" name="hobbies" value="喝酒">喝酒 111 <input type="checkbox" name="hobbies" value="烫头">烫头 <br> 112 收款人:<input type="text" name="smap['name']"> 113 电话:<input type="text" name="smap['tel']"> 114 <input type="submit" value="点我提交"> 115 </form> 116 </fieldset> 117 118 <fieldset> 119 <legend>练习11</legend> 120 <a href="/user/test11">演示复合对象类型list集合是对象的参数绑定</a> 121 <form action="/user/test11" > 122 用户名:<input type="text" name="user.username"><br> 123 爱好:<input type="checkbox" name="hobbies" value="抽烟">抽烟 124 <input type="checkbox" name="hobbies" value="喝酒">喝酒 125 <input type="checkbox" name="hobbies" value="烫头">烫头 <br> 126 收款人:<input type="text" name="smap['name']"> 127 电话:<input type="text" name="smap['tel']"> 128 129 收货人列表:<br> 130 收货人1:<input type="text" name="users[0].id"><input type="text" name="users[0].username"><br> 131 收货人2:<input type="text" name="users[1].id"><input type="text" name="users[1].username"><br> 132 收货人3:<input type="text" name="users[2].id"><input type="text" name="users[2].username"><br> 133 <input type="submit" value="点我提交"> 134 </form> 135 </fieldset> 136 </div> 137 </body> 138 </html>

6.创建好的工程结构

 

转载于:https://www.cnblogs.com/hujunwei/p/11143247.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值