有时候前端会传参数回来,比如id,name,password,可以实现按用户名查询用户信息等功能,servlet也需要将参数传回前端,下面学习一下在springmvc里面如何接收和传递这些参数
1、SpringMVC参数的传递
下面分別演示了:
- 没有参数传递
- 使用传统的request、response来接收和传递(就像之前学的servlet)
- 直接从前端发来的请求中获取参数,如www.baidu.com?id=1&name=PizAn
- 使用Model/ModelMap,代替ModelAndView
- 直接将参数包装成pojo对象传递
具体演示代码如下:
package cn.nupt.ssm.controller;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import cn.nupt.ssm.po.Item;
import cn.nupt.ssm.service.ItemService;
import cn.nupt.ssm.service.Impl.ItemServiceImpl;
@Controller
public class ItemControl {
@Autowired
private ItemService itemService;
/**
* 没有参数传递,中规中矩返回上面列表
* @author pingan
*
*/
@RequestMapping("item") // 用于绑定请求地址,也就是说你输入hello,就会到这个方法下面
public ModelAndView item01() {
ModelAndView mView = new ModelAndView();
List<Item> list = itemService.getItemList();
mView.addObject("itemList", list);
mView.setViewName("itemList");//转发到显示页面
return mView;
}
/**
* 使用默认的类接收和传递参数,就和servlet中request一样
* @author pingan
*
*/
@RequestMapping("item")
public ModelAndView item02(HttpServletRequest request,HttpServletResponse response,HttpSession session) {
ModelAndView mView = new ModelAndView();
//通过request获取前端传过来的id,可以实现通过id查询用户的功能
String id = request.getParameter("id");
Item item = itemService.getItemById(id);
mView.addObject("item", item);
return mView;
}
/**
* 接收前端请求中的参数
* @author pingan
* @RequestParam()当我们传入的参数如ids和前端返回的名字如id,不一致的时候使用
* value:传入的参数名 required:是否必填 defaultValue:默认值
* Integer ids:我们自己传入的参数
*/
@RequestMapping("item")
public ModelAndView item03(@RequestParam(value="id",required=true,defaultValue="1")Integer ids) {
ModelAndView mView = new ModelAndView();
//通过request获取前端传过来的id,可以实现通过id查询用户的功能
String id = request.getParameter("ids");
Item item = itemService.getItemById(ids);
mView.addObject("item", item);
return mView;
}
/**
* 使用Model/ModelMap,可以返回String,即要跳转的页面名,二者功能一样
* @author pingan
* model.addAttribute("item", item);就相当于mView.addObject("item", item);
* return "item":返回前端页面地址(这里已经设置了prefix和suffix)
*/
@RequestMapping("item")
public String item04(@RequestParam("id")Integer ids,Model model ) {
//通过request获取前端传过来的id,可以实现通过id查询用户的功能
String id = request.getParameter("ids");
Item item = itemServices.getItemById(ids);
model.addAttribute("item", item);
return "item";
}
/**
* 传递pojo对象
* @author pingan
* 其实很简单,将对象当作参数传递就行了,比如跟新用户的时候,将要更新的属性包装在pojo里传递到前端
*/
@RequestMapping("item") // 用于绑定请求地址,也就是说你输入hello,就会到这个方法下面
public String item05(Item item , Model model) {
itemService.update(item);
//返回商品模型
model.addAttribute("item", item);
//返回担任提示
model.addAttribute("msg", "修改商品成功");
//返回修改商品页面
return "item";
}
}
2、Controller层的属性抽取:
将属性放到.properties文件中,然后在核心配置文件中配置,在编程时可以通过@value注解引用这这些属性,进一步分离硬编码(这种思想还是很重要的)
- 第一步:将属性抽取出来,可以取名crm.properties
customer_industry_Type=001
customer_from_Type=002
customer_level_Type=006
- 第二步:在springmvc.xml中配置一下(就像之前在applicationContext.xml中配置数据库连接一样)
配置 读取properties文件 crm.properties ,将controller中用户的属性抽取出来
<context:property-placeholder location="classpath:crm.properties" />
- 第三步:然后就可以在controller的文件中引用这些属性了
@Value("${customer_industry_Type}")
private String customer_industry_Type;
@Value("${customer_from_Type}")
private String customer_from_Type;
@Value("${customer_level_Type}")
private String customer_level_Type;
3、乱码问题
- 提交时乱码:
get乱码:tomcat配置 URIEncoding=“utf-8”
post乱码:配置过滤器(web.xml)
在这里插入代码片<!-- 配置过滤器,解决post的乱码问题 -->
<filter>
<filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 响应时乱码:
response乱码:获取getWriter之前,添加如下代码:
response.setCharacterEncoding("utf-8")