SpringMvc框架搭建
Spring mvc框架搭建步骤
1.下载jar文件并导入到工程
:
2.配置文件
在web.xml中配置Servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!--欢迎界面-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 核心控制器的配置DispatchServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!--初始化参数-->
<init-param>
<!--这里选的是servlet.xml的路径选择-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--自动启动-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
创建Spring MVC的配置文件
<!--XML头文件-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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">
<!--一.配置处理器映射 HandlerMapping-->
<!--1.BeanNameUrlHandlerMapping通过Bean名字映射-->
<!--2.DefaultAnnotationHanderMapping通过注解方式映射-->
<!--"/index.html"的意思是如果网址输入了index.html
就会把这次请求交给IndexController处理-->
<bean name="/index.html" class="cn.kgc.controller.IndexController"/>
<!--二.配置视图解析器 /WEB-INF/jsp/index.jsp-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--视图前后缀-->
<property name="prefix" value="/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
3.创建Controller-处理请求的控制器
BeanNameUrlHandlerMapping
/**
* IndexController
*/
package cn.kgc.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class IndexController extends AbstractController {
protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
System.out.println("hello,spring mvc!");
return new ModelAndView("index");
}
}
4.创建View-jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
<meta charset="utf-8">
</head>
<body>
<h1>
Welcome to spring mvc<br/>
This is Hxl Page!!!<br/>
//这里使用了ModelAndView里设置的 addObject()方法
您输入的是:<span style="color: crimson">${username}</span>
</h1>
</body>
</html>
5.使用注解配置servlet.xml和Controller
Controller控制器
@RequestMapping
标注在类定义
处
标注在方法定义
处
映射规则
-
通过请求URL进行映射
-
通过请求参数进行映射
若选择方法参数直接入参的话,方法入参名必须与请求参数名保持一致 -
通过请求方法映射
GET
POST
DELETE
-
@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六个属性,下面我们把她分成三类进行说明。-
1、value, method;
- value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
- method: 指定请求的method类型, GET、POST、PUT、DELETE等; 2、consumes,produces;
-
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
3、params,headers;
-
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
-
@RequestParam
在变量前面加上@RequestParam来强调该变量的不为空,为空则报400错误
也可以@RequestParam(required=false)
来关闭必须参数的限制
这样就和不带注解的效果一样了
package cn.kgc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/***
* 使用注解
*/
注释控制器,告诉Spring Mvc这是一个控制器类
@Controller
声明该控制器的拦截路径,如localhost:8080/index 下所有内容都交给此控制器控制
@RequestMapping("/index")
public class IndexController {
public Logger logger = Logger.getLogger(IndexController.class);
方法一:拦截的具体:如请求localhost:8080/index/index.html 就交由此方法来进行处理请求
@RequestMapping("/index.html")
public String index(){
System.out.println("hello spring mvc!");
return "index";
}
//value可以选多个不同地址请求同个控制器,method选择的是请求的方式如GET,POST
//params的参数必须等于请求中的参数名字
方法二:使用@RequestMapping 里的属性赋值方式拦截
value:这里拦截的是/index/welcome或/index/
method:选择的是请求类型,post,get,delete等
params:入参名称,必须等同于方法的入参名字
@RequestMapping(value = {"/welcome","/"},method = RequestMethod.GET,
params = "uname")
public String welcome(@RequestParam String uname){
System.out.println("hellow,springMVC,username:"+uname);
return "index";
}
}
servlet.xml
....省略头文件
<beans>
<!-- 一.配置处理器映射 HandlerMapping -->
<!--1.BeanNameUrlHandlerMapping通过Bean名字映射-->
<!--2.DefaultAnnotationHanderMapping通过注解方式映射-->
<!--<bean name="/index.html" class="cn.kgc.controller.IndexController"/>-->
<!--3.使用注解方式配置Controller-->
<mvc:annotation-driven/>
<!--使用上下文扫描包路径-->
<context:component-scan base-package="cn.kgc.controller"/>
<!--二.配置视图解析器 /WEB-INF/jsp/index.jsp-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--视图前后缀-->
<property name="prefix" value="/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
6.ModelAndView返回视图
使用modelAndView的方式
package cn.kgc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
/***
* UserController
*/
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/welcome")
public ModelAndView welcome(@RequestParam String uname){
System.out.println("hellow,springMVC,username:"+uname);
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("index");
modelAndView.addObject("username",uname);
return modelAndView;
}
}
使用Map的方式
//使用Map的方式
@RequestMapping("index3.html")
public String index3(@RequestParam String name, Map<String,Object> model){
model.put("username",name);
return "index";
}