Java框架学习_SpringMVC(三)SpringMVC参数的传递、Controller层的属性抽取、乱码问题

有时候前端会传参数回来,比如id,name,password,可以实现按用户名查询用户信息等功能,servlet也需要将参数传回前端,下面学习一下在springmvc里面如何接收和传递这些参数


1、SpringMVC参数的传递

下面分別演示了:

  1. 没有参数传递
  2. 使用传统的request、response来接收和传递(就像之前学的servlet)
  3. 直接从前端发来的请求中获取参数,如www.baidu.com?id=1&name=PizAn
  4. 使用Model/ModelMap,代替ModelAndView
  5. 直接将参数包装成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注解引用这这些属性,进一步分离硬编码(这种思想还是很重要的)

  1. 第一步:将属性抽取出来,可以取名crm.properties
customer_industry_Type=001
customer_from_Type=002
customer_level_Type=006
  1. 第二步:在springmvc.xml中配置一下(就像之前在applicationContext.xml中配置数据库连接一样)
配置 读取properties文件 crm.properties ,将controller中用户的属性抽取出来
<context:property-placeholder location="classpath:crm.properties" />
  1. 第三步:然后就可以在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、乱码问题

  1. 提交时乱码:
    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>

  1. 响应时乱码:
response乱码:获取getWriter之前,添加如下代码:
	response.setCharacterEncoding("utf-8"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值