SpringMvc(二)
@RequestMapping注解
Spring通过@Controller注解找到相应的控制器类后,还需要知道控制器内部对每一个请求是如何处理的,这就需要使用org.springframework.web.bind.annotation.RequestMapping注解类型。RequestMapping注解类型用于映射一个请求或一个方法,其注解形式为@RequestMapping,
可以使用该注解标注在一个方法或一个类上。
- 标注在方法上
- 标注在类上
扩展:如果前端使用method=””,那么后台如图:
数据绑定
在执行程序时,SpringMVC会根据客户端请求参数的不同,将请求消息中的信息以一定的方式转换并绑定到控制器类的方法参数中。这种将请求消息数据与后台方法参数建立链接的过程就是SpringMVC中的数据绑定。
在数据绑定过程中,,SpringMVC框架会通过数据绑定组件(DataBinder)将请求参数串的内容进行类型转换,然后将转换后的值赋给控制器来中方法的形参,这样后台方法就可以正确绑定并获取客户端请求携带的参数了。
实例代码:
Controller代码:
@Controller
public class UserController {
@RequestMapping("/method")
public String method(HttpServletRequest request){
String id = request.getParameter("id");
System.out.println("id:"+id);
return "success";
}
@RequestMapping("/method2")
public String method2(Integer id){
System.out.println("id:"+id);
return "success";
}
@RequestMapping("/method3")
public String method3(@RequestParam(value="user_id")Integer id){
System.out.println("id:"+id);
return "success";
}
}
网页请求:
转存失败重新上传取消
转存失败重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
解决中文乱码问题:
一定要注意顺序:
<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>
<servlet>
<!-- 配置前端过滤器 servlet-name:这里的名字可以随意起 -->
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 初始化时加载配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-config.xml</param-value>
</init-param>
<!-- 表示在容器在启动时立即加载Servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 当前端向后台发送请求的时候 /:表示拦截所有的请求 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
类中类:
转存失败重新上传取消
转存失败重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
转存失败重新上传取消
Controller中的代码:
@Controller
public class OrdersController {
@RequestMapping("/tomethod")
public String toMethod(){
return "orders";
}
@RequestMapping("/frommethod")
public String fromMethod(Orders orders){
Integer ordersId = orders.getOrdersId();
User user = orders.getUser();
String username = user.getUsername();
System.out.println("ordersId:"+ordersId);
System.out.println("username:"+username);
return "success";
}
}
Orders页面:
<form action="${pageContext.request.contextPath}/frommethod" method="post">
orders:<input name="ordersId" type="text" /><br/>
user:<input name="user.username" type="text" /><br/>
<input type="submit" value="注册" />
</form>
自定义数据绑定:
时间类型转换使用Converter转换
首先编写时间转换类:
转存失败重新上传取消
转存失败重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
转存失败重新上传取消
在springmvc配置文件中进行配置:
转存失败重新上传取消
转存失败重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
转存失败重新上传取消
在Controller类中编写访问路径
转存失败重新上传取消
转存失败重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
转存失败重新上传取消
在浏览器的地址栏中填写访问数据
转存失败重新上传取消
转存失败重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
转存失败重新上传取消
使用Formatter转换:
转存失败重新上传取消
转存失败重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
转存失败重新上传取消
配置文件:
转存失败重新上传取消
转存失败重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
转存失败重新上传取消
测试同上
绑定数组:
转存失败重新上传取消
转存失败重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
转存失败重新上传取消
<form action="${pageContext.request.contextPath}/deleteUser" method="post">
<table border="1">
<tr>
<td>选择</td>
<td>账号</td>
</tr>
<tr>
<td><input name="ids" value="1" type="checkbox" /></td>
<td>赵云</td>
</tr>
<tr>
<td><input name="ids" value="2" type="checkbox" /></td>
<td>马超</td>
</tr>
<tr>
<td><input name="ids" value="3" type="checkbox" /></td>
<td>许褚</td>
</tr>
</table>
<input type="submit" value="提交" />
</form>
Controller中代码:
@RequestMapping("/deleteUser")
public String deleteUser(Integer[] ids){
if(ids != null){
for(Integer id:ids){
System.out.println("删除了id为"+id+"的用户!");
}
}else{
System.out.println("ids=null");
}
return "success";
}
绑定集合
表单信息:
<form action="${pageContext.request.contextPath}/editUsers" method="post">
<table border="1">
<tr>
<td>选择</td>
<td>账号</td>
</tr>
<tr>
<td><input name="users[0].id" value="1" type="checkbox" /></td>
<td><input name="users[0].username" value="赵云" type="checkbox" /></td>
</tr>
<tr>
<td><input name="users[1].id" value="2" type="checkbox" /></td>
<td><input name="users[1].username" value="马超" type="checkbox" /></td>
</tr>
</table>
<input type="submit" value="提交" />
</form>
Controller代码:
@RequestMapping("/toUserEdit")
public String toUserEdit(){
return "useredit";
}
@RequestMapping("/editUsers")
public String editUsers(UserVO userList){
// 将所有用户数据封装到集合中
List<User> list = userList.getUsers();
// 循环输出所有用户信息
for(User user:list){
// 如果接受的用户id不为空,则表示对该用户进行操作
if(user.getId() != null){
System.out.println("修改了id为"+user.getId()+"的用户名为"+user.getUsername());
}
}
return "success";
}
转存失败重新上传取消
转存失败重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
转存失败重新上传取消