Spring MVC

一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发

Model-View-controller,即模型-视图-控制三层结构,三层每层负责不同的功能,其中,model层用于封装简单的javaBean和复杂的javaBean,包括业务层,甚至dao层,只要是个javabean都属于model(java仅仅只是pojo对象,也可以是一个包含复杂逻辑的service),pojo对象的代码都是包含的,视图层主要是页面,用于返回给用户的,直观的一种可视化的界面,比如jsp,html,包扩c/s的等,而Controller主要到控制,并且和用户交流的作用,比如,如果你要登陆,那么控制层就会返回一个登陆的页面给你,当你提交页面后,控制层就会调用model的业务
逻辑方法来验证你的输入是否正确。这就是一个mvc简单的调用过程
Spring MVC - 图1

注解:

  1. @Controller 控制器
  1. @RequestMapper"user")可以定义一个以/user/路径
  2. public class HelloController {
  3. @RequestMapper"请求对应方法名"
  4. }

@RequestParam
value: 参数名字 请求中的参数名字
required :必须的,默认为true
defaultValue 默认值

  1. public String getId(Model model,@RequestParam("id") int ids) {
  2. }

转发和重定向

转发 return forward:
重定向: redirect:

配置web.xml

  1. <servlet>
  2. <servlet-name> SpringMvc</servlet-name>
  3. <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class>
  4. <init-param>
  5. <param-name>contextConfigLocation</param-name>
  6. <param-value>classpath:springmvc.xml</param-value>
  7. </init-param>
  8. </servlet>
  9. <servlet-mapping>
  10. <servlet-name>SpringMvc</servlet-name>
  11. <url-pattern>*.do</url-pattern>
  12. </servlet-mapping>

springmvc.xml文件
读取包

  1. <context:component-scan base-package="包名"/>

配置映射器

  1. <!-- 手动配置处理器映射器
  2. Spring3.1 后就废弃了DefaultAnnotationHandlerMapping的使用,推荐使用
  3. RequestMappingHandllerMapping
  4. -->
  5. <!-- <bean class = "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> </bean>
  6. 那么所对应的适配器也要使用

配置视图解析器

  1. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean> -->
  2. <!-- 视图解析器配置
  3. InternalResourceViewResolver默认使用
  4. z最终路径 前缀+视图+后缀
  5. -->
  6. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  7. <!-- 视图的前缀-->
  8. <property name="prefix" value="/WEB-INF/page/"></property>
  9. <!-- 视图的后缀-->
  10. <property name="suffix" value=".jsp"></property>
  11. </bean>

转换器

定义一个类继承接口Converter (需要转换的类型)
数据类型转换

  1. public class DateConverter implements Converter<String, Date> {
  2. /**比如,页面
  3. s:需要转换的数据类型
  4. T:需要转换的目标数据类型
  5. */
  6. @Override
  7. public Date convert(String str) {
  8. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  9. try {
  10. Date date = sdf.parse(str);
  11. return date;
  12. } catch (ParseException e) {
  13. // TODO Auto-generated catch block
  14. e.printStackTrace();
  15. }
  16. return null;
  17. }
  18. }

xml文件配置

  1. <mvc:annotation-driven conversion-service="conversionService"/>
  2. <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
  3. <property name="converters">
  4. <set>
  5. <bean class="com.zhiyou100.mvc.util.DateConverter"/>
  6. <bean class="com.zhiyou100.mvc.util.SplitString"/>
  7. </set>
  8. <!-- <set>
  9. <bean class="com.zhiyou100.mvc.util.SplitString"/>
  10. </set> -->
  11. </property>
  12. </bean>

拦截器

实现HandlerInterceptor 接口

  1. public class MyInterceptor implements HandlerInterceptor {
  2. /**
  3. * Handler执行完毕之后执行
  4. * 如果配置多个拦截器,那么会按照配置文件的配置顺序的逆序执行
  5. * 处理异常,记录日志等
  6. */
  7. @Override
  8. public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
  9. throws Exception {
  10. // TODO Auto-generated method stub
  11. System.out.println("这是方法执行完毕之后执行");
  12. }
  13. /**
  14. * Handler 方法体中业务代码执行完毕之后,返回ModelAndView之前
  15. * 如果配置多个拦截器,那么会按照配置文件的配置顺序的逆序执行
  16. * 清理页面已用参数
  17. */
  18. @Override
  19. public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
  20. throws Exception {
  21. // TODO Auto-generated method stub
  22. System.out.println("这是提交之前执行");
  23. }
  24. /**
  25. * Handler方法执行之前执行,按照配置文件的配置顺序依次执行
  26. * 返回true,表示放行 ,false 拦截
  27. * 登录拦截,权限认证
  28. */
  29. @Override
  30. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
  31. String path = request.getRequestURI();
  32. HttpSession session = request.getSession();
  33. if(session.getAttribute("USER_IN_SESSION")==null) {
  34. if(path.endsWith("login.do")||path.endsWith("inLogin.do")||path.endsWith("login.jsp")||path.endsWith("regist.do")||path.endsWith("re.do")||path.endsWith("regist.jsp")) {
  35. return true;
  36. }else {
  37. //return false;
  38. request.getRequestDispatcher("WEB-INF/page/login.jsp").forward(request, response);
  39. }
  40. }else{
  41. /*if(path.endsWith("login.do")||path.endsWith("inLogin.do")||path.endsWith("login.jsp")||path.endsWith("regist.do")||path.endsWith("re.do")||path.endsWith("regist.jsp")) {
  42. return true;
  43. }else {
  44. return false;
  45. }*/
  46. }
  47. //System.out.println("这是Handler之前执行");
  48. return true;
  49. }
  50. }

拦截器在xml中设置

exclude-mapping path=””

  1. <!-- 配置拦截器-->
  2. <mvc:interceptors>
  3. <mvc:interceptor>
  4. <!-- path:/**表示拦截所有的请求,包括二级以上目录,,/*拦截所有请求,不包括二级以上目录 -->
  5. <mvc:mapping path="/**"/>
  6. <!-- 表示配置那些请求不拦截 -->
  7. <mvc:exclude-mapping path="/user/*"/>
  8. <bean class="com.zhiyou.mv.controller.MyInterceptor"></bean>
  9. </mvc:interceptor>
  10. </mvc:interceptors>

异常处理

定义接口实现 接口HandlerExceptionResolver

  1. public class CustomeExceptionHandler implements HandlerExceptionResolver {
  2. @Override
  3. public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object arg2,
  4. Exception e) {
  5. e.printStackTrace();
  6. //如果你能够识别异常信息,那么就处理。不能显示未知错误
  7. String message = null;
  8. if(e instanceof CutomException ) {
  9. message = e.getMessage();
  10. }else {
  11. message="未知错误";
  12. }
  13. ModelAndView mav = new ModelAndView();
  14. mav.addObject("message",message);
  15. mav.setViewName("error");
  16. return mav;
  17. }
  18. }

xml配置

  1. <!--配置全局的异常处理bean -->
  2. <bean class="com.zhiyou.mv.controller.CustomeExceptionHandler"></bean>

事例 登录
throw new CutomException(“ “)
异常需要抛出 try catch 会出错

  1. @RequestMapping("login")
  2. public String login(Model model,String name ,String password,HttpSession session) throws Exception {
  3. User user = userService.login(name, password);
  4. if(user ==null) {
  5. throw new CutomException("登录失败");
  6. }else {
  7. session.setAttribute("USER_IN_SESSION", user);
  8. return "forward:list.do";
  9. }
  10. }

若有收获,就点个赞吧

0 人点赞

  • 书签
  • 添加书签 移除书签
  • JDBC问题
  • sql注入问题和PreparedStatement
  • Javaweb简介
  • HTML表单标签
  • javascript事件
  • Spring
  • Spring MVC
  • MyBatis
  • Json
  • SSM 整合
  • spring之Aop面向切面
暂无相关搜索结果!
    展开/收起文章目录

    深圳SEO优化公司湛江模板推广报价盐城百度网站优化公司松岗建设网站价格固原SEO按天收费价格无锡百度爱采购报价芜湖网站制作报价清远百姓网标王推广报价广东网站优化推广公司唐山网站建设设计多少钱郑州关键词按天计费多少钱南通seo网站优化价格定西网络推广报价自贡优秀网站设计金华设计公司网站推荐襄樊网络营销推荐南通设计公司网站推荐朝阳网站改版哪家好大芬建设网站多少钱襄阳推广网站公司武威百度网站优化排名报价中卫模板推广推荐眉山英文网站建设推荐宁波百度关键词包年推广三明网站排名优化推荐岳阳百搜标王成都百度标王公司娄底网站搭建价格忻州网站改版价格南宁百度网站优化排名公司绵阳如何制作网站公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化