springmvc
pom文件
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</ groupId>
<artifactId>spring-web</ artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId> org.springframework </groupId>
<artifactId> spring-webmvc </artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId> javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>2.5.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
web.xml配置
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置Servlet的初始化参数,读取springmvc的配置文件,创建Spring容器 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 配置servlet启动时加载对象 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 配置过滤器,解决中文乱码问题 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 指定字符集 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
springmvc.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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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">
<!-- 配置spring创建容器时要扫描的包 -->
<context:component-scan base-package="com.xymh" />
<!-- 配置视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 配置Spring开启注解mvc的支持 -->
<mvc:annotation-driven/>
</beans>
请求参数绑定
- RequestMapping:用于路径绑定
@RequestMapping("/hello")
public String sayhello(){
System.out.println("Say Hello!");
return "success";
}
- @RequestParam
1.做用:把请求中的指定名称的参数传递给控制器中的形参赋值
2.属性:
value:请求参数中的名称
required:请求参数中是否必须提供此参数,默认是true,必须提供
@RequestMapping("/hello2")
public String sayhello2(@RequestParam(value = "username",required = true)String name){
System.out.println("Say Hello!");
System.out.println(name);
return "success";
}
3 @RequestBody
1.作用:用于获取请求体的内容(get方法不可以用)
2.属性
1. required:是否必须有请求体,默认是true
@RequestMapping("/hello3")
public String sayhello3(@RequestBody String name){
System.out.println("Say Hello!");
System.out.println(name);
return "success";
}
4.@PathVariable: 接收请求
1.作用:拥有绑定url中的占位符。例如:url中有hello4/{id},id就是占位符
2.属性:
value:指定url中的占位符名称
3.Restful风格的URL
1.请求路径一样,可以根据不同的请求方式去执行后台的不同方法
2.restful风格的URL优点
1.结构清晰
2.符合标准
3.易于理解
4.扩展方便
@RequestMapping("/hello4/{id}")
public String sayhello4(@PathVariable(value = "id") String id){
System.out.println("Say Hello!");
System.out.println(id);
return "success";
}
5.@RequestHeader
作用:获取指定请求头的值
属性:
value:请求头的名称
@RequestMapping("/hello5")
public String sayhello5(@RequestHeader(value = "Accept") String header){
System.out.println("Say Hello!");
System.out.println(header);
return "success";
}
- @CookieValue
作用:用于获取指定cookie的名称的值
属性:
value:cookie的名称
@RequestMapping("/hello6")
public String sayhello6(@CookieValue(value = "JSESSIONID") String cookieValue){
System.out.println("Say Hello!");
System.out.println(cookieValue);
return "success";
}
- @ModelAttribute
作用:
1.出现在方法上:表示当前方法会在控制器方法执行前先执行
2.出现在参数上:获取指定的数据给参数赋值
应用场景:
当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据
//作用在方法上
@ModelAttribute
public User showUser(String name){
System.out.println("showUser执行了");
//模拟从数据库中查询对象
User user = new User();
user.setName("小王");
user.setPasswprd("123");
user.setMoney(100d);
return user;
}
@RequestMapping("/updateUser")
public String updateUser(User user){
System.out.println("Say Hello!");
System.out.println(user);
return "success";
}
//作用在方法上的先执行,获取user对象,存入到map集合中
@ModelAttribute
public void showUser(String name, Map<String,User> map){
System.out.println("showUser执行了");
//模拟从数据库中查询对象
User user = new User();
user.setName("小王");
user.setPasswprd("123");
user.setMoney(200d);
map.put("abc",user);
}
@RequestMapping("/updateUser2")
public String updateUser2(@ModelAttribute(value = "abc") User user){
System.out.println("Say Hello!");
System.out.println(user);
return "success";
}
8.@SessionAttributes: 往session域里面存储值
@Controller
@RequestMapping("/user")
@SessionAttributes(value = {"username","password","age"}
,types = {String.class,Integer.class}) //将数据存入session域对象中
public class TestController03 {
/**
* 向session域中存入值
* @param model
* @return
*/
@RequestMapping("save")
public String save(Model model){
System.out.println("向session域中保存数据");
model.addAttribute("username","root");
model.addAttribute("password","root");
model.addAttribute("age",16);
return "success";
}
/**
* 在session域中查询值
* @param modelMap
* @return
*/
@RequestMapping("find")
public String find(ModelMap modelMap){
String username = (String) modelMap.get("username");
String password = (String) modelMap.get("password");
Integer age = (Integer) modelMap.get("age");
System.out.println(username+":"+password+":"+age);
return "success";
}
/**
* 清空session域
* @param status
* @return
*/
@RequestMapping("delete")
public String delete(SessionStatus status){
System.out.println("清除session域中数据");
status.setComplete();
return "success";
}
}