SpringMVC要点整理[0]

前端控制器

springmvc
org.springframework.web.servlet.DispatcherServlet

contextConfigLocation
classpath:applicationContext-mvc.xml/param-value

1

springmvc /

或者不指定配置文件位置
默认去找/WEN-INF/springmvc-servlet.xml
前端控制器名-servlet.xml

springmvc
org.springframework.web.servlet.DispatcherServlet
1

springmvc /

视图解析器



<!— 默认前端控制器拦截所有资源(jsp除外),所以js文件会404;
告诉SpringMVC,自己映射的请求酒自己处理,不能处理的请求交给tomcat处理 —>
mvc:default-servlet-handler/
<!—静态资源能访问,动态映射不行—>
<!—保证动态和静态都能访问—>
mvc:annotation-driven</mvc:annotation-driven>

@RequestMapping
如果标在类上是给类的方法设定一个base路径

@RequestMapping(value=“/hello”,method=requestMethod.POST, params={“username”})
Method 限定请求方式
Params 规定请求参数
params={“username”} 必须有username参数
params={“!username”} 必须没有username参数
params={“username=123”} 必须有username参数的值是123
params={“username!=123”,”pwd”, “!age”}
Headers 限定请求头
headers={“User-Agent=xxxxxxxxx”}
Consumes 规定请求头中的Content-Type
Produces 给响应头加上 Content-Type

模糊匹配
? 替代任意一个字符
*替代任意过个字符 和一层路径
**替代多层路径
模糊和精确同时匹配的情况 精确优先

@RequestMapping(“/antTest0?”)
@RequestMapping(“/antTest0*”)
@RequestMapping(“/a/*/antTest”)
@RequestMapping(“/a/**/antTest”)

@RequestMapping(“/user/{id}”)
public String pathVariableTest(@PathVariable(“id”)String id){
System.out.println(“路径上的占位符”+id)
}

获取请求信息
@RequestParam 获取请求参数
默认方式:直接传参 方法参数名和请求参数名一致
1)如果请求参数是一个POJO,将POJO的每一个属性,尝试从request参数中获取并封装
2)可以级联封装
@RequestParam(“user”) 指定参数名,默认请求必须有这个参数
@RequestParam(value=“user”,required=false,default=“没带参数”)

可以直接在参数上写原生API
HttpServletRequest
HttpServletResponse
HttpSeesion
Locale:国际化有关的区域信息对象
InputStream:
InputStream inputStream = request.getInputStream();
OutputStream:
OutputStram outputSteam = response.getOutputStream();
Reader:
BufferReader reader = request.getReader();
Writer:
PrintWriter writer = response.getWriter();

@RequestMapping(“/handle03”)
Public String handle03(HttpSession session,HttpServletRequest request){
request.setAttribute(“param”,”请求域添加参数”);
session.setAttribute(“param”,”Session域添加参数”);
return “success”;
}

@RequestHeader 获取请求头中某个key的值
@RequestHeader(value=“User-Agent”,required=false)

@CookieValue 获取某个cookie
以前的方式:
Cookies[] cookies = request.getCookies();
For(Cookie c:cookies){
}
现在:
@CookieValue(value=“JSEESIONID”,required=false)

请求数据有乱码的时候
请求乱码
GET请求:改server.xml
POST请求
在第一次获取请求参数之前设置
Request.setCharacterEncoding(“UTF-8”);
springMVC有filter,放在其他filter之前
web.xml

CharacterEncodingFilter
org.springframework.web.filter.CharaterEncodingFilter
<!—encoding:解决POST请求乱码>

encoding
UTF-8

<!—解决响应乱码>

forceEncoding
true

CharacterEncodingFilter </*

响应乱码
response.setContentType(“text/html;charset=utf-8”)

数据输出
SpringMVC除了在方法上传入原生request和session以外,其他将数据传回前端的方式
1)在方法处传入Map,Model(接口),ModelMap,放在请求域中
本质是BindingAwareModelMap在工作
@RequestMapping(“/handle04”)
Public String handle04(Map<String, Object > map){
map.put(“msg”,”你好”);
return “success”;
}

@RequestMapping(“/handle04”)
Public String handle04(Model model){
model.addAttribute(“msg”,”你好”);
return “success”;
}

@RequestMapping(“/handle04”)
Public String handle04(Modelmap modelMap){
modelMap.addAttribute(“msg”,”你好”);
return “success”;
}
2)方法返回值可以变成ModelAndView类型
//视图解析器会自动拼串
@RequestMapping(“/handle04”)
Public ModelAndView handle04(){
ModelAndView mv = new ModelAndView(“success”);
mv.addObject(“msg”,”你好”);
return mv;
}
3)Seesion域中临时保存数据
@SessionAttribute 只能标在类上
@SessionAttribute(value={“msg”,”haha”},type={String.class}) 给BindingAwareModelMap或者ModelAndView中保存得数据,同时给session中放一份
但是@SessionAttribute可能会发生异常,推荐使用原生API

@ModelAttribute
标在方法上,方法会先于目标方法运行
标在参数上 ,取出上面保存的数据
@ModelAttribute(“book”)Book book

SpringMVC视图解析
1,方法执行后的返回值会作为页面地址参考,转发或重定向到页面
2,视图解析器可能会进行页面地址拼串

1,任何方法的返回值,最终都会被包装成ModelAndView对象

jstlView 快速国际化
1)让Spring管理国际化资源文件
<bean id=“messageSource”class=“org.springframework.context.support.ResourceBundle”>


2)页面取值
不能用forward,redirect

<!— 发一个请求(“toLoginPage”)来到WEB-INF下的login页面—>
<mvc:view-controller path=“/toLoginPage” view-name=“forward:/login.jsp”/>

<!— 开启注解驱动模式—>
mvc:annotation-driven</mvc:annotation-driven>

自定义视图和视图解析器
1)编写自定义视图解析器和视图实现类,实现Ordered接口
2)视图解析器必须放在ioc容器中


表单标签
<%@taglib prefix=“form” uri=“http://www.springframework.org/tags/form” %>
<!—path就是原来input的name项,自动回显隐含模型中这个属性的值
1)SpringMVC认为,表单数据的每一箱都是要回显的,path指定的是一个属性,这个属性从隐含模型(请求域中取出的某个对象中的属性)
Path 指定的每一个属性,请求域中必须有一个对象,拥有这个属性,这个对象就是请求域中的command
2)可以告诉SpringMVC不要去取command的值了,用modelAttribute指定的
—>
<form:form action=“” modelAttribute=“employee”>
Lastname:<form:input path=“lastname” />
email:<form:input path=“email” />
gender:
男<form:radiobutton path=“gender” value=“1” />
女<form:radiobutton path=“gender” value=“0” />
Dept:
<form:select path=“department.id” items=“${septs }” itemLabel=“departmentName” itemValue=“id”></form:select>

</form:form>

数据转换
SpringMVC在封装自定义类型对象的时候,java bean要和页面提交的数据一一绑定,页面提交的都是字符串
1)数据绑定期间的数据类型转换
2)数据绑定期间的数据格式化
3)数据校验

自定义类型转换器
1)实现Converter接口
2)Converter是ConversionService中的组件,自定义转换器要放进ConversionService,将WebDataBinder中的ConversionService设置成加了自定义转换器的ConversionService







<!— 使用我们自己配置的类型转换组件—>
<mvc:annotation-driven conversion-service=“conversionService”></mvc:annotation-driven>

数据格式化
页面提交的数据格式不正确->400
@NumberFormat(pattern=“#,###.##”)
@DataTimeFormat(pattern=“yyyy-mm-dd”)

后端数据校验
1)导入校验框架的jar包
2)给javaBean属性添上校验注解
@NotEmpty
@Length
@Email
3)在SpringMVC封装对象的时候,告诉SpringMVC需要校验
Public String addEmp(@Valie Employee employee)
4)如何知道校验结果
给需要校验的javaBean后面紧跟一个BindingResult,封装了校验结果
SpringMVC需要校验
Public String addEmp(@Valie Employee employee,BindingResult result)
Boolean hasErrors = result.hasErrors();
if(hasErrors){
List errors = result.getFieldErrors();
}
5)根据不同的校验结果继续处理
Lastname:<form:input path=“lastname” /><form:errors path=“lastName”/>
email:<form:input path=“email” /><form:errors path=“email”/>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值