.
…
.
…
.
.
package com.zhuzhu.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
//控制器类
@Controller
public class HelloController {
@RequestMapping(path = "/hello")
public String sayHello(){
System.out.println("hello stringmvc");
return "success";
}
}
.
pom.xml
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
。
。
。
@RequestMapping
@RequestMapping中的path和value都是指定路径
。
.
.
.
请求方式post请求方式
。
表示必须传一个username属性,如果不传那这个方法就不会执行
这样传:
。。
。。
如果配置这样写
,那这里也要传heihei
…
…
请求头
启动 、、浏览器:
。
。
请求参数的绑定
。
/**
* 请求参数绑定
*/
@Controller
@RequestMapping("/param")
public class ParamController {
/**
* 请求参数绑定入门
*
* return
*/
@RequestMapping("/testParam")
public String testParam(){
System.out.println("执行了。。。");
return "sucess";
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--请求参数绑定--%>
<a href="param/testParam">请求参数绑定</a>
</body>
</html>
。
传参数
传多个:
Controller里的参数名要和jsp里的一样
.
请求参数的绑定
。
package com.zhuzhu.controller;
import com.zhuzhu.domain.Account;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 请求参数绑定
*/
@Controller
@RequestMapping("/param")
public class ParamController {
/**
* 请求参数绑定入门
* @return
*/
@RequestMapping("/testParam")
public String testParam(String username,String password){
System.out.println("执行了。。。");
System.out.println("用户名"+username);
System.out.println("密码"+password);
return "success";
}
/**
* 请求参数绑定把数据封装到JavaBean的类中
* @return
*/
@RequestMapping("/saveAccount")
public String saveAccount(Account account){
System.out.println("执行了。。。");
System.out.println(account);
return "success";
}
}
。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--请求参数绑定--%>
<%-- <a href="param/testParam?username=haha&password=123">请求参数绑定</a> --%>
<form action="/param/saveAccount" method="post">
姓名:<input type="text" name="username"> <br/>
密码:<input type="text" name="password"> <br/>
金额:<input type="text" name="money"> <br/>
用户姓名:<input type="text" name="user.uname"> <br/>
用户年龄:<input type="text" name="user.age"> <br/>
<input type="submit" value="提交">
</form>
</body>
</html>
。
。
List、map集合
package com.zhuzhu.domain;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
public class Account implements Serializable {
private String username;
private String password;
private String money;
private List<User> list;
private Map<String,User> map;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
public Map<String, User> getMap() {
return map;
}
public void setMap(Map<String, User> map) {
this.map = map;
}
@Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money='" + money + '\'' +
", list=" + list +
", map=" + map +
'}';
}
}
<form action="/param/saveAccount" method="post">
姓名:<input type="text" name="username"> <br/>
密码:<input type="text" name="password"> <br/>
金额:<input type="text" name="money"> <br/>
用户姓名:<input type="text" name="list[0].uname"> <br/>
用户年龄:<input type="text" name="list[0].age"> <br/>
用户姓名:<input type="text" name="map['one'].uname"> <br/>
用户年龄:<input type="text" name="map['one'].age"> <br/>
<input type="submit" value="提交">
</form>
</body>
</html>
ParamController不变
。。
。。
。
自定义类型转换器
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--请求参数绑定--%>
<%-- <a href="param/testParam?username=haha&password=123">请求参数绑定</a> --%>
<form action="/param/saveUser" method="post">
姓名:<input type="text" name="uname"> <br/>
年龄:<input type="text" name="age"> <br/>
日期:<input type="text" name="date"> <br/>
<input type="submit" value="提交">
</form>
</body>
</html>
package com.zhuzhu.controller;
import org.springframework.core.convert.converter.Converter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 把字符串转换日期
*/
public class StringToDateConverter implements Converter<String, Date> {
/**
* String source 传入进来字符串
* @param source
* @return
*/
public Date convert(String source) {
//判断
if (source==null){
throw new RuntimeException("请您传入数据");
}
try {
String type="yyyy/MM/dd";
if(source.indexOf("-")!=-1){
type="yyyy-MM-dd";
}
DateFormat df=new SimpleDateFormat(type);
//把字符串转换日期
return df.parse(source);
} catch (Exception e) {
throw new RuntimeException("数据类型转换出现错误");
}
}
}
springmvc.xml
<!--开启注解扫描--><!-- 配置spring创建容器时要扫描的包 -->
<context:component-scan base-package="com.zhuzhu"/>
<!-- 配置视图解析器对象-->
<bean id="ViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--配置自定义类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.zhuzhu.controller.StringToDateConverter"/>
</set>
</property>
</bean>
<!--开启springMVC框架注解的支持-->
<mvc:annotation-driven conversion-service="conversionService"/>
</beans>
RuntimeException----运行时异常
。
<mvc:annotation-driven conversion-service="conversionService"/>
annotation-driven会默认把适配器,处理器,映射器那些组件都生效,类型转换需要配置
.
/
获取原生的API
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--请求参数绑定--%>
<%-- <a href="param/testParam?username=haha&password=123">请求参数绑定</a> --%>
<a href="/param/testServlet">Servlet原生的api</a>
</body>
</html>
.
.
常用注解
。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<!-- 常用的注解-->
<a href="anno/testRequestParam?name=哈哈哈哈">RequestParam</a>
</body>
</html>
.
.
@RequestBody
/**
* 获取到请求体的内容
*
* @param body
* @return
*/
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println("执行了。。");
System.out.println(body);
return "success";
}
}
。
。
testPathVariable
jsp传过来的sid赋给id
。
。
。
。
。
@ModelAttribute
。
有返回值
user.setUname(uname);
user.setAge(20);
这两条数据:你没提交数据就不会帮你封装就直接返回,要是提交数据了,那就根据你表单提交的数据帮你封装上再返回出去给上一个方法
。
。
无返回值:
/**
* ModelAttribute注解
*
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute("abc") User user){//下面存了abc,所以要取abc给user对象
System.out.println("testModelAttribute执行了。。");
System.out.println(user);
return "success";
}
@ModelAttribute //放方法上,该方法会优先执行
public void showUser(String uname, Map<String,User> map){
System.out.println("showUser执行了");
//假如表单没有提交完实体类User中的数据(uname,age,date)
//通过用户查询数据库(模拟)
User user = new User();
user.setUname(uname);
user.setAge(20);
user.setDate(new Date());
map.put("abc",user);//从数据库查询出来的对象存到map集合中 (key,value)
}
}
。
。
。
SessionAttributes