- 检查不细心错误:
1.database.properties 查看数据库名称是否对应
2.applicationContext.xml 查看mapper.xml映射文件
3.PersonMapper.xml 查看映射namespace="cn.bdqn.dxp.mapper.PersonMapper" 对应mapper层
4.sellect 查看resultType="cn.bdqn.dxp.entity.Person" 对应实体
5.insert delete update 查看parameterType="cn.bdqn.dxp.entity.Person" 对应实体
- 一.基本类型,包装类型的绑定
- A.基本数据类型 (Int)不可以为null
- B.包装类型 (Integer)可以为空
- 二.绝对路径
${pageContext.request.contextPath}用于解决使用相对路径时出现的问题,它的作用是取出所部署项目的名字。
绝对路径:<img src="/项目名称/images/front/xnw3.jpg"/>
相对路径:<img src="images/front/xnw3.jpg"/>
- 三.mvc配置映射路径问题
指定springmvc配置文件的路径,如果要省略,必须放到 默认路径:
/WEB_INF/springDispatcherServlet-servlet.xml
/WEB_INF/servletname的值-servlet.xml
映射是 去匹配@RequestMapping注解,可以和方法名,类名不一致
通过method指定 请求方式(get post delete put)查 增 删 改
@RequestMapping(value = "/welcome",method = RequestMethod.POST)//映射,默认请求是get
- 四.参数使用
params = {"name2=zs","age!=23","!=height"}
name2:必须有name="name2"参数
age!=23:
a.如果有age则age的值不能是23,
b.!=23不传参数age可以直接跳转
height: 不能有height否则报错
- ant风格
<!--ant风格 ,* 代表任意目录-->
<!--ant风格, ?代表单个字符-->
<a href="/welcome3/asdasasdasd/test">springmvc /welcome3/**/test</a>
<a href="/welcome4/a1c/test">springmvc /welcome4/a?c/test</a>
- REST风格:软件编程风格
Springmvc: GET POST DELETE PUT
查 增 删 改
普通浏览器 只支持get post方式;其他请求方式 如delete put请求是通过(过滤器)加入的
- HiddenHttpMenthodFilter
请求方式之前是post,get不用管
过滤的条件:
1.type="hidden"隐藏域
2. name="_method"
满足这2个条件,进行拦截
3. 如果value="delete或put"
请求变成delete或put
<input type="hidden" name="_menthod" value="delete或put"/>
- 1.springmvc实现过滤器的支持
<!--过滤器:给普通浏览器增加put|delete请求方式-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<!--mvc为/,过滤器为/*-->
<url-pattern>/*</url-pattern>
</filter-mapping>
- 2.表单
<!--过滤器,删,必须加隐藏域-->
<form action="/testRest/1234" method="post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="删">
</form>
a.必须是post方式
b.通过隐藏域 的value值 设置实际的请求方式 DELETE或PUT
c.控制器
- 通过@PathVariable获取动态参数
@RequestMapping(value = "/testRest/{id}", method = RequestMethod.POST)
public String testPost(@PathVariable("id") Integer id) {
System.out.println("post:增" + id);
//Service层实现 真正的增
return "/view/success";//默认使用的是转发,不带数据,速度比较快
}
- 3.通过 RequestMethod.DELETE 匹配具体请求方式
当映射名相同时@RequestMapping(value = "/testRest"),可以通过method指定不同的请求。
过滤器中 处理put或delete请求的部分源码:
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
HttpServletRequest requestToUse = request;
if ("POST".equals(request.getMethod()) && request.getAttribute("javax.servlet.error.exception") == null) {
String paramValue = request.getParameter(this.methodParam);
if (StringUtils.hasLength(paramValue)) {
requestToUse = new HiddenHttpMethodFilter.HttpMethodRequestWrapper(request, paramValue);
}
}
filterChain.doFilter((ServletRequest)requestToUse, response);
}
原始请求:request,改请求默认只支持get post header
如果是“POST” 并且有隐藏域 <input type="hidden" name="_method" value="DELETE">
过滤器 将原始的请求 request加入新的方式,并将原始请求 转为requestToUse请求
最会将requestToUse 放入 请求链中, 后续再使用request时 实际就使用改造后的requestToUse
- @RequestParam传参数
(@RequestParam("uname") String name,@RequestParam(value = "uage", required = false, defaultValue = "20") Integer age)
@RequestParam("uname"):接收前台传递的值,等价于request.getParmeter(""uname)
required=false:该属性 不是必须的。
defultValue=“23”:默 认值是23,这里注意值必须加“”(双引号)
- 获取请求头信息 @RequestHeader
* 拿到请求头信息,通过@RequestHeader("Accept-Language") String al
* Accept-Encoding 请求头
* 拿到 zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
- @CookieValue
(前置知识:服务器在接收服务端第一次请求时,会给客户端分配一个session(该session包含一个sesessionId)),并且服务端会在第一次响应客户端时,将该sessionId赋值给 JSESSIONID 并传递给客户端的cookie中)
1.session(sessionId)→Cookie(JSESSIONID)
2.最后Cookie(JSESSIONID)放在客户端,
- 总结:
springMVC处理各种参数的流程/逻辑:
请求:前端发送请求a->@RequestMapping("a")
处理请求中的参数xyz:
@RequestMapping(“a”)
public string aa(@Xxx注解(“args”)args)
{
}
使用(实体类Student)对象接收请求参数
SpringMVC中使用原生态Servlet API :HttpServletRequest:直接将 servlet-api 中的类、接口等写在SrpingMVC的接口中即可。
@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request) {
request.getParameter("uname");
System.out.println(request);
return "/view/success";
}