【Spring之轨迹,记一次蚂蚁金服Java研发岗的面试经历

<servlet-name>SpringMVC</servlet-name>

<url-pattern>/</url-pattern>



**③ 配置 SpringMVC-servlet.xml**



<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://www.springframework.org/schema/beans

    https://www.springframework.org/schema/beans/spring-beans.xsd">



<!-- 处理器映射器 -->

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>



<!-- 处理器适配器 -->

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>



<!-- 视图解析器 DispatcherServlet 给他的 ModelAndView -->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">

    <!-- 前缀 -->

    <property name="prefix" value="/WEB-INF/"/>

    <!-- 后缀 -->

    <property name="suffix" value=".html"/>

</bean>



<!-- Handler -->

<bean id="/myHtml" class="com.iceclean.controller.MyController"/>



**④ 直接使用**



public class MyController implements Controller {

@Override

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

    // ModelAndView 模型和视图

    ModelAndView modelAndView = new ModelAndView();



    // 封装对象,放在 ModelAndView 中

    modelAndView.addObject("message", "IceClean");

    // 封装要跳转的视图,放在 ModelAndView 中

    modelAndView.setViewName("myHtml");



    return modelAndView;

}

}




**⑤ 过程中可能出现的问题**  

(1) 由于 SpringMVC 默认支持 jsp,而屏蔽 html,所以会出现 jsp 界面可以打开而 html 页面为 404 的情况,这时可以在后面加上:



<servlet-name>default</servlet-name>

<url-pattern>*.html</url-pattern>



(2) 如果代码没有问题却出现了 404,考虑为 idea 没有帮我们自动导包,需要手动导包  

在 Artifacts 中选择 WEF-INF,新建一个 lib 文件夹,点击加号将所有需要的包放入 lib 中  

![在这里插入图片描述](https://img-blog.csdnimg.cn/f6ae2e5b93cf45e0b8f959eb51c4ff1f.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0ljZV9fQ2xlYW4=,size_16,color_FFFFFF,t_70)



* * *



[](https://gitee.com/vip204888/java-p7)2\. 执行流程

======================================================================



*   前端发出请求到 `DispatcherServlet` 请求转发器

*   请求转发器请求 `HandlerMapping` (处理器映射器)寻找 Handler(可以根据 xml 或者注解查找)

*   请求转发器调用 `HandlerAdapter` (处理器适配器)执行 Handler

*   Handler 执行完成后给处理器适配器返回 ModelAndView

*   处理器适配器向请求转发器返回 ModelAndView

*   请求转发器请求视图解析器进行视图解析(根据逻辑视图名解析成真正的视图:html 或 jsp)

*   视图解析器向请求转发器返回 View

*   请求转发器对 View 进行渲染,填充到 request 中,最后向用户返回响应结果



* * *



[](https://gitee.com/vip204888/java-p7)3\. 使用注解开发(推荐使用)

==============================================================================



① 导入依赖和 web.xml 完全一样



② SpringMVC-servlet.xml 配置为



<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xmlns:context="http://www.springframework.org/schema/context"

   xmlns:mvc="http://www.springframework.org/schema/mvc"

   xsi:schemaLocation="http://www.springframework.org/schema/beans

    https://www.springframework.org/schema/beans/spring-beans.xsd

    http://www.springframework.org/schema/context

    https://www.springframework.org/schema/context/spring-context.xsd

    http://www.springframework.org/schema/mvc

    https://www.springframework.org/schema/mvc/spring-mvc.xsd">



<!-- 使用注解开发 SpringMVC 的流程如下 -->



<!-- ① 自动扫描包,让指定包下的注解生效,由 IOC 容器统一管理 -->

<context:component-scan base-package="com.iceclean.controller"/>



<!-- ② 让 SpringMVC 不处理静态资源,如 .css .js .html 等 -->

<mvc:default-servlet-handler/>



<!-- ③ 支持 mvc 注解驱动 -->

<!-- 相当于自动完成 HandlerMapping 和 HandlerAdapter 的注入

     使得要用到的注解 @RequestMapping 生效 -->

<mvc:annotation-driven/>



<!-- 视图解析器 DispatcherServlet 给他的 ModelAndView -->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">

    <!-- 前缀 -->

    <property name="prefix" value="/WEB-INF/"/>

    <!-- 后缀 -->

    <property name="suffix" value=".html"/>

</bean>



③ 直接使用



@Controller

public class BaseController {

@RequestMapping("/hello2333")

public String hello() {

    // return 的东西会被视图解析器处理

    return "hello";

}

}




其中 @Controller 的作用和 @Component 的作用相同,代表该类是一个 bean  

前提是 Spring 的配置中有扫描到该类(一般为扫描该类所在的包)



再而,被 @Controller 注解的类中的所有方法,如果返回值是 String 且有具体的页面可以跳转,就会被视图解析器解析  

如果不想被视图解析器解析,可以在需要的方法前加上 @ResponseBody,变成普通的方法返回普通的字符串  

如果对一个类使用 @RestController,则该类的所有方法都不会被视图解析器解析



@RequestMapping() 的作用相当于起别名,在进行访问时需要填写该别名



* * *



[](https://gitee.com/vip204888/java-p7)4\. RestFul 风格

============================================================================



**① 基础使用**  

使用 {xxx} 代表 url 中该位置的值将被赋值到 xxx 变量中,如  

`xxxx/add/1/2` 那么 a=1, b=2



@GetMapping("/add/{a}/{b}")

public String hello(@PathVariable int a, @PathVariable int b){

// ...

return "hello";

}




**② 衍生用法**




### 最后

> 由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

![](https://img-blog.csdnimg.cn/img_convert/536670449d83818b4dd6a3499f338731.png)

**需要这份文档的朋友可以帮忙点个赞,点击下方神秘超链接,就可以免费获取到了,还有小编准备的一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》**

##### [资料领取链接:Java进阶学习路线图(Xmind)+《Java面试必备指南》](https://gitee.com/vip204888/java-p7)

    return "hello";

} 

② 衍生用法

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

[外链图片转存中…(img-QptgcRqV-1628389638135)]

需要这份文档的朋友可以帮忙点个赞,点击下方神秘超链接,就可以免费获取到了,还有小编准备的一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

资料领取链接:Java进阶学习路线图(Xmind)+《Java面试必备指南》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值