springMVC学习笔记

1、搭建开发环境
   a>、添加jar文件,在ioc所需jar包的基础上添加spring-web.jar,spring-webmvc.jar
   b>、在web.xml中配置前端控制器
      <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
    c>、准备一个配置文件,默认情况下,配置文件的名称为servletName-servlet.xml(example-servlet.xml),位置为WEB-INF
    <!-- 打开自动扫描 -->
   <context:component-scan base-package="com.sxt.springmvc.web.controller"/>

  <!-- 主要作用于@Controller,激活该模式,下面是一种简写形式,完全可以手动配置替代这种简写形式,它会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter,是spring
MVC为@Controllers分发请求所必须的 -->
  <mvc:annotation-driven/>
 
  <!-- jsp页面解析器,当Controller返回XXX字符串时,先通过拦截器,然后该类就会在/WEB-INF/jsp/目录下,查找XXX.jsp文件 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
  
d、开发控制器
@Controller
public class HelloController {

@RequestMapping("/hello")
public String hello(Model model,String username /*获取请求参数*/ ){

model.addAttribute("msg", "Hello " + username); //向模型中放入数据

return "world";
}

@RequestMapping("/hello2")
public ModelAndView hello2( @RequestParam(value="name",required=true)String username){
ModelAndView mav = new ModelAndView();

mav.addObject("msg", "@@ Hello " + username );
mav.setViewName("world");
return mav;
}
}


2、使用@RequestMapping将请求映射至控制器的一个方法来处理
    a>、请求路径:
b>、请求的方法
c>、请求参数
d>、请求头


3>、问题
   a>、如何将请求映射至控制器的一个方法处理
   b>、如何获取请求参数
   c>、如何将model数据带入jsp
   d>、如何生成响应(转发/重定向)
   e>、如何访问Servlet API
   f>、如何处理异常
      aa>、控制器级别
   @ExceptionHandler(RuntimeException.class)
public String handlerException(HttpServletRequest request,RuntimeException e) {
request.setAttribute("exception", e);
return "error";
}

  bb>、全局,在spring-mvc.xml中
     <bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
  
   g>、如何对请求参数进行校验
       添加bean-validator.jar至构建路径
   在需要验证的对象的属性上使用注解声明要执行的验证规则
   @NotEmpty(message="员工姓名不能为空!")
public String getName() {
return name;
}

@Range(min=0,max=10000,message="工资的范围必须在0~10000之间")
public double getSalary() {
return salary;
}
在处理方法中进行验证
@RequestMapping(value="/employee/add",method=RequestMethod.POST)
public String add(@Validated Employee emp,BindingResult br,Model model) {
if(br.hasErrors()) {  //验证失败
List<Dept> depts = deptService.findAllDepts();
model.addAttribute("depts", depts);  //校验失败后,错误消息及emp对象会以employee为key存储在model中
return "emp_add";
}

empService.saveEmployee(emp);
model.addAttribute("msg", "员工添加成功");
return "message";
}

在JSP页面中输出错误消息
  <sf:form method="post" modelAttribute="employee">
     <sf:errors  path="name"/>
<sf:errors  path="salary"/>
  </sf:form>
  
       日期类型如何转换
   /**
* 注册类型转换器
* @param dataBinder
*/
@InitBinder
public void initBinder(WebDataBinder dataBinder) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
CustomDateEditor  cde = new CustomDateEditor(sdf, true);
dataBinder.registerCustomEditor(Date.class, cde);
}
   h>、如何做国际化
   i>、springMVC与spring ioc的整合
   j>、restful(rest风格)url的使用      
       /employee/delete.do?id=7934
   /pets/show.do?owerid=3&petid=5
  
   /employee/7934                   GET : /employee/7934   DELETE: /employee/7934 , POST : /employee/7934 , PUT : /employee/7934
   /employee/7934/delete
   /employee/7934/edit
   /pets/owner/3/pet/5
       
   k>、json响应
       添加jackson相关库(jackson-annotations-2.2.0.jar,jackson-core-2.2.0.jar,jackson-databind-2.2.0.jar)至构建路径
   在需要转json的处理方法中直接返回要转为json的对象
   在方法上标注@ResponseBody注解
   @RequestMapping(value="/employee/json")
@ResponseBody
public List<Employee> edit() {
List<Employee> emps = empService.findAll();
return emps;
}
      
  
  
  
  
  
  

你可能感兴趣的:(springMVC)