springmvc第三课springmvc框架对java注解使用

笔触狂放      2022-05-18     771

关键词:

概念

本人对SpringMVC框架使用Java注解的方式进行讲解浏览器的访问流程。

环境搭建

创建Web项目,将所需要的jar包放置lib文件夹中,将springMVC.xml文件放置resources资源文件夹中,在web.xml文件中定义DispatcherServlet类,使浏览器访问服务器时,用于匹配所有访问该服务器项目的地址。代码如下:

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

</web-app>

在springMVC.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"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:p="http://www.springframework.org/schema/p"
    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
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 <!--将创建的控制器注册在主配置文件中-->
  <!--<bean name="/oc" class="com.web.controller.OneController"></bean>-->

 <!--指定包的路径,
     在运行的时候根据指定的包进行扫描该包下的所有带有注解的类,
     并动态的加载至主配置文件-->
     <context:component-scan base-package="com.web.controller"></context:component-scan>

    <!--允许springmvc框架使用java注解-->
     <mvc:annotation-driven/>

     <!--创建观察者监听器,用于监听控制器中页面跳转-->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property name="prefix" value="/WEB-INF/jsp/"></property>
          <property name="suffix" value=".jsp"></property>
     </bean>

 
 </beans>

在src文件夹中创建包com.web.controller,在包中创建OneController类,并使用@Controller注解定义该类的对象,@RequestMapping("/oc")注解用于定义浏览器访问的虚拟地址。在该类中定义方法,并设置子级虚拟地址,作为调用执行该方法的访问路径,其代码如下:

/**
 * 控制层的控制器
 * Spring框架中介绍过创建类的对象有以下四种方式
 * @Component:用于创建普通类的对象
 * @Repository:用于创建数据访问层的对象
 * @Service:用于创建业务逻辑层的对象
 * @Controller:用于创建控制层的对象
 * <!--将创建的控制器注册在主配置文件中-->
 * <!--<bean name="/oc" class="com.web.controller.OneController"></bean>-->
 */

package com.web.controller;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * 控制层的控制器
 * Spring框架中介绍过创建类的对象有以下四种方式
 * @Component:用于创建普通类的对象
 * @Repository:用于创建数据访问层的对象
 * @Service:用于创建业务逻辑层的对象
 * @Controller:用于创建控制层的对象
 * <!--将创建的控制器注册在主配置文件中-->
 * <!--<bean name="/oc" class="com.web.controller.OneController"></bean>-->
 */
@Controller
@RequestMapping("/oc")
public class OneController 

    @RequestMapping("/aaa")
    public String one()
        //这里的返回,等价于request对象的请求转发
        //等价于ModelAndView的页面跳转
        return "one";
    
    


在WEB-INF文件夹中创建jsp文件夹,并在文件夹中新建one.jsp文件,其代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>页面一</title>
</head>
<body>
我是第一个jsp页面
</body>
</html>

启动tomcat服务器,通过浏览器上输入匹配控制器中的访问虚拟地址进行跳转页面,例如:

http://localhost:8080/oc/aaa进行访问OneController类中的one方法,one方法收到springmvc.xml文件中的监听器的监听,进行给要跳转的one页面进行拼接前缀和后缀,组合成完成的访问路径,进行跳转页面,读者自行运行查看显示效果。

在OneController类中定义新的子级虚拟地址,供浏览器访问后,跳转至two.jsp页面。即当浏览器访问控制器时,如果携带了数据,那么控制器使用request对象接收浏览器的数据,并可以使用request携带数据跳转或者session对象存储数据等两种方式将数据显示在two.jsp页面中,其代码如下:

 @RequestMapping("/bbb")
    public String two(HttpServletRequest request)
        //当浏览器访问服务器的时候,携带了数据,那服务器该怎么接收数据?
        String name = request.getParameter("name");
        String age = request.getParameter("age");
        System.out.println(name+"--"+age);
        //将姓名和年龄的数据显示在two.jsp页面上
        //方法一:将数据存储在session中,因为session中的数据在不切换浏览器的情况下
        //所有页面可以共享数据
        //request.getSession().setAttribute("name",name);
        //request.getSession().setAttribute("age",age);
        //方式二
        request.setAttribute("name",name);
        request.setAttribute("age",age);
        //request.getRequestDispatcher("two.jsp").forward(request,response);
        //return的返回值就是以上request对象的请求转发的页面跳转
        return "two";
    

在jsp文件夹中定义two.jsp文件,其代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>页面二</title>
</head>
<body>
我是第二个jsp页面 <br>
$name<br>
$age<br>
</body>
</html>

通过浏览器输入地址访问控制器进行获得数据,并将数据显示在two.jsp页面中,输入的地址例如:

http://localhost:8080/oc/bbb?name=张三&age=20

springmvc框架中在@RequestMapping注解中定义了相关属性获得浏览器发送的数据,其代码如下:

//使用SpringMVC框架的方式接收浏览器传递的数据
    //@RequestMapping:该注解用于设置虚拟地址,供浏览器访问
    //value:该属性上填写的是虚拟地址
    //params:该属性上填写接收浏览器发送过来的数据的参数名称
    //method:该属性用于设置接收Get或者Post请求的请求方式
    //当设置为Get请求,那么只能接收get请求
    //当设置为post请求,那么只能接收post请求
    //没有设置该属性,默认为get和post都能访问

//使用SpringMVC框架的方式接收浏览器传递的数据
    //@RequestMapping:该注解用于设置虚拟地址,供浏览器访问
    //value:该属性上填写的是虚拟地址
    //params:该属性上填写接收浏览器发送过来的数据的参数名称
    //method:该属性用于设置接收Get或者Post请求的请求方式
    //当设置为Get请求,那么只能接收get请求
    //当设置为post请求,那么只能接收post请求
    //没有设置该属性,默认为get和post都能访问
    @RequestMapping(value = "/ccc",params = "name","age",method = RequestMethod.GET)
    public String three(String name, int age, Model model)
        System.out.println(name+"@@"+age);
        //springmvc框架中专门针对携带数据跳转页面提供专门的对象Model
        //方式三
        model.addAttribute("name",name);
        model.addAttribute("age",age);
        return "two";
    

读者自行运行查看运行访问效果。

springmvc框架中使用了不同方式获得浏览器的数据,例如@RequestParam,其代码如下:

 //@RequestParam:该注解是springmvc框架中专门用于接收浏览器发送过来的数据
    //该注解中设置的参数就是浏览器传输数据对应的参数名称

 //@RequestParam:该注解是springmvc框架中专门用于接收浏览器发送过来的数据
    //该注解中设置的参数就是浏览器传输数据对应的参数名称
    @RequestMapping("/ddd")
    public String four(@RequestParam("name")String a,
                       @RequestParam("age")int b,
                       HttpSession session,
                       HttpServletRequest request
                       )
        System.out.println(a+"%%"+b);
        //session.setAttribute("name",a);
        //session.setAttribute("age",b);
        //注意:ServletContext类不能作为形式参数定义在方法上
        ServletContext application=request.getServletContext();
        application.setAttribute("name",a);
        application.setAttribute("age",b);
        return "two";
    

其中也可以省略参数名称,当要求形式参数的变量名称与浏览器的数据参数名称需要要保持一致

//@RequestParam("name"):用于获得浏览器发送的数据,里面设置的名称必须要和浏览器的参数名称保持一致
    //@RequestParam("name")String a,@RequestParam("age")int b
    //@RequestParam该注解中的参数名称可以省略,
// 但前提是形式参数的变量名称需要和浏览器参数名称保持一致
    @RequestMapping("/eee")
    public String A5(@RequestParam String name,@RequestParam int age)
        System.out.println(name+"-"+age);
        return "two";
    

以上在浏览器访问过程中必须要携带控制器所指定的两个参数进行访问服务器,如果浏览器访问服务器的时候传一个参数或者不传参数或者传三个参数都会导致地址访问失败,必须要传递两个参数,那么在项目中,有时候浏览器传递的数据并不是那么完整,可能不传参数,那么怎么在这种情况中不会导致浏览器产生报错异常,@RequestParam注解中提供了用法,代码如下:

//required = false:该属性表示浏览器可以不用传该数据
    //defaultValue该属性表示在浏览器没有发送数据过来的时候,默认启用该属性上设置的值
    @RequestMapping("/fff")
    public String A6(@RequestParam(value = "book",required = false,defaultValue = "不上课,休息")String book)
        if (book==null)
            System.out.println("浏览器没有发送数据过来");
        else 
            System.out.println("浏览器发送数据过来了,为:"+book);
        
        return "one";
    

在控制器中创建TwoController类,并通过注解的方式设定虚拟地址,在注解的方式中也是可以使用ModelAndView类进行携带数据跳转页面,其代码如下:

package com.web.controller;

import com.web.entity.Dog;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/tc")
public class TwoController 

    @RequestMapping("/one")
    public ModelAndView one()
        ModelAndView mav=new ModelAndView();
        //在跳转页面之前,进行携带数据
        mav.addObject("text","我是ModelAndView发送过来的数据");
        //定义要跳转的页面的路径
        mav.setViewName("five");
        return mav;
    
    

在jsp文件中创建five.jsp页面,其代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>页面五</title>
</head>
<body>
    我是第五个jsp页面 <br>
$text<br>
获得小狗的信息为: <br>
    小狗名称:$d.name<br>
    小狗年龄:$d.age<br>
    小狗性别:$d.sex<br>
    小狗颜色:$d.color<br>

</body>
</html>

也可以保持返回值类型为String类型,使用Model类进行存储要传输的数据,其代码如下:

 @RequestMapping("/two")
    public String two(Model model)
        model.addAttribute("text","我是Model发送过来的数据");
        Dog dog=new Dog("旺财",1,"男","棕色");
        model.addAttribute("d",dog);
        return "five";
    

需要用到的Dog类的代码如下:

package com.web.entity;

public class Dog 
    private String name;
    private int age;
    private String sex;
    private String color;

    @Override
    public String toString() 
        return "Dog" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", color='" + color + '\'' +
                '';
    

    public Dog() 
    

    public Dog(String name, int age, String sex, String color) 
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.color = color;
    

    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

    public int getAge() 
        return age;
    

    public void setAge(int age) 
        this.age = age;
    

    public String getSex() 
        return sex;
    

    public void setSex(String sex) 
        this.sex = sex;
    

    public String getColor() 
        return color;
    

    public void setColor(String color) 
        this.color = color;
    

那么在某种特殊情况下,我们并不需要跳转页面,而只是想将纯文本数据显示在浏览器上,那么该怎么操作?看一下代码:

 //当浏览器访问该虚拟地址,不跳转页面,传html代码给浏览器
    //@ResponseBody:控制器发给浏览器的数据不再是跳转页面,而是纯文本数据
    @RequestMapping("/three")
    @ResponseBody
    public String three()
        return "my name is HanMeiMei";
    

@ResponseBody该注解用于固定其返回值的数据是文本内容,不需要监听器进行监听,并不是跳转至指定的html页面。

如果需要返回中文的纯文本,那么应该设置字符编码格式,并设置返回的是纯文本数据。

//当控制器传给浏览器的是纯文本格式需要设置produces属性
    //text/plain:设置为纯文本
    //charset=UTF-8:发给浏览器的文本数据转换成UTF-8编码格式
    @RequestMapping(value = "/four",produces = "text/plain;charset=UTF-8")
    @ResponseBody
    public String four()
        return "我的名字叫韩妹妹";
    

如果返回的是具备html标签的html文本代码,其代码如下:

 //返回给浏览器的是html文本格式
    @RequestMapping(value = "/five",produces = "text/html;charset=UTF-8")
    @ResponseBody
    public String five()
        return "<a href='https://www.baidu.com'>百度一下</a>";
    

那么以上几种写法,在后期的SSM框架的综合使用中,使得前后端分离或者前后端伪分离时,springmvc框架中结合json解析,将前端需要的数据封装成json格式发送给前端的Ajax进行接收。

那么如何使用重定向方式改变访问的虚拟路径,也就是由其中一个控制器跳另一个控制器中,实现不同页面之间的连贯性跳转,或者是执行不同的功能代码,其操作如下:

//在springmvc框架中类似于重定向的更改访问的虚拟地址
    @RequestMapping("/six")
    public String six()
        System.out.println("我是控制器的第六个方法");
        //相对路径:
        // http://localhost:8080/tc/six 在该路径的访问下 redirect:one
        //在同一个父路径下改变为http://localhost:8080/tc/one
        return "redirect:one";
    
 //在springmvc框架中类似于重定向的更改访问的虚拟地址
    @RequestMapping("/seven")
    public String seven()
        System.out.println("我是控制器的第七个方法");
        //绝对路径:
        // http://localhost:8080/tc/seven 在该路径的访问下 redirect:/oc/aaa
        //在同一个父路径下改变为http://localhost:8080/oc/aaa
        return "redirect:/oc/aaa";
    

总结

通过本文的学习,读者应该很容易发现SpringMVC框架的注解的使用是非常灵活,易用,代码简洁,希望本文的学习可以让读者对SpringMVC的学习有一个新的认识。

学习在于坚持,相信目标终会实现!!!

mybatis第三课java注解的方式操作crud

概念根据前面文章对MyBatis框架的学习【MyBatis】第三课MyBatis映射文件的CRUD操作<方式二>初学者应该对该框架有一定的认识了,本文对该框架介绍第三种操作方式,使用Java注解的方式,可以加快并简化代码的... 查看详情

spring第三课spring框架搭建mvc三层架构

概念本文对Spring框架在项目的实际应用和搭建项目框架中的作用和应用的介绍。1.搭建项目开发环境本文连接的数据库是mydb,采用的表是account,银行账户信息的数据表,如果读者对该表的结构不太清楚,可查阅该... 查看详情

springboot.springmvc和spring有啥区别?

...,辅助你简化项目搭建过程的。如果承载的是WEB项目,使用SpringMVC作为MVC框架,那么工作流程和你上面描述的是完全一样的,因为这部分工作是SpringMVC做的而不是SpringBoot。”SpringBoot实现了自动配置,降低了项目搭建的复杂度。众所周... 查看详情

springmvc第二课springmvc框架的简单使用

...f0c;加以巩固和学习,通过一个登录小案例来完成对于SpringMVC框架的初步学习和认识。开发步骤创建新项目,搭建SpringMVC框架的环境,如初学者还未掌握,可查看上文【SpringMVC】第一课SpringMVC框架环境搭建以及使用... 查看详情

springmvc框架搭建及其详解

 现在主流的WebMVC框架除了Struts这个主力外,其次就是SpringMVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用SpringMVC来应对大多数的... 查看详情

springmvc框架整理

博客主要对SpringMVC框架的知识点进行整理,该篇介绍了SpringMVC的HelloWorld环境搭建,常用注解的使用,Ant路径风格,RestFul编程风格,最后使用SpringMVC实现一个RestFul编程风格的CRUD。MVC概述     Model(模型&#... 查看详情

springmvc

参考技术A一、SpringMVC应用1.springmvc是一个表现层的框架经典三层架构:表现层,service层,dao层。SpringMVC和Struts2一样,都是为了解决表现层问题的web框架,它们都是基于MVC设计模式的。而这些表现层框架的主要职责就是处理前端H... 查看详情

最新springmvc框架搭建入门教程

Spring框架提供了构建Web应用程序的全功能MVC模块。SpringMVC属于SpringFrameWork的后续产品,已经融合在SpringWebFlow里面。SpringMVC的易用性、功能强大等优点已经被越来越多的企业所接受,也成为一个使用广泛的mvc框架。因此,尚学堂... 查看详情

最新springmvc框架搭建入门教程

Spring框架提供了构建Web应用程序的全功能MVC模块。SpringMVC属于SpringFrameWork的后续产品,已经融合在SpringWebFlow里面。SpringMVC的易用性、功能强大等优点已经被越来越多的企业所接受,也成为一个使用广泛的mvc框架。因此,尚学堂... 查看详情

springmvc环境搭建(xml版本)

SpringMVC是Web层框架,它隶属于Spring框架,只是Spring这个庞大框架下的一个小模块,用于替换Servlet1.下载jar包(20)http://zhidao.baidu.com/link?url=guH_VTC2FKGftWBtdCW_AU_z9t5QgyGqlr-DEwkryPCNhhlySr9wJACJVJu3hRiib50j_GNFkQNxZr4-k2v3z5jRpS1p 查看详情

springmvc-01

1.概述1.1概念SpringMVC是一种基于Java实现MVC模型的轻量级Web框架优点使用简单,开发便捷(相比于Servlet)灵活性强项目请求响应架构演进:软件三层软件三层+Web层中的MVC(JSP)异步调用+软件三层+Web层中的MVC(HTML)+J 查看详情

springboot第三章springboot和web组件(代码片段)

...:拦截器、Servlet、Filter3.1SpringBoot中拦截器拦截器是SpringMVC中一种对象,能拦截器对Controller的请求。拦截器框架中有系统的拦截器,还可以自定义拦截器,实现对请求预先处理。实现自定义拦截器:1.创建类实... 查看详情

springmvc+mybatis框架整合源码

1.模块化、服务化,流程化,耦合度低、扩展性好,灵活度高,工具类封装完整,干净利索,调用简单方便2.提供Rest服务,支持APP手机应用(android和ios)接口、php、.net、易语言、VB等第三方接口调用3.全新高大尚HTML5+css3.0+bootstrap响... 查看详情

04_ssm框架整合(spring+springmvc+mybatis)

...Spring配置文件中。  实现事务控制。第三步:  由于SpringMVC是Spring的模块,无需整合这两个 查看详情

springmvc中的jsr303数据校验框架说明

JSR303是java为Bean数据合法性校验提供的标准框架,它已经包含在JavaEE6.0中。JSR303通过在Bean属性上标注类似于@NotNull、@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证:-----------------------------------------------------... 查看详情

springboot与springmvc的区别

参考技术ASpringMVC和SpringBoot都是Spring家族的重要成员。Spring家族的使命就是为了简化而生。SpringMVC简化日常Web开发的,后来随着自身的发展,SpringMVC变得臃肿复杂,而SpringBoot则进一步简化了SpringMVC开发。SpringMVC为JavaWeb而生。Sprin... 查看详情

scrapy学习第三课(代码片段)

python爬虫框架scrapy学习第三课利用CrawlSpider类改写成套招标数据爬取利用CrawlSpider类改写成套招标数据爬取创建一个新的项目scrapystartprojectBidsSpider新建一个利用crawlSpider的爬虫基类scrapygenspider-tcrawlpublicBidshubeibidding.com重点:scr... 查看详情

学习笔记——springmvc简介;springmvc处理请求原理简图;springmvc搭建框架(代码片段)

2023-01-19一、SpringMVC简介1、SpringMVC是Spring子框架2、SpringMVC是Spring为“控制层”提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架。3、SpringMVC是非侵入式:可以使用注解让普通java对象,作为请求处理器(Controller)4、... 查看详情