使用注解配置控制器和视图解析
定义一个模型和一个扩展类
public class User {
private String username;
private String password;
private String gender;
private int age;
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
", birthday=" + birthday +
", hobbyIds=" + Arrays.toString(hobbyIds) +
'}';
}
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 getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String[] getHobbyIds() {
return hobbyIds;
}
public void setHobbyIds(String[] hobbyIds) {
this.hobbyIds = hobbyIds;
}
private Date birthday;
private String[] hobbyIds;
}
public class UserExt {
private User user;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
private List<User> users=new ArrayList<User>();
@Override
public String toString() {
return "UserExt{" +
"user=" + user +
'}';
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
springMVC配置文件的内容
<!--注解配置控制器扫描-->
<!--1.配置扫描包
它会扫描这个包下面的所有控制器的注解
-->
<context:component-scan base-package="com.szl.backoffice.web.controller"></context:component-scan>
<!--2.配置注解处理映射-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!--3.配置适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<!--4.配置资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/views/"></property>
<!--后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
控制器的内容
@Controller
@RequestMapping("/user")//根请求路径,如果这里写了,则请求时网址中也必须要写
public class UserController2 {
@RequestMapping("/toRegister")
public String toRegister(){
return "user/register";
}
/**
* 第一种接受表单参数的方法:参数逐一赋值
* 默认日期格式是月。日。年
* @return
*/
@RequestMapping("/register")
public String register(String username, String password,
String gender, int age, Date birthday,
String[] hobbyIds){
System.out.println(username);
System.out.println(password);
System.out.println(gender);
System.out.println(age);
System.out.println(birthday);
System.out.println(Arrays.toString(hobbyIds));
return "user/info";//跳转之后info中是没有值的
}
/**
* 第二种接受表单参数的方法:用模型接收,这时需要在表单数据的名字前面加上类名
* 默认日期格式是月。日。年
* @return
*/
@RequestMapping("/register2")
public String register2(User user){
System.out.println(user);
return "user/info";//跳转之后info是有值的
}
/**
* 第三种接受表单参数的方法:包装类(模型里面有模型)
* 默认日期格式是月。日。年
* @return
*/
@RequestMapping("/register3")
public String register3(UserExt userExt){
System.out.println(userExt);
return "user/info";//跳转之后info是有没有值的
}
}
表单提交内容
body>
<form action="${pageContext.request.contextPath}/user/register3.do" method="post">
<%--第一第二种--%>
<%--用户名:<input type="text" name="username"><br>--%>
<%--密码:<input type="text" name="password"><br>--%>
<%--性别:<input type="text" name="gender"><br>--%>
<%--年龄:<input type="text" name="age"><br>--%>
<%--生日:<input type="text" name="birthday"><br>--%>
<%--爱好:<input type="checkbox" name="hobbyIds" value="1">打球--%>
<%--<input type="checkbox" name="hobbyIds" value="2">打人--%>
<%--<input type="checkbox" name="hobbyIds" value="3">打架<br>--%>
<%--<input type="submit"> <br>--%>
<%--第三种接受表单数据方式--%>
用户名:<input type="text" name="user.username"><br>
密码:<input type="text" name="user.password"><br>
性别:<input type="text" name="user.gender"><br>
年龄:<input type="text" name="user.age"><br>
生日:<input type="text" name="user.birthday"><br>
爱好:<input type="checkbox" name="user.hobbyIds" value="1">打球
<input type="checkbox" name="user.hobbyIds" value="2">打人
<input type="checkbox" name="user.hobbyIds" value="3">打架<br>
<input type="submit"> <br>
</form>
</body>
接收表单内容是list集合
在扩展类中定义一个集合,上边也有
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
private List<User> users=new ArrayList<User>();
控制器内容如下
/**
* 第四种接受表单参数的方法:map集合参数
* 默认日期格式是月。日。年
* @return
*/
@RequestMapping("/register4")
public String register4(UserExt userExt){
System.out.println(userExt.getUsers());
return "user/info";//
}
表单中数据如下
<%--第四种接受集合类型的参数--%>
<form action="${pageContext.request.contextPath}/user/register4.do" method="post">
用户名1:<input type="text" name="users[0].username"><br>
密码1:<input type="text" name="users[0].password"><br>
用户名2:<input type="text" name="users[1].username"><br>
密码2:<input type="text" name="users[1].password"><br>
<input type="submit" value="保存"> <br>
</form>
接收表单内容是map集合
扩展类添加如下内容
public Map<String, Object> getInfos() {
return infos;
}
public void setInfos(Map<String, Object> infos) {
this.infos = infos;
}
private Map<String,Object> infos=new HashMap<>();
控制器添加如下内容
/**
* 第五种接受表单参数的方法:map集合参数
* 默认日期格式是月。日。年
* @return
*/
@RequestMapping("/register5")
public String register5(UserExt userExt){
System.out.println(userExt.getInfos());
return "user/info";//跳转之后info是有没有值的
}
表单数据
<%--第五种接受map集合类型的参数--%>
<form action="${pageContext.request.contextPath}/user/register5.do" method="post">
用户名:<input type="text" name="infos['username']"><br>
密码:<input type="text" name="infos['password']"><br>
性别:<input type="text" name="infos['gender']"><br>
年龄:<input type="text" name="infos['age']"><br>
<input type="submit" value="保存"> <br>
</form>