SpringMVC:
使用:
1、下载(官网下载)
2、导包:
commons-logging-1.1.3.jar
spring-aop-5.0.8.RELEASE.jar
spring-aspects-5.0.8.RELEASE.jar
spring-beans-5.0.8.RELEASE.jar
spring-context-5.0.8.RELEASE.jar
spring-core-5.0.8.RELEASE.jar
spring-expression-5.0.8.RELEASE.jar
spring-instrument-5.0.8.RELEASE.jar
spring-jdbc-5.0.8.RELEASE.jar
spring-tx-5.0.8.RELEASE.jar
spring-web-5.0.8.RELEASE.jar
spring-webmvc-5.0.8.RELEASE.jar
3、配置xml(springmvc.xml文件)和(web.xml文件)
4、编写controller
SpringMVC的写法:
配置web.xml(非注解)
<!-- 配置servlet -->
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置init-param(配置springmvc.xml的地址):如果不配置init-param,需要把src下的xml放在WEB-INF下,名为:(servlet-name的值-servlet.xml)即可 -->
<init-param>
<param-name>ContextConfigLocation</param-name>
<param-value>ClassPath:springmvc.xml</param-value>
</init-param>
<!-- 当容器启动时立即启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- 和上面的servlet-name值一致 -->
<servlet-name>servlet</servlet-name>
<!-- 拦截一切以.action的请求,也可以是以xxx/*为前缀的,也可以是/ -->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
配置springmvc.xml文件(非注解)
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入约束文件 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- id:值是为了区分beans name:提交地址名 class:TestController类所在的包 -->
<bean id="user" name="/user.action" class="com.hp.controller.TestController"></bean>
</beans>
编写controller:
public class TestController implements Controller{//继承Controller接口
//重写一个ModelAndView方法
@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
// TODO Auto-generated method stub
System.out.println("请求来了");
//指定一个视图(页面跳转)
ModelAndView mav=new ModelAndView();
mav.setViewName("jsp/ok.jsp");//要跳转的页面(成功将跳转到/jsp/ok.jsp页面)
return mav;//视图返回值
}
}
jsp页面
<!-- 提交地址为springmvc.xml文件中bean里面name的属性值 -->
<a href="user.action">点我</a>
SpringMVC注解的写法:
配置web.xml(注解)
<!-- 配置servlet -->
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置init-param(配置springmvc.xml的地址):如果不配置init-param,需要把src下的xml放在WEB-INF下,名为:(servlet-name的值-servlet.xml)即可 -->
<init-param>
<param-name>ContextConfigLocation</param-name>
<param-value>ClassPath:springmvc.xml</param-value>
</init-param>
<!-- 当容器启动时立即启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- 和上面的servlet-name值一致 -->
<servlet-name>servlet</servlet-name>
<!-- 拦截一切以.action的请求,也可以是以xxx/*为前缀的,也可以是/ -->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
配置springmvc.xml文件(注解)
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入约束文件 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 扫描有注解的包 --><!-- 这里会用到context包,需要在上面加spring-context.xsd -->
<context:component-scan base-package="com.hp.controller"></context:component-scan>
<!-- 配置视图解析器(InternalResourceViewResolver) -->
<bean id="user" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置视图返回值的前缀 -->
<property name="prefix" value="/jsp/" />
<!-- 配置视图返回值的后缀 -->
<property name="suffix" value=".jsp" />
<!-- 返回值为ok,即:/jsp/ok.jsp (跳转到这个界面) -->
</bean>
</beans>
编写controller:
@Controller //引入Controller包
@RequestMapping("TestController") //类的注解
public class TestController{
/**
* 方法的注解(当没有类的注解的时候,页面<a href="HalloSpringmvc">点我</a>)直接给方法注解名,
* 当有注解时,页面<a href="TestController/HalloSpringmvc">点我</a>),写法为:类的注解名/方法的注解名
*/
@RequestMapping("HalloSpringmvc") //方法的注解
public String HalloSpringmvc() {
//视图返回值
return "ok";
}
jsp页面
<!-- 类的注解名/方法的注解名-->
<a href="TestController/HalloSpringmvc">点我</a>
RequestMapping映射及属性:
映射是去匹配@RequestMapping注解,可以和 类名、方法名不一致
//默认的是值得形式,一般不写value,@RequestMapping("注解名")
默认形式: @RequestMapping(value="注解名")
//1、method属性: 在加了method = RequestMethod.POST后, 通过method指定请求方式(GET、POST、DELETE、PUT) 该注解只拦截post请求,不是post请求会报405的错;
//2、params属性: params表示参数:params = {"参数1","参数二"},可以有多个参数,也可以给参数并赋值params = {"uname=admin","upwd=123456","age!=20","!reaname"}等,也可以多个参数,!reaname表示不能有reaname这个参数,有就会报404
//3、headers属性:表示请求头(一般用不到)
//4、ant风格的请求路径:(?代表单字符、*代表任意个字符【任意是0个或多个】、**代表任意个目录)
多参数形式:@RequestMapping(value="注解名",method = RequestMethod.POST,params = {"name=admin","pwd=123456"},headers = {})
注:当页面没有指定是post请求,都会默认是get请求,<a></a>标签也是get请求,页面跳转是默认使用了请求转发的跳转方式(当指定是重定向,才会是从定向的跳转方式)
//ant风格的请求路径:(?代表单字符、*代表任意个字符【任意是0个或多个】、**代表任意个目录)
1、?代表单字符: @RequestMapping(value = "HalloSpringmvc2/?/abc", method = RequestMethod.GET)
jsp页面url路径写法:
<a href="TestController/HalloSpringmvc2/a/abc">测试ant风格的中的(?代表单字符)请求路径</a>
2、 *代表任意个字符: @RequestMapping(value = "HalloSpringmvc2_1/*/abc", method = RequestMethod.GET)
jsp页面url路径写法:
<a href="TestController/HalloSpringmvc2_1/abc/abc">测试ant风格的中的(*代表任意个字符【任意是0个或多个】)请求路径</a>
3、 **代表任意个目录: @RequestMapping(value = "HalloSpringmvc2_2/**/abc", method = RequestMethod.GET)
jsp页面url路径写法:
<a href="TestController/HalloSpringmvc2_2/a/b/c/abc">测试ant风格的中的(**代表任意个目录)请求路径</a>
//基于ant的一个引深
@pathVariable 获取动态参数
eg:
jsp页面写法:
<h3>//基于ant的一个引深 </h3>
<a href="TestController/HalloSpringmvc3/刘二狗">获取动态参数,这里的 刘二狗 是参数值</a><br>
后台接受页面传回来的值:
// 5、基于ant的一个引深
@RequestMapping(value = "HalloSpringmvc3/{name}", method = RequestMethod.GET)
//@pathVariable 获取动态参数,{name}是页面传过来的属性值
public String HalloSpringmvc3(@PathVariable("name") String name) {
System.out.println(name);
// 视图返回值
return "ok";
}