在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能

Spring MVC
springmvc概述
基本说明
sptingmvc基于spring 是spring中的一个模块,做web开发使用的。springmvc叫做spring web mvc
说明他是spring的核心技术 做web springmvc内部使用mvc架构模式

spring  mvc 是一个容器    管理对象   使用ioc核心技术   springmvc管理界面层中的控制对象。


springmvc底层也是Servlet,以servlet为核心    接收请求   处理请求  显示处理结果给用户
处理用户的请求
用户发起请求-----springmvc------spring----mybatis----mysql数据库




1.2springmvc中的核心Servlet--DispatcherServlet
DispatcherServlet是框架一个对象,负责接收请求,响应处理结果。
DIspatcherServlet他的父类是HTTPServlet
DispatcherServlet也叫做前端控制器(front  controller)

springmvc是管理控制器对象,原来没有springmvc之前使用servlet作为控制器对象使用,现在通过
springmvc容器创建一种叫做控制器的对象,代替servlet行驶控制器的角色,功能。


springmvc 主要使用注解的方式来创建控制对象  ,处理请求

springmvc注解式的开发模式
需求:用户发起一个请求,springmvc接收请求,显示请求的处理结果

servlet的实现方式:
jsp发起-------servlet----jsp显示结果

步骤
1.新建web项目
2.加入web依赖
		spring-webmvc依赖(springmvc框架依赖),servlet依赖
3.声明springmvc核心对象DispatcherServlet
		1)DispatcherServlet是一个servlet对象
		2)DispatcherServlet叫做前端控制器(front controller)
		3)DispatcherServlet作用:
		1.在servlet的init()方法中,创建springmvc中的容器对象。
		webAppliactionContext ctx=new ClassPathXmlApplicationContext("appliationContextxml")
		2.作为servlet,接收请求


4.创建一个jsp,发起请求

5创建一个普通类作为控制器使用(代替之前的servlet)
	1.)在类上面加入@Controller注解
	2.)在类中定义方法,方法上面加入@RequestMapping注解
	方法处理请求的,相当于servlet的doGet,dopost
6.创建结果的jsp页面


7.创建springmvc的配置文件(spring的配置文件一样)
1)声明组件扫描器,指定@Controller注解所在的包名
2)声明视图解析器对象


1.3springmvc请求的处理过程
简单处理过程:
用户发起请求some.do----》Tomcat接收请求-----DispatcherServlet----分配MyController(dosome()返回mv对象)----
mv显示给用户
省略Tomcat
用户some.do---------------DispatcherServlet--------------MyController


如果使用Servlet处理请求
用户发起请求------------------没有其他对象----------------Servlet

web开发中配置文件的说明

1.web.xml文件:
	部署描述符文件,给服务器(Tomcat)。
	作用:服务器在启动的时候要读取web.xml,根据文件的说明去创建各种对象,根据文件中的声明知道请求和Servlet等对象的关系。
2.框架的配置文件,springmvc的配置文件
	作用:声明框架创建的项目中的各种对象,主要创建Controller对象的
	
配置文件加载的顺序和功能
	1.Tomcat服务器启动,读取web.xml文件根据web文件中的说明创建对象。
	 <servlet>
    <servlet-name>myweb</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--自定义配置文件的位置-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--        让服务器Tomcat创建对象的顺序   是个整数值   大于等于0   数值越小,创建对象的时间越早-->
    <load-on-startup>1</load-on-startup>
</servlet>
	
	创建DispatcherServlet他的对象,会执行init方法。在init方法中会执行容器对象的创建  WebApplicationContext ctx=new WebApplicationContext(“classpth:springmvc.xml”)
2.springmvc框架,new ClassPathXmlApplicationContext()读取的配置文件。
					<context:component-scan base-package="com.bjpowernode.controller"/>
				<!-- 视图的解析器:帮助处理视图-->
					<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
				<!--前缀:指定视图文件的路径-->
						<property name="prefix" value="/WEB-INF/view/"/>
				<!--        后缀:视图文件的扩展名-->
						<property name="suffix" value=".jsp"/>
					</bean>
	使用组件扫描器base-package=“com.bjpower.controller”,遍历controller包中的所有类
	MyCOntroller类,找到这个类中的@Controller  @RequestMapping注解,  就能创建MyController对象
	就知道some.do的请求时执行doSome()方法
	
	以上1 2 都是项目的启动过程   没有执行任何的用户请求
3.用户发起请求  some.do    发给*调度器    some.do------DispatcherServlet
				DIspatcherServlet里面有WebApplicationContext。  WebApplicationContext里面的MyCOntroller对象。请求some.do,
				DIspatcherServlet就知道是MyController处理的。
springmvc中的MVC组件

第二章springmvc的注解式开发

2.1RequestMapping
属性:value  请求uri地址。
位置:1)方法上面  必须的  2)在类的上面作为模块名称
 @RequestMapping(value = {"/some.do", "/frist.do"})
public ModelAndView dosome() {//doGet()

属性:method请求方式,使用RequestMethod类的枚举,表示请求方式 
 @RequestMapping(value = "/some.do",method=RequestMethod.GET/POST )
public ModelAndView dosome() {//doGet()


请求方式的定义
对数据的添加修改一般用post
查询一般用get(数据不改变)
表单ajax默认是get             地址栏  超链接   src资源路径都是get(能缓存效率高)
请求方式指定
@RequestMapping(value="",mathod=RequestMethod.GET)




2.2接收请求中的参数
对应HTTPServlet,HTTPServletResponse,HTTPSession 只需要在控制器方法的形参列表中,定义就可以了。
框架会给参数赋值,在控制器方法内部可以直接使用request,response  session参数。


接收请求中的参数:逐个接收,对象接收


逐个接收

逐个接收:请求中的参数名和控制器中的参数名一样。按照名称对象接收参数


Controller接收参数
接收参数的问题:
1.最好使用包装类型,例如Integer  能接收空值情况  ,接收的是null
2.框架可以使用String  到int   long    double
3.post请求中乱码的问题,使用字符集过滤器


	<!--    声明过滤器,框架提供的,解决post请求中文乱码-->
<filter>
    <filter-name>characterEncodingFilter</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>
    <init-param>
            <!--强制请求对象(request)使用encoding的编码方式-->
        <param-name>forceRequestEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <!--强制应答对象(response)使用encoding的编码方式-->
        <param-name>forceResponseEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
        <!--强制所有请求,先经过过滤器-->
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>



解决中文乱码:CharacterEncodingFilter(过滤器类)



2.2.4对象接收
对象接收:在控制器方法的形参是java对象  使用java对象的属性接收请求中的参数值
需求:java对象的属性名和请求中的参数名一样

具体实现过程
在idea中新新建一个maven项目
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能
File--------->new----->project
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能

选择maven---------->勾选Create from archetype(以模板创建maven项目)
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能

选择maven-archetype-webapp (一定要选择对不要选错了)
然后next 建好名 完成maven的创建
我的项目如图所示
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能
修改pom.xml(因为我们选择的是模板 ,改模板默认jdk是1.7我们需要修改为1.8)
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能
pom.xml中的代码如下 pom文件中主要引入依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>ch01-springmvc</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>ch01-springmvc Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--springmvc依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.9</version>
        </dependency>
        <!-- servlet依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>


</project>

由于是模板项目中缺少resources目录我门需要自己创建
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能

在main上右键----------》New--------------》Directory输入rescoures
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能
然后在rescores上右键选择Mark Directory 选择rescoures root(该文件用来放在所有的配置文件)
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能
变成上图的样式证明 成功
在rescoures下创建spring配置文件
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能
右键选择new选择XML-------------》选择spring–Config
改配置文件中的代码为

<?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"
       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">
    <!--springmvc配置文件-->
<!--    声明组件扫描器-->
    <context:component-scan base-package="com.bjpowernode.controller"/>
<!-- 视图的解析器:帮助处理视图-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀:指定视图文件的路径-->
        <property name="prefix" value="/WEB-INF/view/"/>
<!--        后缀:视图文件的扩展名-->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

在java中创建如下的包在包中创建2个类分别是MyController和StudentController
MyController代码如下

package com.bjpowernode.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

/**
 * @Controller:创建控制器(处理器)对象 控制器:叫做后端控制器(back Controller)自定义的类处理请求的。
 * 位置:在类的上面,表示创建此类的对象,对象放在springmvc的容器中
 */
@Controller
public class MyController {
    //定义方法处理请求。public void doGet(){}

    /**
     * springmvc框架   使用控制器类中的方法处理请求
     * 方法的特点
     * 1.方法的形参,表示请求中的参数
     * 2.方法的返回值,表示本次请求的处理请求
     * @return
     */

    /**
         *          @return
         *          @RequestMapping 请求映射
         *          属性:value  请求中的uri地址  唯一值   以“/”开头。
         *          mathod:请求的方式,使用RequestMethod类的枚举值。
         *          例如get方式   RequestMethod.GET
         *          位置:1.在方法的上面()  2.在类定义的上面(可选)
         *          作用:把指定的请求,交给指定的方法处理  等同于url-pattern
         *          返回值ModelAndView:表示本次请求的处理结果(数据和视图)
         *           Model:表示数据
         *          View:表示视图
     */
    @RequestMapping(value = {"/some.do", "/frist.do"})
    public ModelAndView dosome() {//doGet()
        //使用这个方法处理请求。能处理请求的方法叫做控制器方法
        //调用service对象,处理请求  返回数据
        ModelAndView mv = new ModelAndView();
        //添加数据
        mv.addObject("msg", "处理了some.do请求");
        mv.addObject("fun", "执行了dosome方法");


        //指定显示数据的视图setViewName("视图完整的路径")
        //mv.setViewName("show.jsp");
        // mv.setViewName("/WEB-INF/view/show.jsp");
        // mv.setViewName("/WEB-INF/view/other.jsp");
        //当配置了视图解析器,使用文件名称作为视图名使用,叫做视图逻辑名称
        //使用了逻辑名称,框架使用配置文件中的视图解析器的前缀和后缀,拼接完成
        //   /WEB-INF/view/+show+.jsp
        mv.setViewName("show");

        //返回结果
        return mv;
    }

    /**
     * 当框架调用完dosome方法后得到返回值ModelAndView
     * 框架会在后续的处理逻辑值,处理mv对象里面的数据和视图。
     * 对数据执行request.setAttribute(“msg”,“处理some.do请求”);把数据放入到request作用越。
     * 对视图执行forword转发操作。等同于request.getRequestDispatcher(“/show.jsp”).forword(..)
     */
    @RequestMapping(value = {"/other.do", "/test/sencond.do"})
    public ModelAndView doOther() {//doGet()
        System.out.println("执行了MyCOntroller的doOther方法");
        //使用这个方法处理请求。能处理请求的方法叫做控制器方法
        //调用service对象,处理请求  返回数据
        ModelAndView mv = new ModelAndView();
        //添加数据
        mv.addObject("msg", "处理了other.do请求");
        mv.addObject("fun", "执行了doOther方法");
        mv.setViewName("other");
        //返回结果
        return mv;
    }
}

StudentController代码如下

package com.bjpowernode.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 */
@Controller
public class StudentController {
    @RequestMapping("/add.do")
    public ModelAndView addStudent(){
        ModelAndView mv=new ModelAndView();
        mv.addObject("msg","注册成功");
        mv.setViewName("show");
        return mv;
    }
}

在WEBapp下创建如图的jsp文件
主jsp文件下的代码

<%--
  Created by IntelliJ IDEA.
  User: GJX
  Date: 2021/9/16
  Time: 16:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>第一个springmvc</title>
</head>
<body>
<a href="some.do">发起some.dao的请求</a><br/>
<a href="test/sencond.do">test/sencond.do</a><br/>
<a href="add.do">add.do的请求</a>
</body>
</html>

show.jsp代码


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>show</title>
</head>
<body>
/WEB-INF/view/show.jsp,显示request作用域中的数据<br/>
            <h3>msp数据:${msg}</h3>
            <h3>fun数据:${fun}</h3>

</body>
</html>

other.jsp代码如下


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>show</title>
</head>
<body>
/WEB-INF/view/show.jsp,显示request作用域中的数据<br/>
            <h3>msp数据:${msg}</h3>
            <h3>fun数据:${fun}</h3>

</body>
</html>

在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能
配置Tomcat
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能
找到自己电脑上Tomcat安装的位置
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能
点击加号 发布自己的项目
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能
选择这个选择
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能
然后应用然后点击ok发布成功
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能
在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能

在idea中创建maven工程,搭建springmvc框架,完成和servlet一样的功能

运行结果如图

上一篇:linux基础之文件编辑


下一篇:小曾带你刷牛客01(Java版本)