SpringMVC

 Springmvc是什么:

Springmvc是spring框架的后续产品,用在基于MVC的表现层开发,类似于struts2框架。
Spring全家桶
SSM+SpringBoot+IDEA+Git+SpringCloud+Redis+Vue
 
Springmvc依赖于Core(IOC),Springmvc需要导入Core包和Springmvc特有的包。
如果使用Spring的DAO、ORM不但要导入这两个包,好如要导入AOP。
Spring全家桶 


Demo:

1、导入Springmvc相关的jar包。
 
2、在/WEB-INF/web.xml文件中:
<!-- 配置DispatcherServlet(前端控制器) -->
  < servlet >
    < servlet-name > springmvc </ servlet-name >
    < servlet-class >org.springframework.web.servlet.DispatcherServlet </ servlet-class >
    < init-param >
      < param-name >contextConfigLocation </ param-name >
      <!-- classpath :代表就是 src 这个路径 -->
      < param-value >classpath:springmvc.xml </ param-value >
    </ init-param >
  </ servlet >
  < servlet-mapping >
    < servlet-name > springmvc </ servlet-name >
    <!-- /student.action   /user.action   
     所有以action结尾的请求都交给DispatcherServlet来处理
    -->
    < url-pattern >*.action </ url-pattern >
  </ servlet-mapping >
3、创建student_insert.jsp和student_info.jsp:
< form action= "${pageContext.request.contextPath} /student/insert.action" method= "post" >
   姓名: < input type= "text" name= "name" />< br />
   年龄: < input type= "text" name= "age" />< br />
   性别: < input type= "text" name= "gender" />< br />
    < input type= "submit" value= "提交" />
</ form >
student_info.jsp
< body >
   student_info.jsp < br />
   ${student}
</ body >
4、创建StudentController.java控制器
@Controller
// 请求映射,怎么样找到这些请求的路径 /student/insert.action
@RequestMapping(value = "/student")
public class StudentController {
    @RequestMapping(value = "/insert1")
    public void insert1(String name, Integer age, String gender) {
     System. out.println( "StudentController.insert()");
     System. out.println( "name: " + name);
     System. out.println( "age: " + age);
     System. out.println( "gender: " + gender);
   }
   
    @RequestMapping(value = "/insert")
    public ModelAndView insert(Student student) {
     System. out.println( "StudentController.insert()");
     System. out.println( student);
     
      // Model:数据     View:界面
     ModelAndView modelAndView = new ModelAndView();
      // request.setAttribute("student", student);
      modelAndView.addObject( "student", student);
      // request.getRequestDispatcher("/student_info.jsp").forward(request,response);
      modelAndView.setViewName( "/student_info.jsp");
      return modelAndView ;
   }
}
5、SpringMVC的核心配置文件

ModelAndView和Model:

ModelAndView:即放数据,也放转发的页面
Model:只放数据,以方法返回值形式设置转发的页面
@RequestMapping( "/insert2")
public ModelAndView insert2(Student student) {
   System. out.println( "StudentController.insert2()");
   System. out.println( student);
    // req.setAttritbu("student", student);
    // req.getRequestDispatcher("/student_info.jsp"). forword ( req , resp );
   ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject( "student", student);
    modelAndView.setViewName( "/student_info.jsp");
    return modelAndView;
}
@RequestMapping( "/insert3")
public String insert3(Student student, Model model) {
   System.out.println( "StudentController.insert3()");
   System.out.println(student);
    // req.setAttritbu("student", student);
   model.addAttribute( "student", student);
    // req.getRequestDispatcher("/student_info.jsp").forword(req, resp);
    return "/student_info.jsp";
}

可以限定某个业务控制方法,只允许GET或者POST方式请求访问


在业务控制方法中可以写入request、response等传统web参数:

@RequestMapping(value = "/insert", method = RequestMethod. POST)
public void insert(HttpServletRequest request, HttpServletResponse response, HttpSession session)
      throws ServletException, IOException {
   System. out.println( "StudentController.insert()");
   String name = request.getParameter( "name");
   String age = request.getParameter( "age");
   String gender = request.getParameter( "gender");
   Student student = new Student( name, Integer. parseInt( age), gender);
    request.setAttribute( "student", student);
    request.getRequestDispatcher( "/student_info.jsp").forward( request, response);
}

在业务逻辑中收集数组

 

 

< form action= "${pageContext.request.contextPath} /student/deleteAll.action" >
     < table border= "1" >
         < tr >
            < th >编号 </ th >
            < th >姓名 </ th >
         </ tr >
         < tr >
            < td >< input type= "checkbox" name = "ids" value= "1" /></ td >
            < td >张三 </ td >
         </ tr >
         < tr >
            < td >< input type= "checkbox" name = "ids" value= "2" /></ td >
            < td >李四 </ td >
         </ tr >
         < tr >
            < td >< input type= "checkbox" name = "ids" value= "3" /></ td >
            < td >王五 </ td >
         </ tr >
         < tr >
            < td >< input type= "checkbox" name = "ids" value= "4" /></ td >
            < td >赵六 </ td >
         </ tr >
         < tr >
            < td colspan= "2" >< input type= "submit" value= "提交" /></ td >
         </ tr >
     </ table >
</ form >
Request URL:http://localhost:8080/SpringMVC/student/deleteAll.action? ids=1&ids=2&ids=4
 

乱码问题

在传统JSP+Servlet中我们自己写Filter来处理乱码问题,使用SpringMVC他帮我们写了一个处理乱码问题的Filter,我们只需要在web.xml中配置这个Filter就可以了。
在web.xml中添加
<!-- 解决POST乱码问题 -->
  < filter >
      < filter-name >characterEncoding </ filter-name >
    < filter-class >org.springframework.web.filter.CharacterEncodingFilter </ filter-class >   
    < init-param >
         < param-name >encoding </ param-name >
         < param-value >UTF-8 </ param-value >
    </ init-param >
  </ filter >
  < filter-mapping >
      < filter-name >characterEncoding </ filter-name >
     < url-pattern >/* </ url-pattern >
  </ filter-mapping >

转发和重定向

// /SpringMVC/student/deleteById.action?id=3
@RequestMapping( "/deleteById")
public String deleteById(Integer id) {
   System. out.println( "StudentController.deleteById()");
   System. out.println( "id: " + id);
   
    // response.sendRedirect("/JavaSpringMVC/student/selectAll.action");
    return "redirect:/student/selectAll.action";
}

JSON数据封装:

1、加入Jackson相关jar包
2、在返回方法的时候加上@ResponseBody
@RequestMapping( "/selectById")
@ResponseBody
public Student selectById(Integer id){}
@ RequestMapping( "/select")
@ResponseBody
public List<Student> select(){}


@RequestParam注解

我们一般使用的参数绑定都有遵循的规则:方法参数名要与传递过来的name属性名相同。
在默认的情况下,只有名字相同,SpringMVC才会帮我们进行参数绑定…
如果我们使用@RequestParam注解的话,我们就可以使方法参数名与传递过来的name属性名不同…
该注解有三个变量
value【指定name属性的名称是什么】 
/SpringMVC/student/selectByPage.action? pageNo=3&pageSize=34
public void selectByPage( @RequestParam (value = " page " , defaultValue = "1" ) Integer pageNo , Integer pageSize )
required 代表这个参数必须要传递过来,原来不传默认是null,加了这个required 后不传就会报错
defaultvalue设置默认值
 
 
/SpringMVC/student/deleteById1/12.action
@PathVariable
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。
@RequestMapping(value = "/deleteById/{id}", method = RequestMethod. GET)
public void deleteById(  @PathVariable( "id") Long id) {
    System. out.println( id);
}


视图解析器:

<!-- 视图解析器
1、如果Controller中书写的是视图的逻辑名,这个视图解析器必须要配置。
前缀+视图逻辑名+后缀=真实路径
/ jsp / + student_insert + . jsp
2、如果视图解析器书写的是视图的真实路径,那么这个视图解析器可以不配置
 -->
< bean class= "org.springframework.web.servlet.view.InternalResourceViewResolver" >
    <!-- 路径前缀 -->
    < property name= "prefix" value= "/jsp/" />
    <!-- 路径后缀 -->
    < property name= "suffix" value= ".jsp" ></ property >
</ bean >


拦截器:

Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行 预处理和后处理

常见应用场景

1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计等。 
2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;
3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间
…………本质也是AOP(面向切面编程),也就是说符合横切关注点的所有功能都可以放入拦截器实现。
 
springmvc.xml:
<!-- 配置拦截器 -->
< mvc:interceptors >
    < mvc:interceptor >
      < mvc:mapping path= "/**" />
      < bean class= "com.situ.mvc.interceptor.MyInterceptor1" />
    </ mvc:interceptor >
    < mvc:interceptor >
      < mvc:mapping path= "/**" />
      < bean class= "com.situ.mvc.interceptor.MyInterceptor2" />
    </ mvc:interceptor >
</ mvc:interceptors >
MyInterceptor1.preHandle()
StudentController.selectAll()
MyInterceptor1.postHandle()
MyInterceptor1.afterCompletion()
MyInterceptor1.preHandle()
MyInterceptor2.preHandle()
StudentController.selectAll()
MyInterceptor2.postHandle()
MyInterceptor1.postHandle()
MyInterceptor1.afterCompletion()
MyInterceptor1.afterCompletion()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值