携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情
哈喽,大家好!我是Why,一名在读学生,目前刚刚开始进入自己的编程学习生涯。虽然学习起步较晚,但我坚信做了才有0或1的可能。学了一段时间以后也是选择在掘金上分享自己的日常笔记,也希望能够在众多道友的大家庭中打成一片。 本文主要讲解SpringMVC的配置解析,如果大家读后觉得有用的话,还请大家多多支持博主:欢迎 ❤️点赞👍、收藏⭐、留言💬 ✨✨✨个人主页:JinHuan
SpringMVC的配置解析
<!--
springmvc的配置解析:
1、servlet-class:前端控制器的完全限定名,在spring-webmvc-5.3.5RELEASE.jar包中的org.springframework.web.servlet下
2、load-on-startup:标记是否在web服务器(例如本例的tomcat)启动时会创建这个Servlet实体类,即是否在web服务器启动时调用执 行该Servlet的init()方法,而不是在真正访问时才创建。要求取值是整数
值大于0:表示容器在启动时就加载并初始化这个Servlet,数值越小,该Servlet的优先级就越高,其被创建的时间也就越早
值小于0或者省略:表示该Servlet在真正被使用的时候才会被创建
值相同:容器会自己选择创建的先后顺序
3、url-patten:可以写为 / ,可以写为 *do、*action、*mvc等形式
4、init-param:表示了springmvc配置文件的名称和位置。如果没有配置,默认在项目的WEB-INF的目录下找名称为Servlet 名称- servlet.xml的配置文件。如果没有配置,启用默认的规则:即如果配置文件放在webapp/WEB-INF/目录下,并且配置文件的名字等 于DIspatcherServlet的名字 + -servlet(即在这里的配置文件路径是 webapp/WEB-INF/dispatcherServlet-servlet.xml),
如果是这样的话,可以不用添加init-param参数,即不用手动配置springmvc的配置文件,框架会自动加载。
而一般情况下,配置文件是放在类路径下,即resources目录下。所以在注册前端控制器的时候,还需要设置查找springmvc配 置文件路径。
其中contextConfigLocation属性:来自DispatcherServlet的父类FramworkServlet,该类中的contextConfigLocation属性 用来配置springmvc的路径和名称
-->
创建控制器
package com.jinhuan.controller;
import com.jinhuan.service.TeamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
/**
* @Author jinhuan
* @Date 2022/7/14 8:08
* Description:
*/
@Controller
@RequestMapping("team")
public class TeamController {
@Autowired
private TeamService teamService;
@RequestMapping("/hello.do")
public ModelAndView add(){
System.out.println("TeamController---add()-----");
teamService.add();
ModelAndView modelAndView = new ModelAndView();
//相当于request.setAttribute(key,value);
modelAndView.addObject("teamName","森林狼");
//未来经过SpringMVC的视图解析器处理然后转换成物理资源路径,相当于 request.getResuestDispatcher("index.jsp").forward();
modelAndView.setViewName("index");
//经过InternalResourceViewResolver这个对象的处理之后,加上了前后缀就变成了 /jsp/index.jsp
return modelAndView;
}
}
package com.jinhuan.service;
import org.springframework.stereotype.Service;
/**
* @Author jinhuan
* @Date 2022/7/14 8:07
* Description:
*/
@Service
public class TeamService {
public void add(){
System.out.println("TeamService---add()---");
}
}
配置视图解析器
在springmvc.xml配置文件中添加视图解析器的配置
<!--配置视图解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/"/><!--这里的路径就是jsp的路径,有文件夹就加上文件夹-->
<property name="suffix" value=".jsp"/>
</bean>
<mvc:annotation-driven/>
<!--
annotation-driven是一种简写形式,也可以手动配置代替这种简写形式
该注解会自动注册DefaultAnnotationHandlerMapping与AnnotationHandlerAdapter两个bean,是springMVC为@Controller分发用 于请求所必须的,解决了@Controller分发用户请求所必须的,解决了@Controller注解使用的前提配置
同时它还提供了:数据绑定支持,@NumberFormatannotation支持,@Vaild支持,读写XML的支持(JAXB,读写JSON支持 (Jackson)。我们处理响应ajax请求时,就使用到了对json的支持(配置之后,在加入jackson的core和mapper包之后,不写配置文 件也能自动转换成JSON))
-->
编写index.jsp页面
<%--
Created by IntelliJ IDEA.
User: 尽欢
Date: 2022/7/14
Time: 8:11
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>
<h1>---------index----------${teamName}</h1>
</body>
</html>
测试
在该路径下访问hello.do