Spring MVC
是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易
用性有了大幅度的提高。Spring 3.0更加完善,实现了对老牌的MVC框架Struts 2的超越。
现在版本已经到了Spring5.x了,我们这门课程是基于Spring5.0.6的SpringMVC框架来写案
例。现在越来越多的开发团队选择了Spring MVC。
springmvc开发大概步骤:maven web 工程名: springmvcdemo
- springmvc需要的包:
org.springframework
spring-context
5.0.6.RELEASE
org.springframework
spring-web
5.0.6.RELEASE
commons-logging
commons-logging
1.2
org.springframework
spring-webmvc
5.0.6.RELEASE
log4j
log4j
1.2.12
javax.servlet
javax.servlet-api
3.1.0
provided
javax.servlet.jsp
javax.servlet.jsp-api
2.3.1
provided
-
在web.xml中配置DispatcherServlet.
注意:打开web.xml 按ctrl+shift+f 格式一下文档,再中,去掉 /,再加
在中:按alt+/,找到--如图所示:
springDispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
springDispatcherServlet
/
-
加入SpringMVC的spring配置文件
配置文件,配置注解所在的包,为mvc指定视图解析器。
-
搭好架子,建好所有要的包,和jsp文件(该类文件一般放在/WEB-INF/jsp中---安全,直接访问不到)
- 建好控制类,做好显示页(jsp或html),该类控制类不去执行HttpServlet类来做控制逻辑,已经可以用注解@Controller方式注解成sevlet.可以跳转。如下代码:它可以返回index.jsp页。
index.jsp
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class IndexController {
@RequestMapping("/index") //映射index.jsp页面
public String index() {
return "index"; //返回对应的视图(jsp页面)的名字,不写前后缀
}
}
测试:
启动TOMCAT,浏览器地址栏中输入:http://localhost:8081/springmvcdemo/index 回车,注意不要输后缀,后缀由spring xml文件配置好了。
这个例子的大致流程分析:
一些注解说明
1@Controller
注解该类为一个Servlet 对象放到IOC容器中,也就是如同HttpServlet类对象。
2 @RequestMapping
是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将HTTP 请求映射到控制器(controller类)的处理方法上。
Request Mapping 基础用法
在 Spring MVC 应用程序中, RequestDispatcher ( 在 Front Controller 之下 ) 这个 servlet 负责将进入的 HTTP 请求路由到控制器的处理方法。在对 Spring MVC 进行的配置的时候 , 需要我们指定请求与处理方法之间的映射关系。
指定映射关系,就需要我们用上 @RequestMapping 注解。
@RequestMapping 注解在前面的例子中是在方法的级别上使用。除此外,这个注解还可使用在类级别的:
在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上。之后才是另外添加在方法级别的注解来进一步指定到处理方法的映射关系。
下面是一个同时在类和方法上应用了 @RequestMapping 注解的示例:
说白了,体现在浏览器上访问地址上,就是父目录:/index/index
RequestMapping里面的注解包含的参数:
- value , method(path等于value,要是见到有写path代就理解为value)
value( 别名path) : :指定请求的实际地址,指定的地址可以是URI Template 模式;
多个地址可以写成一个数组形形:value={"/index","/",""},即运行时,只需输入项目名也可进入到页面。
value的uri值为以下三类:
B类通配符:
RequestMapping注解中的映射请求可以支持3中通配符:
1、?:匹配文件中的一个字符
2、* :匹配任意字符
3、** :匹配多层路径
B类示例:在地址栏中输入: http://localhost:8080/springmvcdemo/index/10 回车,控制台会输出:ids===10
http://localhost:8080/springmvcdemo/index/a/10 回车,控制台会输出:ids===10
http://localhost:8080/springmvcdemo/index/aa/10 回车,控制台会输出:ids===10
三种代码如下:
@Controller
public class IndexController {
@RequestMapping("/index/{id}")
public String index(@PathVariable(value="id") int ids) {
System.out.println("ids===="+ids);
return "index"; //返回对应的视图(jsp页面文件名字)的名字,不写前后缀
}
}
@Controller
public class IndexController {
@RequestMapping("/index/*/{id}")
public String index(@PathVariable(value="id") int ids) {
System.out.println("ids===="+ids);
return "index"; //返回对应的视图(jsp页面文件名字)的名字,不写前后缀
}
}
@Controller
public class IndexController {
@RequestMapping("/index/**/{id}")
public String index(@PathVariable(value="id") int ids) {
System.out.println("ids===="+ids);
return "index"; //返回对应的视图(jsp页面文件名字)的名字,不写前后缀
}
}
method: 默认会自动匹配GET或POST请求,可以指定请求的method类型 取值可以是GET、POST、PUT、DELETE等;举例说明一下method,看 JSP 页面:http://localhost:8080/springmvcdemo/index/10 回车后,会出现HTTP状态 405 - 方法不允许错误,因为它指定POST,而我们这样的请求是GET.
@Controller
public class IndexController {
@RequestMapping(value="/index/{id}",method=RequestMethod.POST)
public String index(@PathVariable(value="id") int ids) {
System.out.println("ids===="+ids);
return "index"; //返回对应的视图(jsp页面文件名字)的名字,不写前后缀
}
}
- consumes,produces;
consumes: 指定处理请求的提交内容类型( Content-Type ) 例如 application/json, text/html;
TOMCAT 服务支持的类型可以到其根目录下/conf/web.xml中查看,如:
123
application/vnd.lotus-1-2-3
举例:
上述代码中加一个WEB-INF/jsp/success.jsp页面。
测试@RequestMapping的参数Consumes
提交成功
index.jsp: 加一个表单,表单跳转到映射类方法中
Insert title here
这是index首页