微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringMVC入门篇

1 springMVC框架

在此感谢哔哩哔哩的秦疆老师,up主:遇见狂神说,视频地址:https://www.bilibili.com/video/BV1aE41167Tu ,于2020-10-30学习后用Typora0.9.98整理的观后感。

项目环境:IDEA

1.1 回顾MVC 和 Servlet

1.1.1 MVC

MVC是一种软件设计规范,MVC是一种架构模式,主要为了降低视图与业务层逻辑的耦合。

  • 模型层(Model):负责各个功能的实现;

  • 视图层(View):页面展示,用户交互;

  • 控制层(Controller):负责将视图与模型对应起来,处理请求;

1.1.2 Servlet

  1. 新建maven工程,引入pom依赖。右键Modules -> add framework Support -> Web Application,此时web文件夹图标的中心位置有绿点表示识别到了。

  2. 编写一个

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
    </dependency>
    
  3. 编写一个Servlet类,用来处理用户请求

    public class HelloServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws servletexception, IOException {
            //1. 获取参数
            String method = req.getParameter("method");
            req.getSession().setAttribute("message", "执行了"+method+"方法");
            //2. 调用业务层
            //3. 视图层转发或重定向
            req.getRequestdispatcher("/WEB-INF/servlet/test.jsp").forward(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws servletexception, IOException {
            super.doPost(req, resp);
        }
    }
    
  4. WEB-INF/web.xml 注册

    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>kuangshen.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
  5. 编写一个jsp页面:WEB-INF/servlet/web.xml

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    ${message}
    </body>
    </html>
    
  6. 执行:http://localhost:8080/hello?method=select

    MVC框架要做的事情:1.将url映射到java类java类方法;2.封装用户提交的数据;3.处理请求并响应;4.将响应的数据进行渲染;

    常见服务器端MVC框架有:struct,springMVC,ASP.NETMVC,ZendFramework,JSF;

    常见前端MVC框架:Vue,angularjs,react,backbone;

1.2 初识springMVC

springMVC是SpringFramework的一部分,是基于java实现的MVC轻量级web框架。

官方文档:https://docs.spring.io/spring-framework/docs/

1.2.2 第一个springMVC应用

  1. 新建module,添加web支持
  2. 导入springMVC依赖
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.9.RELEASE</version>
</dependency>
  1. 配置web.xml,注册dispatcherServlet
<!-- 配置dispatchServlet:springMVC的核心 springMVC中 /匹配所有请求(不会去匹配jsp), /*匹配所有请求(包括jsp页面) -->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.dispatcherServlet</servlet-class>
    <!-- dispatchservlet要绑定的spring配置文件 -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:/springmvc1.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup> <!-- 启动级别:1 -->
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern> <!-- 在springMVC中,/表示匹配所有请求(不会匹配JSP页面), /*表示匹配所有请求(包括JSP页面)-->
</servlet-mapping>


<!-- 配置springMVC的乱码过滤 -->
<filter>
    <filter-name>encoding</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>encoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  1. 编写springMVC的配置文件,resources目录下新建springmvc1.xml
  2. 添加处理器映射器
  3. 添加处理器适配器
  4. 添加视图解析器
<?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
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 处理器映射器 -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!-- 处理器适配器 -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
    <!-- 视图解析器:模板引擎诸如:Thymeleaf freemarker... -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/springmvc/" />  <!--前缀-->
        <property name="suffix" value=".jsp" /> <!--后缀-->
    </bean>

    <!--BeanNameUrlHandlerMapping该处理器要特殊处理-->
    <bean id="/hello1" class="kuangshen.springmvc.HelloController" />

</beans>
  1. 编写controller层代码,实现Controller接口或者使用注解,返回一个ModeAndView,封数据装视图
package kuangshen.springmvc;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse rsp) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        //业务代码
        String result = "业务返回结果:第一个springMVC";
        modelAndView.addobject("message", result);
        //视图跳转
        modelAndView.setViewName("test"); //前缀 + 视图名 + 后缀
        return modelAndView;
    }
}
  1. 将自己写的类交给springIOC容器,注册bean,如上springmvc配置文件增加
  2. 在/WEB-INF/springmvc/目录下新建test.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${message}
</body>
</html>
  1. 配置Tomcat,启动测试

    URL输入http://localhost:8080/hello,地址栏不变化但页面显示:业务返回结果:第一个springMVC

  2. 可能遇到问题:

    访问出现404,maven中jar包存在,未添加依赖(编译后WEB-INF/lib没有),需要到idea的artfacts栏output root手动添加lib目录并添加jar,属于idea的问题;

1.3 springMVC执行原理

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐