Welcome to 发呆鱼.|

发呆鱼

园龄:3年4个月粉丝:1关注:0

springMVC 入门学习笔记

相关依赖

 <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.14</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>

1 回顾使用Servlet

  1. 创建一个servlet (继承HttpServlet)

    public class HelloServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          //获取前端参数
            String name=req.getParameter("name");
            if(name.equals("aaaa")){
                req.getSession().setAttribute("name","aaaa");
            }else {
                req.getSession().setAttribute("name","otherr");
            }
           //业务层调用
           //视图转发或者重定向
            req.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
  2. 创建一个jsp 页面。

  3. 在web.xml 中配置映射

     <servlet>
            <servlet-name>hello</servlet-name>
            <servlet-class>com.fadaiyu.serlvet.HelloServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    
  4. 配置tomcat

  5. 启动测试

2 第一个springMVC

2.1 通过接口实现

  1. DispatcherServlet其实就是个Servlet(它继承自HttpServlet基类),同样也需要在web应用的web.xml中注册DispatcherServle。

        <servlet>
            <servlet-name>example</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--引入配置文件-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc-servlet.xml</param-value>
            </init-param>
            <!--设置启动级别-->
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>example</servlet-name>
            <!--  / 是匹配所有请求  /* 是匹配所有jsp 页面-->
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
  2. springmvc 配置文件

    <!--处理器映射-->
    <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="InternalResourceView">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
    
    <bean id="/hello" class="com.fadaiyu.controller.HelloCon"/>
    
  3. 继承一个controller 接口

    public class HelloCon implements Controller {
    
        @Override
        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    
            //模型和视图
            ModelAndView view = new ModelAndView();
    
            //封装对象,放在modelandview 中
            view.addObject("msg","hellocc");
    
            // /WEB-INF/jsp/hello.jsp
            view.setViewName("hello");
    
            return view;
        }
    }
    

运行发现404 :在项目结构 ,工件中导入相关依赖

image-20220129111058868

  1. DispaterServlet 表示前端控制器,是整个springmvc 的控制中心,用户发出请求,DispaterServlet接收请求并拦截请求。

    #拦截该路径下的请求
    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
  2. HandlerMapping 为处理器映射,HandlerMapping 根据请求url查找handler

  3. HandlerExecution 表示具体的handler 其主要作用是根据url查找控制器,上面例子中url被查找控制器为hello

  4. HandlerExecution 将解析后的信息传递给DispaterServlet ,如解析控制器映射等。

  5. HandlerAdapter 表示处理器适配器,其按照特定的规则去执行Handler

  6. Handler 让具体的Controller执行

  7. Controller 将具体的执行信息返回给HandlerAdapter ,如ModelAndView

  8. HandlerAdapter 将视图逻辑名或模型传递给DispatcherServlet.

  9. DispatcherServlet 调用视图解析器ViewResolver 来解析HandlerAdapter 传递的逻辑视图名。

  10. 视图解析器将解析的逻辑视图名传给DispatcherServlet

  11. DispatcherServlet 根据视图解析器解析的视图结果调用具体的视图

  12. 最终视图呈现给用户。

2.2 通过注解

springmvc 配置文件

<?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:mcv="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--自动扫描包,让指定包下的注解生效 -->
    <context:component-scan base-package="com.fadaiyu.controller"/>

    <!--让spring mvc 不处理静态资源-->
    <mvc:default-servlet-handler/>

    <!--支持mvc 注解驱动
            在spring 中一般采用@RequesetMapping注解来完成映射关系
            要想@RequesetMapping 注解生效 必须向上下文中注册@DefaultAnnotationHandlerMapping 和一个 AnnotationMethodHandlerAdapter实例
            这两个实例分别在类级别和方法级别处理
            而annotation-driven配置帮助我们自动完成上面两个实例的注入-->
    <mcv:annotation-driven/>

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>
@Controller
//@RestController 如果是@RestController 就不会被视图解析器解析 返回的就是字符串。
@RequestMapping("/")
public class HelloCon {

    @RequestMapping("/hello")
    public String hello(Model model){

        //封装数据
        model.addAttribute("msg","hellooooo");
        //返回数据会被视图解析器处理
        return "hello";
        //  return "redirect:/index.jsp"; 重定向
    }
}

3 接收参数

@GetMapping("/test1")
public String test1(Model model,@RequestParam("name") String name){ //@RequestParam("name") 表示从前端接收,并与前端配对
    //接收参赛
    System.out.println(name);

    //将返回结果传递给前端
    model.addAttribute("msg","name");

    //视图跳转
    return "test";
}


/**
 *  如果传递的是一个user 对象,则会匹配user 中的属性,名字一样,则正确接收,否则接收不到。
 */
@RequestMapping("/test2")
public String test2(User user){

    System.out.println(user);
    return "test";
}

学习来自《狂神说java》

本文作者:发呆鱼

本文链接:https://www.cnblogs.com/dyiblog/articles/15927788.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   发呆鱼  阅读(23)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起