Hello,SrpingMVC 之 由Servlet进阶SpringMVC的初级学习

9 篇文章 0 订阅
1 篇文章 0 订阅

SpringMVC学习(一)

1.复习Servlet

新建一个maven项目总,导入依赖

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.1.9.RELEASE</version>
    </dependency>
    <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>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

新建一个子mavean项目,将其变为Web项目

右击子项目

请添加图片描述

勾选后选中版本为4.0

请添加图片描述

新建com.lwh.servlet包,创建servlet

package com.lwh.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method=req.getParameter("method");
        if("add".equals(method)){
            req.getSession().setAttribute("method","该操作为add方式");
        }else if("delete".equals(method)){
            req.getSession().setAttribute("method","该操作为delete方式");
        }else{
            req.getSession().setAttribute("method","无参数");
        }
        req.getRequestDispatcher("/WEB-INF/hello.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

配置servlet

到web.xml中可以配置servlet的路径,如果不配置就会找不到路径,也可以用注解进行注册(快捷方式),但是当项目够大是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">
    
    <!--servlet与servlet-mapping标签一般成对出现-->
<!--    <servlet>-->
<!--        <servlet-name>自定义的servlet名字,在servlet-mapping的name中需要再次出现</servlet-name>-->
<!--        <servlet-class>servlet的具体位置,由包名一个一个的往下找</servlet-class>-->
<!--    </servlet>-->
<!--    <servlet-mapping>-->
<!--        <servlet-name>servlet的servlet-name的属性值</servlet-name>-->
<!--        <url-pattern>访问路径,例如下面的这个例子,就是项目/hello</url-pattern>-->
<!--    </servlet-mapping>-->
    
    <servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>com.lwh.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

在WEB-INF下创建我们需要跳转的hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>Title</title>
  </head>
  <body>
  <!--下面这个是jsp的el表达式,表示取出session容器中的名字叫做method的对象-->
  ${method}
  </body>
</html>

访问

请添加图片描述

2.新建一个SpringMVC

官方文档:https://docs.spring.io/spring-framework/docs/5.2.9.RELEASE/spring-framework-reference/web.html#spring-web

SpringMVC特点:

  • 轻量级,简单易学
  • 高效,基于请求响应的MVC框架
  • 与Spring兼容性好
  • 约定优于配置
  • 功能强大:RESTful,数据验证,格式化,本地化,主题等
  • 简介灵活

创建一个SpringMVC工程大概分为以下几步:

  1. 导依赖
  2. 创建spring-mvc配置文件
  3. 在web.xml中配置DispatcherServlet
  4. 编写Controller
  5. 访问

先创建一个视图(jsp)

如下:hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>huaye</title>
</head>
<body>
    <!--el表达式,可以将session中的msg值显示到页面中-->
	${msg}
</body>
</html>

导依赖

项目pom.xml中导入

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

创建spring-mvc配置文件

<?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.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">


	<!--包扫描,代表com.lwh.controller包下的才是真正的控制器-->
    <context:component-scan base-package="com.lwh.controller"/>
    <!--默认的handler-->
    <mvc:default-servlet-handler />
    <!--注解的支持-->
    <mvc: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>

web.xml中配置DispatcherServlet###

这基本上是一个固定的写法,可变性不高,文末会讲讲这个DispatcherServlet

<servlet>
        <servlet-name>springmvc</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>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

先讲讲这个标签信息:

servlet-class就是代表这个servlet的路径是标签内的值,dispaterServlet是springmvc中内置的一个servlet,对springmvc来说十分重要

init-param就是代表配置信息,value中就是配置的xml文件

编写Controller

在配置文件中已经写了参数,控制器在com.lwh.controller下才生效,所以,我们需要在这个包下创建一个类,暂时命名为HelloController

package com.lwh.controller;

import com.sun.org.apache.xpath.internal.operations.Mod;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String hello(Model model){
        model.addAttribute("msg","Hello,SpringMVC");
        return "hello";
    }
}
  1. 在类上添加注解@Controller,代表这个是一个Controller
  2. 在方法上添加注解@RequestMapping,代表这个是一个请求映射,通俗来讲就是当访问 localhost:8080/SpringMVC3/hello 时执行被 @RequestMapping("/hello") 注解的方法体
  3. 这里的 return “hello” 代表当访问/hello路径时;执行方法体,先将设置session中的msg值为Hello,SpringMVC,然后访问转到hello.jsp。

为什么方法明明返回的是一个String类型的hello,却会转到hello.jsp?

访问

请添加图片描述

第一个SpringMVC程序完成!

项目目录

请添加图片描述

3.谈谈我们干了什么##

配置文件中我们配置了

Controller的路径,handler,以及注解支持

这三个基本上可以作为一个定式,每个springMVC项目都这么写就可以,重要的是这个视图解析器

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      id="internalResourceViewResolver">
    <!-- 前缀 -->
    <property name="prefix" value="/WEB-INF/jsp/" />
    <!-- 后缀 -->
    <property name="suffix" value=".jsp" />
</bean>

可以这样理解,当我们访问视图时,会自动加上前缀和后缀,前缀是:"/WEB-INF/jsp/";后缀是:".jsp";这就是为什么我们访问hello时直接就能找到WEB-INF下的jsp下的hello.jsp文件。

@Controller这个注解代表这个是一个控制器,里面的方法提供映射路径,可以理解为SpringMVC的一个标志

@RequestMapping这个注解代表这是一个映射器,里面的值代表访问路径,只要访问路径与**@RequestMapping**注解中的值匹配成功,就执行方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值