一、SpringMVC的好处?

1,基于注解,stuts2虽然也有注解但是比较慢,没人用更多的时候是用xml的形式 
2,能与spring其它技术整合比如说webflow等, 
3,获取request及session对象比较简单,直接当参数值传入就行了,而struts2还需要通过ServletActionContext 对象获取 
4,验证也比较简单,通过jsr-303就能实现,而不必写其它的代码,而struts2是通过写 actionName-validation.xml实现的 
二、SpringMVC是什么?

Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。

三、SpringMVC的用法

1.传统方式

(1)创建工程,拷贝springmvc相关的jar,并把jar拷贝到lib

(2) 配置web.xml,配置前段控制器DispatcherServlet

 1 <servlet>
2 <servlet-name>springmvc</servlet-name>
3 <servlet-class>
4 org.springframework.web.servlet.DispatcherServlet
5 </servlet-class>
6 </servlet>
7 <servlet-mapping>
8 <servlet-name>springmvc</servlet-name>
9 <url-pattern>*.do</url-pattern>
10 </servlet-mapping>

(3) 在web-inf 下创建springmvc配置文件,[servlet-name]-servlet.xml 文件名必须和web.xml中的servlet-name一致。例如:springmvc-servlet.xml

(4) [servletname]-servlet.xml中配置HandlerMapping 根据benaname找到对应Conntroller( 可以省略)

1 <bean class="org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping
2 </bean>

(5)创建JSP页面,需要发出请求的页面
(6) 创建HelloController 继承AbstractController重写handleRequestInternal,控制类中的方法如下:

1 protected ModelAndView handleRequestInternal(HttpServletRequest request,
2 HttpServletResponse response) throws Exception {
3 String hello=request.getParameter("ceshi");
4 System.out.println(hello);
5 ModelAndView model=new ModelAndView("index");
6 model.addObject("helloworld", hello);
7 return model;
8 }

(7)[servletname]-servlet.xml中配置<!-- 配置视图解析器 -->

1 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
2 <!-- 前缀 -->
3 <property name="prefix" value="/view/"></property>
4 <!-- 后缀 -->
5 <property name="suffix" value=".jsp"></property>
6 </bean>

  (8)[servletname]-servlet.xml中配置HandlerMapping给你钱,Controller就要接着(比喻)

1 <bean name=”/hello.do” class=”zyy.controller.helloController”></bean>

2.注解方式

注解方式呢,在开发中庸的比较多,方便。

  1. 在web.xml中配置DispatcherServlet
  2. 在web-inf下新建[servlet-name]-servlet.xml配置文件
  3. 在[servlet-name]-servlet.xml中配置注解驱动
1 <mvc:annotation-driven/>

  4.配置注解扫描

1 <context:component-scan base-package="zyy"></context:component-scan>

  5.创建控制器

1 @Controller
2 public class HelloController {
3 @RequestMapping(value = "/hello.do")
4 public String hello(String ceshi, Model model) {
5 System.out.println(ceshi);
6 model.addAttribute("helloworld", ceshi);
7 return "index";
8 }
9 }

  6.创建请求jsp页面 
  7.创建视图解析器 
  8.没了,这就是注解,你会发现注解会减少好多代码。

四、再说说如何从页面获取参数的方式

  1. 通过HttpServletRequest request来获取,request.getParameter();
1 @RequestMapping(value = "/list.do")
2 public String list(HttpServletRequest request){
3 String name=request.getParameter("userName");
4 return "userinfo/user_list";
5 }

2. 直接定义参数,保证参数和前台标签的name一致即可

 1 java代码
2 @RequestMapping(value = "/list.do")
3 public String list(@RequestParam(value = "uName") String userName,
4 Integer userPassword, String userSex) {
5 System.out.println(userName + "\t" + userPassword + "\t" + userSex);
6 return "userinfo/user_list";
7 }
8 jsp代码
9 <form action="user/list2.do" method="post">
10 姓名:<input type="text" name="userName"/><br/>
11 <-- 姓名2:<input type="text" name="uName"/><br/>-->
12 密码:<input type="text" name="userPassword"/><br/>
13 性别:<input type="text" name="userSex"/><br/>
14 日期:<input type="text" name="userTime"/>
15 <input type="submit" name="commit" value="提交"/>
16 </form>

注意: 
1,@RequestParam()这个可以设置从页面传的参数设置默认值。或者设置别名(例如:input标签中name=”userName”时,此方法可以获取到该标签的value值,当name=”uName”时,也可以获取到该标签的value值) 
2,直接定义参数方式,参数可以自动转换格式,例如页面时String类型的密码,参数可以为Integer类型,它可以自动转换(这点非常好) 
3. 通过对象来获取值

 1 @RequestMapping(value = "/list2.do")
2 public String list2(User us, Date userTime) {
3 System.out.println(us.getUserName() + "\t" + us.getUserPassword()
4 + "\t" + us.getUserSex());
5 System.out.println(userTime);
6 return "userinfo/user_list";
7 }
8
9 @InitBinder
10 public void initBinder(WebDataBinder binder) { //自动转换成Date类型
11 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
12 dateFormat.setLenient(false);
13 binder.registerCustomEditor(Date.class, new CustomDateEditor(
14 dateFormat, false));
15 }

注意: 
1,@RequestParam()这个可以设置从页面传的参数设置默认值。或者设置别名(例如:input标签中name=”userName”时,此方法可以获取到该标签的value值,当name=”uName”时,也可以获取到该标签的value值) 
2,直接定义参数方式,参数可以自动转换格式,例如页面时String类型的密码,参数可以为Integer类型,它可以自动转换(这点非常好) 
3. 通过对象来获取值

 1 @RequestMapping(value = "/list2.do")
2 public String list2(User us, Date userTime) {
3 System.out.println(us.getUserName() + "\t" + us.getUserPassword()
4 + "\t" + us.getUserSex());
5 System.out.println(userTime);
6 return "userinfo/user_list";
7 }
8
9 @InitBinder
10 public void initBinder(WebDataBinder binder) { //自动转换成Date类型
11 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
12 dateFormat.setLenient(false);
13 binder.registerCustomEditor(Date.class, new CustomDateEditor(
14 dateFormat, false));
15 }

注意:参数为日期类型时,需要定一下检测日期类型的方法,进行格式转换。

五、如何从控制器中传值到页面呢?

1 1.最原始的,通过HttpServletRequset request来传递,request.setAttribute();
 1 @RequestMapping(value="/add1.do")
2 public String add(HttpServletRequest request){
3
4 String userNumber = request.getParameter("userNumber");
5 String passWord = request.getParameter("passWord");
6
7 System.out.println("userNumber:"+userNumber+" passWord:"+passWord);
8
9 String str = "userNumber:"+userNumber+" passWord:"+passWord;
10
11 request.setAttribute("user", str);
12
13 return "user_add1";
14 }
1 2. 通过ModelAndView来传递到页面
1 @RequestMapping(value="/add2.do")
2 public ModelAndView add2(){
3
4 ModelAndView mav = new ModelAndView("user_add2");
5 mav.addObject("userId", 1001);
6 mav.addObject("userName", "张三");
7
8 return mav;
9 }
1 3. 通过model来传递(一般开发这个比较用的多)
1 @RequestMapping(value="/add3.do")
2 public String add3(Model model){
3
4 model.addAttribute("personId", 9527);
5 model.addAttribute("personName", "唐伯虎");
6
7 return "user_add3";
8 }
1  4. 通过map来传递
 1 @RequestMapping(value="/add4.do")
2 public String add4(Integer personId,String userName,Map map){
3
4 System.out.println(personId);
5 System.out.println(userName);
6 map.put("personId", 9527);
7 map.put("personName", "唐伯虎");
8
9 return "user_add4";
10 }

六、最后再掌握一个ajax,就算入门了

 1 jsp页面
2 <%@ page language="java" contentType="text/html; charset=UTF-8"
3 pageEncoding="UTF-8"%>
4 <%
5 String path = request.getContextPath();
6 String basePath = request.getScheme() + "://"
7 + request.getServerName() + ":" + request.getServerPort()
8 + path + "/";
9 %>
10 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
11 <html>
12 <head>
13 <base href="<%=basePath%>">
14 <title>Insert title here</title>
15 <script type="text/javascript" src="js/jquery.js"></script>
16 <script type="text/javascript">
17 $().ready(function(){
18 $("#but01").click(function(){
19 var userNumber = $("#userNumber").val();
20 if(userNumber.length == 0){
21 alert('请输入账号');
22 }else{
23 $.post("<%=basePath%>ajaxUser.do",{userNumber:userNumber},function(data){
24 alert(data);
25 });
26 }
27 });
28 $("#but02").click(function(){
29 var userId = $("#userId").val();
30 $.post("<%=basePath%>ajaxUser2.do",{userId:userId},function(data){
31 alert(data.userId+' --'+data.userName+' --- '+data.userAge);
32 },"json");
33 });
34 });
35 </script>
36 </head>
37 <body>
38 <hr>
39 账号:<input type="text" id="userNumber" name="userNumber"/>
40 <input type="button" id="but01" value="验证"/>
41 <hr/>
42 编号:<input type="text" id="userId" name="userId"/>
43 <input type="button" id="but02" value="查询"/>
44 <hr/>
45 </body>
46 </html>
 1 控制器代码
2 @Controller
3 public class UserController {
4 @RequestMapping("/ajaxUser.do")
5 public void userNumber(String userNumber, HttpServletResponse response) {
6 System.out.println(userNumber);
7 try {
8 // 响应
9 response.setContentType("text/html");
10 response.setCharacterEncoding("utf-8"); //向页面传递提示消息
11 PrintWriter out = response.getWriter();
12 if ("liu".equals(userNumber)) {
13 out.println("对不起,请重新输入账号");
14 } else {
15 out.println("恭喜您,账号可以使用");
16 }
17 out.flush();
18 out.close();
19 } catch (Exception e) {
20 e.printStackTrace();
21 }
22 }
23
24 @RequestMapping("/ajaxUser2.do")
25 public @ResponseBody UserInfo ajaxUser(Integer userId){
26 System.out.println("编号:"+userId);
27 UserInfo user = new UserInfo();
28 user.setUserId(userId);
29 user.setUserName("张三");
30 user.setUserAge(18);
31 return user;
32 }
33
34 }

七、总结:

1 经过上述简单但有态度的总结,希望看到的朋友可以明白SpringMVC的执行的过程和用法。想要深入的精通SPringMVC还需要自己慢慢的钻研喽,加油,我们一起努力。

SpringMVC入门总结的更多相关文章

  1. 【Spring】SpringMVC入门示例讲解

    目录结构: // contents structure [-] SpringMVC是什么 Spring MVC的设计原理 SpringMVC入门示例 1,复制Jar包 2,Web.xml文件 3,My ...

  2. Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ...

  3. SpringMVC入门第二天

    SpringMVC第二天 1.   回顾 1.Springmvc介绍? Springmvc是Spring公司 2.Springmvc入门程序 第一步:Web工程 第二步:导Jar包 第三步:web.x ...

  4. 3.2.1 SpringMVC入门

    一. SpringMVC入门 1. MVC介绍 MVC全名 是Model View Controller, 是模型(model) - 视图(view) - 控制器(controller) 的缩写, 它 ...

  5. SpringMVC入门学习(二)

    SpringMVC入门学习(二) ssm框架 springMVC  在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...

  6. SpringMVC入门学习(一)

    SpringMVC入门学习(一) ssm框架 spring  SpringMVC是一个Java WEB框架,现在我们知道Spring了,那么,何为MVC呢? MVC是一种设计模式,其分为3个方面 mo ...

  7. springMVC入门(一)

    1.   SpringMVC入门 1.1SpringMVC是什么 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出 ...

  8. SpringMVC.入门篇《二》form表单

    SpringMVC.入门篇<二>form表单 项目工程结构: 在<springmvc入门篇一.HelloWorld>基础上继续添加代码,新增:FormController.ja ...

  9. SpringMVC.入门篇.一.HelloWorld

    SpringMVC.入门篇<一>HelloWorld 项目包结构如下: HelloController.java 代码 package com.charles.controller; im ...

  10. SpringMVC入门(基于注解方式实现)

    ---------------------siwuxie095                             SpringMVC 入门(基于注解方式实现)         SpringMVC ...

随机推荐

  1. C#模板编程(2): 编写C#预处理器,让模板来的再自然一点

    在<C#模板编程(1):有了泛型,为什么还需要模板?>文中,指出了C#泛型的局限性,为了突破这个局限性,我们需要模板编程.但是,C#语法以及IDE均不支持C#模板编程,怎么办呢?自己动手, ...

  2. 图论--最小生成树--Prim算法(带边输出)模板

    #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int maxn = 100 ...

  3. 「newbee-mall新蜂商城开源啦」 前后端分离的 Vue 版本即将开源

    新蜂商城 Vue 版本 2019 年 10 月份我在 GitHub 开源仓库中上传了新蜂商城项目的所有源码,至今已经有小半年的时间了,感兴趣的可以去了解一下这个 Spring Boot 技术栈开发的商 ...

  4. Java中的动态定义数组

    1.一维矩阵的动态定义(代码注释) 1.1方法一 package dongtai; import java.util.Scanner; import java.util.ArrayList; publ ...

  5. 学习Vue第二节,v-cloak,v-text,v-html,v-bind,v-on使用

    v-cloak,v-text,v-html,v-bind,v-on使用 <!DOCTYPE html> <html> <head> <meta charset ...

  6. 初识CoAP协议

    前言 本文介绍什么是CoAP,以及如何在物联网设备上使用它.CoAP是一种物联网协议,具有一些专门为受约束的设备而设计的有趣功能.还有其他一些可用于构建物联网解决方案的IoT协议,例如MQTT等. 物 ...

  7. Spring Cloud 学习 之 Spring Cloud Bus实现修改远程仓库后配置自动刷新

    ​ 版本号: ​ Spring Boot:2.1.3.RELEASE ​ Spring Cloud:G版 ​ 开发工具:IDEA 搭建配置中心,这里我们搭建一个简单版的就行 POM: <?xml ...

  8. 【Hadoop离线基础总结】impala简单介绍及安装部署

    目录 impala的简单介绍 概述 优点 缺点 impala和Hive的关系 impala如何和CDH一起工作 impala的架构及查询计划 impala/hive/spark 对比 impala的安 ...

  9. MYSQL连接端口被占引入文件路径错误

    今天早上打算本地win7机器上用Wampserver搭建PHP环境,把自己的程序配置上去.下载最新的wampserver 3.0.6版本安装后,发现mysql一直无法运行,以为是wampserver版 ...

  10. 转载-git使用之忽略不需要上传的文件的几种方式

    在我们使用git 的时候通常会遇到一些问题,一些文件我创建了但是我并不想上传或者有些文件我修改了但是并不想上传(为了适应个自己的开发环境),但是在每次git status的时候总能看到它,不仅感到很心 ...