注解完成一个 简单SpringMVC项目

注解完成一个 简单SpringMVC项目

一、步骤

  1. 首先建立一个Maven文件,然后增加web框架。idea记得配置打的包里的WEB-INF,在此目录下建一个lib文件夹然后把包导进去(idea老问题了据说),ecilipse会自行建立lib文件夹
  2. 配置web.xml文件(一次配好,永不更改),视图解析器可根据需求更改
<?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>
        <!--2.关联一个springmvc配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-servlet.xml</param-value>
        </init-param>
        <!--启动级别-->
        <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>
  1. 然后根据web.xml里的去配置一个spring-servlet.xml的配置文件,
    设立启动级别(servlet),spring-servlet.xml的配置如下,自己可以更改context:/里的pakage,扫描之后让指定的包里的注解生效。
<?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
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
        ">

    <!--自动扫描包,让指定包下的注解生效,由IOC容器统一管理-->
    <context:component-scan base-package="com.cjy.controller"/>

    <!--过滤,springMVC不处理非静态资源-->
    <mvc:default-servlet-handler/>

    <!--静态资源文件的引用,支持mvc注解驱动-->
    <mvc:annotation-driven/>

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

</beans>
  1. 配置Controller
  • @Controller会对controller所应继承的Controller里的方法进行实现。ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception;
  • @RequestMapping("/h1")设置此方法的路径。
  • 返回所要跳转的页面的名字。返回的String会被视图解析器解析。数据会被传输到页面(model),hello.jsp如下
<%--
  Created by IntelliJ IDEA.
  User: 18480
  Date: 2021/6/18
  Time: 20:58
  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,输入下方路径并查看结果

http://localhost:8080/com.cjy.controller/h1

  • 这里说一下另一种注解,@RestController这个注解与@Controller不同,会标注这个类不会被视图解析器解析,即直接返回一个字符串(Json)给所需。
package com.cjy.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class controller {

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

        //数据
        model.addAttribute("msg","HelloSpringMVC");
        return "hello";//在识图解析器组合成/WEB-INF/jsp/hello.jsp
    }
}

二、与原版的对比

  1. 使用springmvc的三大配置
    • 处理器映射器
    • 处理器适配器
    • 视图解析器
  2. 现在只需要开启注解驱动就能省略前两个的配置,我们只需要配置视图解析器就行<mvc:annotation-driven/>
  3. 用注解来对Controller里的方法进行实现。
  4. 原版即无注解版。
    原版controller如下
package com.cjy.java.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接口
public class HelloController implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws  Exception{
        //ModelAndView 模型核视图
        ModelAndView modelAndView = new ModelAndView();

        //封装对象,放在ModelAndView中
        modelAndView.addObject("msg","HelloSpringMVC");
        modelAndView.setViewName("hello");//: /WEB-INF/jsp/hello.jsp
        return  modelAndView;
    }
}

原版spring-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
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">

    <!--映射器适配-->
    <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,根据Handel返回一个映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <bean id="/hello" class="com.cjy.java.controller.HelloController"/>

</beans>

总结

注解版的springmvc只是对原版中的处理器解析器和处理器适配器用注解进行简化(注解开启驱动)。然后用注解对Controller进行实现,简化实现的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值