前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第一个MVC程序

第一个MVC程序

原创
作者头像
后端码匠
修改2021-08-18 14:24:04
3590
修改2021-08-18 14:24:04
举报
文章被收录于专栏:后端码匠

配置版

  • 新建一个Moudle , springmvc-02-hello , 添加web的支持!
  • 确定导入了SpringMVC 的依赖!
  • 配置web.xml , 注册DispatcherServlet
代码语言:txt
复制
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"

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

         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app\_4\_0.xsd"

         version="4.0">

 <!--1.注册DispatcherServlet-->

 <servlet>

 <servlet-name>springmvc</servlet-name>

 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

 <!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->

 <init-param>

 <param-name>contextConfigLocation</param-name>

 <param-value>classpath:springmvc-servlet.xml</param-value>

 </init-param>

 <!--启动级别-1-->

 <load-on-startup>1</load-on-startup>

 </servlet>

 <!--/ 匹配所有的请求;(不包括.jsp)-->

 <!--/\* 匹配所有的请求;(包括.jsp)-->

 <servlet-mapping>

 <servlet-name>springmvc</servlet-name>

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

 </servlet-mapping>

</web-app>
  • 编写SpringMVC 的 配置文件!名称:springmvc-servlet.xml : servletname-servlet.xml

说明,这里的名称要求是按照官方来的

代码语言:txt
复制
<?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"/>

 <!--添加 视图解析器-->

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

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

 <!--前缀-->

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

 <!--后缀-->

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

 </bean>

 <!--Handler-->

 <bean id="/hello" class="cn.com.codingce.controller.HelloController"/>

</beans>
  • 添加 处理映射器
代码语言:txt
复制
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
  • 添加 处理器适配器
代码语言:txt
复制
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
  • 添加 视图解析器
代码语言:txt
复制
<!--视图解析器:DispatcherServlet给他的ModelAndView-->

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

 <!--前缀-->

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

 <!--后缀-->

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

</bean>
  • 编写我们要操作业务Controller ,要么实现Controller接口,要么增加注解;需要返回一个ModelAndView,装数据,封视图;
代码语言:txt
复制
package cn.com.codingce.controller;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

//注意:这里我们先导入Controller接口

//编写我们要操作业务Controller ,要么实现Controller接口,要么增加注解;需要返回一个ModelAndView,装数据,封视图;

public class HelloController implements Controller {

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

 //ModelAndView 模型和视图

 ModelAndView mv = new ModelAndView();

 //封装对象,放在ModelAndView中。Model

 mv.addObject("msg","HelloSpringMVC!");

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

 mv.setViewName("hello"); //类似于项目一: /WEB-INF/jsp/hello.jsp

 return mv;

    }

}
  • 将自己的类交给SpringIOC容器,注册bean
代码语言:txt
复制
<!--Handler-->

<bean id="/hello" class="com.kuang.controller.HelloController"/>
  • 写要跳转的jsp页面,显示ModelandView存放的数据,以及我们的正常页面;
代码语言:txt
复制
<%--

 Created by IntelliJ IDEA.

  User: xzMa

  Date: 2020/8/2

  Time: 11:34

 To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

 <title>Title</title>

</head>

<body>

${msg}

</body>

</html>

配置Tomcat 启动测试!

mark
mark

## 可能遇到的问题:访问出现404,排查步骤:

  • 查看控制台输出,看一下是不是缺少了什么jar包。
  • 如果jar包存在,显示无法输出,就在IDEA的项目发布中,添加lib依赖!
mark
mark
  • 重启Tomcat 即可解决!
mark
mark

# 注解版

  • 新建一个Moudle,springmvc-03-hello-annotation 。添加web支持!
  • 由于Maven可能存在资源过滤的问题,我们将配置完善 任何maven项目都建议在pom.xml中加上以下资源过滤配置
代码语言:txt
复制
<build>

 <resources>

 <resource>

 <directory>src/main/java</directory>

 <includes>

 <include>\*\*/\*.properties</include>

 <include>\*\*/\*.xml</include>

 </includes>

 <filtering>false</filtering>

 </resource>

 <resource>

 <directory>src/main/resources</directory>

 <includes>

 <include>\*\*/\*.properties</include>

 <include>\*\*/\*.xml</include>

 </includes>

 <filtering>false</filtering>

 </resource>

 </resources>

</build>
  • 在pom.xml文件引入相关的依赖:主要有Spring框架核心库、Spring MVC、servlet , JSTL等。我们在父依赖中已经引入了!
  • 配置web.xml
代码语言:txt
复制
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"

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

        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app\_4\_0.xsd"

        version="4.0">

 <!--1.注册servlet-->

 <servlet>

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

 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

 <!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->

 <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>

 <!--所有请求都会被springmvc拦截 -->

 <servlet-mapping>

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

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

 </servlet-mapping>

</web-app>

/ 和 /* 的区别:< url-pattern > / </ url-pattern > 不会匹配到.jsp, 只针对我们编写的请求;即:.jsp 不会进入spring的 DispatcherServlet类 。< url-pattern > /* </ url-pattern > 会匹配 *.jsp,会出现返回 jsp视图 时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。

代码语言:txt
复制
- 注意web.xml版本问题,要最新版!
代码语言:txt
复制
- 注册DispatcherServlet
代码语言:txt
复制
- 关联SpringMVC的配置文件
代码语言:txt
复制
- 启动级别为1
代码语言:txt
复制
- 映射路径为 / 【不要用/\*,会404】
  • Controller
代码语言:txt
复制
package cn.com.codingce.controller;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

@Controller

@RequestMapping("/hello")

public class HelloController{

    @RequestMapping("/h1")

 public String hello(Model mv) {

 //封装数据

 mv.addAttribute("msg", "HelloAnnotation");

 return "hello"; //会被视图解析器处理

    }

}
  • @Controller是为了让Spring IOC容器初始化时自动扫描到;
  • @RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/HelloController/hello;
  • 方法中声明Model类型的参数是为了把Action中的数据带到视图中;
  • 方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB-INF/jsp/hello.jsp。
  • 创建视图层

在WEB-INF/ jsp目录中创建hello.jsp , 视图可以直接取出并展示从Controller带回的信息;

可以通过EL表示取出Model中存放的值,或者对象;

代码语言:txt
复制
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

 <title>SpringMVC</title>

</head>

<body>

${msg}

</body>

</html>
  • 配置Tomcat运行

配置Tomcat , 开启服务器 , 访问 对应的请求路径!

mark
mark

## 小结

实现步骤其实非常的简单:

  • 新建一个web项目
  • 导入相关jar包
  • 编写web.xml , 注册DispatcherServlet
  • 编写springmvc配置文件
  • 接下来就是去创建对应的控制类 , controller
  • 最后完善前端视图和controller之间的对应
  • 测试运行调试.

**使用springMVC必须配置的三大件:**

**处理器映射器、处理器适配器、视图解析器**

**通常,我们只需要手动配置视图解析器,而处理器映射器和处理器适配器只需要开启注解驱动即可,而省去了大段的xml配置**

>文章已上传gitee https://gitee.com/codingce/hexo-blog

>项目地址: https://github.com/xzMhehe/codingce-java

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置版
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档