一、入门
1、所需jar包
spring-beans-4.1.2.RELEASE.jar
spring-context-4.1.2.RELEASE.jar
spring-core-4.1.2.RELEASE.jar
spring-expression-4.1.2.RELEASE.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
spring-webmvc-4.1.2.RELEASE.jar
spring-web-4.1.2.RELEASE.jar
二、环境搭建
1、web.xml配置核心控制器
<!-- 配置核心控制器,之前我们配置的是我们自己的servlet,今天我们需要配置别人的。名叫dispatcherservlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<!-- 快捷键ctrl+shift+T调出类搜索面板,拷贝类的全限定名 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载springmvc配置文件 -->
<init-param>
<!-- 使用DispatcherServlet父类中属性,不能修改,主要功能是指定springmvc配置文件的路径 -->
<param-name>contextConfigLocation</param-name>
<!-- classpath:指的查找资源目录下的文件 -->
<param-value>classpath:springmvc-config.xml</param-value>
</init-param>
<!-- tomcat启动的时候,加载配置文件 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!--
要拦截所有请求,有三种写法,现在先直接使用/,下午在详细讲解这三种配置
方式1:*.do匹配。核心控制器会放行所有*.do结尾的地址。不会拦截静态资源【不推荐】
方式2:/*,所有的路径都会被拦截,包括静态资源,这种配置只适用于过滤器,在servlet中是错误的配置【不能用!】
方式3:/,拦截所有请求,但是会放行jsp文件,静态资源(图片,css,js文件等)
-->
<!-- <url-pattern>*.do</url-pattern> -->
<!-- <url-pattern>/*</url-pattern> -->
<url-pattern>/</url-pattern>
</servlet-mapping>
2、springmvc-config.xml配置
<!-- 方式三:使用@controller注解的方式配置
context:component-scan标签:告诉spring需要扫描哪些包中的类
base-package属性:配置需要扫描的包名
-->
<context:component-scan base-package="com.wyc.controller" />
<!-- 为了放行静态资源
mvc:default-servlet-handler会让注解扫描功能失效
-->
<mvc:default-servlet-handler/>
<!-- 让注解扫描功能生效 -->
<mvc:annotation-driven/>
三、业务处理器的实现
建议使用注解方式
@Controller
public class IndexController {
@RequestMapping("/index")
public String index() {
System.out.println("注解方式");
return "/WEB-INF/index.jsp";
}
}
四、三种前端向后端发送数据的方式
1、使用HttpServletRequest对象
@RequestMapping("/send1")
public String send1(HttpServletRequest req) {
req.setAttribute("name", "李四");
return "/WEB-INF/index.jsp";
}
2、使用model对象
@RequestMapping("/send2")
public String send2(Model model) {
model.addAttribute("name", "lisi");
return "/WEB-INF/index.jsp";
}
3、返回ModelAndView对象
@RequestMapping("/send3")
public ModelAndView send3() {
ModelAndView mv = new ModelAndView();
mv.addObject("name", "wangwu");
mv.setViewName("/WEB-INF/index.jsp");
return mv;
}
五、五种后端接收数据的方式(有一个变种)
1、使用HttpServletRequest对象
@RequestMapping("/accept1")
public String accept1(HttpServletRequest req) {
String name = req.getParameter("name");
String age = req.getParameter("age");
System.out.println(name);
System.out.println(age);
return "/WEB-INF/index.jsp";
}
2、传入与一样类型的参数,适用于参数少的情况下
@RequestMapping("/accept2")
public String accept2(String name,Integer age) {
System.out.println(name);
System.out.println(age);
return "/WEB-INF/index.jsp";
}
3、第二种方式的变种,适用于前端和后端的参数名称不一样的时候
@RequestMapping("/accept3")
public String accept3(@RequestParam("name1")String name,Integer age) {
System.out.println(name);
System.out.println(age);
return "/WEB-INF/index.jsp";
}
4、传入用户对象
@RequestMapping("/accept4")
public String accept4(User user) {
System.out.println(user);
return "/WEB-INF/index.jsp";
}
5、传入id
@RequestMapping("/accept5/{id}")
public String accept5(@PathVariable("id") Long id) {
System.out.println(id);
return "/WEB-INF/index.jsp";
}
6、还可以获取参数的提交方式,get和post
@RequestMapping(value="/accept6",method=RequestMethod.POST)
public String accept7(User user) {
System.out.println(user);
System.out.println("post");
return "/WEB-INF/index.jsp";
}
六、视图解析器
1、配置视图解析器的xml
<!-- 配置视图解析器
使用的是spring中的一个类
-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置前缀 -->
<property name="prefix" value="/WEB-INF/"></property>
<!-- 配置后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
2、访问WEB-INF下面的views下面的user
@RequestMapping("/view2")
public String view2() {
System.out.println("视图解析器访问user");
return "views/user";
}
七、请求转发和重定向
1、请求转发:
@RequestMapping("/view3")
public String view3() {
System.out.println("forward请求转发");
return "forward:/WEB-INF/student/stu.jsp";
}
2、重定向
如果把值放到request请求,下一个页面不能取出
@RequestMapping("/view4")
public String view4() {
System.out.println("redirect重定向");
return "redirect:/view3";
}