SpringMVC框架部分
#知识回顾
问题一:传参出现问题
SpringMVC中的参数传递-@RequestParam
- 需求: 如果遇到提交的参数名称和方法中参数名称不一致时,则建议使用注解获取数据.
- 注解的属性
- value/name
- required 该参数必须传递 true false
- defaultValue 添加默认值
/*
* http://localhost:8080/springmvc/user/findUser?id=100&name=tomcat
* 下述代码解释:
* SringMVC注解写法:@RequestParam(value = "id",required = true) int * userId:
* 常规代码接收参数:
* int id = Integer.parseInt(request.getParameter("id"));
* int userId = id;
*/
@RequestMapping("/findUser")
public ModelAndView findUserParam(
@RequestParam(value = "id",required = true) int userId,
@RequestParam(value = "name",required = false,defaultValue="admin123") String username){
System.out.println("获取用户提交的数据:"+userId+":"+username);
return new ModelAndView("index");
}
问题二,参数传值-RestFul
SpringMVC参数传值-RestFul结构
-
说明:
- 查询: http://localhost:8080/springmvc/getUser?id=100&name=tomcat&age=18&sex=女
- 目的: 实现数据的传递 同时减少代码
- 页面参数的写法:
- 不写请求的参数 只写参数的值
- 为了保证数据顺序有效 则使用 / 分割
- 当参数的位置确定之后 不能随意修改
GET类型http://localhost:8080/springmvc/user/100/tomcat/18/女
- 后端参数接收
- @PathVariable 作用: 接收url地址中的参数
@GetMapping("/resultFul/{userId}/{name}/{age}/{sex}") public ModelAndView resultFul( @PathVariable("userId") int id, @PathVariable String name, @PathVariable int age, @PathVariable String sex) throws Exception { System.out.println("参数:"+name+":"+sex); return new ModelAndView("index"); }
-
注意事项: 如果请求的参数较多 则不建议使用restFul结构.
-
代码优化
- 如果提交的参数与对象中的属性名称一致,则可以利用对象接收参数
@GetMapping("/resultFul/{userId}/{name}/{age}/{sex}") public ModelAndView resultFul2(User user) throws Exception { System.out.println(user); return new ModelAndView("index"); }
总结:
- 使用restFul的风格参数不会随请求方式的变化而改变
- 利用RestFul的风格 可以屏蔽关键字 降低对外暴漏的概率
- 将具体的参数拼接到URL中 节省了字节的传递.
- 比较直观不容易被爬虫捕获.
项目
# 问题描述:创建对象为null值,再为对象赋null值(严重错误)
-
此处问题严重,以后特别注意
@Override
public void publish(Long id, Integer status) {
House house = new House();
/*id = house.getId();
house.setId(id);*/
/**
* 上述代码严重错误,以后特别注意:
* 注意:创建house对象后,所有值都为null,
* 不能在从house对象中在拿出来一个null值,然后再给id赋个null值。此问题特别注意
*
* 应将创过来的值通过setId方法给id赋值
*/
house.setId(id);
house.setStatus(status);
houseDao.publish(house);
}
# 写配置类(Spring Security集成与入门)
-
问题1
问题位置:shf(二手房管理项目当中,项目的认证与登录验证)
在配置Spring Security中,使用java类配置一定要让java配置类也需要被扫描到
配置类文件位置:shf-parent\web\web-admin\src\main\java\com\atguigu\config\WebSecurityConfig.java
错误示例:自己写的配置类没有被springmvc配置文件扫描到
<!--包扫描--> <context:component-scan base-package="com.atguigu.controller" />
正确写法:
<!--一定要扫描到java配置类,否则不生效--> <!--包扫描--> <context:component-scan base-package="com.atguigu" />
虚拟机、linux等
VMware中有网络,但虚拟机无法ping到外网。(示例:ping百度网址)
注意:这四个服务是否开启