首页 > 其他分享 >SpringMVC核心技术

SpringMVC核心技术

时间:2022-12-19 11:31:55浏览次数:40  
标签:xml RequestMapping SpringMVC 配置 视图 核心技术 url 注解


入门程序

Web.xml(前端控制器)配置:

         在web.xml中添加DispatcherServlet的配置。

                 

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<-- 如果没有指定springMvc核心配置文件那么默认会去找/WEB-INF/+<servlet-name>中的内容 + -servlet.xml配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<-- tomcat启动的时候就加载这个servlet;1有配置占用了 -->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>


注意:方格中的内容可不配

如果方格一:如果没有指定springMvc核心配置文件那么默认会去找/WEB-INF/+<servlet-name>中的内容 +  -servlet.xml配置文件

 

方格二: tomcat启动的时候就加载这个servlet;1有配置占用了

Controller类:

         补充:

<url-pattern> 

*.action

        /   :拦截除jsp的所有URL

        /*  :拦截所有资源     

如果使用/ 或者/* 设置静态资源放行:   <mvc:resourceslocation="/js/" mapping="/js/**"/>

如果使用/或者/*由于全部拦截会出现很多问题

 

两种方式:

1)      实现controller接口,或者继承controller实现类(这种方式不常用)

2)      注解开发:

在类上添加注解:@Controller

SpringMVC.xml开启注解扫描后会扫描指定包下添加@Controller注解的类

在方法上添加注解:在方法上添加@RequestMapping("/test")  注解并且添加value属性:/名称;该名称就是url访问的名称

根据方法的返回值不同可以分为3种:voidmodelAndView string

         

注意:

1 注意controller方法的返回值没有特殊规定,

ModelAndView 是springMVC提供的比较规范的他可以向页面传值以及设置要转发到哪个页面.如果ViewName中有值那么model.setViewName("itemList")将不会执行

3 如果返回值是spring会把spring字符串当做转发的路径;

4 @Controller  属于spring的注解开发,所以不要他也行


SpringMVC.xml配置:

         三块:

²  开启注解扫描(组件扫描器)


标记@controller的控制器类,配置如下:

 

<!--扫描controller注解,多个包中间使用半角逗号分隔 -->
<context:component-scanbase-package="cn.itcast.springmvc.controller.first"/>

²  处理器映射器和处理器适配器(注解映射器)

1)      可以不配置,不配置的话springMVC会默认去:  /org/springframework/web/servlet/atcherServlet.properties中查找,对应的处理器映射器和处理器适配器去使用,这样每个请求都要扫描一次他的默认配置文件,效率非常低,会降低访问速度,所以要显示的配置处理器映射器和处理器适配器

2)      根据DispatcherServlet.properties配置文件中的类配置,这些类以过时不建议使用

3)      加载最新的类

 

<!--配置最新版的注解的处理器映射器 -->
<beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!-- 配置最新版的注解的处理器适配器 -->
<beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>



4)      自动匹配最新的注解驱动

<mvc:annotation-driven></mvc:annotation-driven>

         注解驱动:

                   作用:替我们自动配置最新版的注解的处理器映射器和处理器适配器

²  视图解析器:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>


可以不配,不配的话controller类中页面的路径要写全;

InternalResourceViewResolver:支持JSP视图解析

viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl的相关jar 包。此属性可以不设置,默认为JstlView。

prefix 和suffix:查找视图页面的前缀和后缀,最终视图的址为:

前缀+逻辑视图名+后缀,逻辑视图名需要在controller中返回ModelAndView指定,比如逻辑视图名为hello,则最终返回的jsp视图地址 “WEB-INF/jsp/hello.jsp”

设置静态资源放行(视情况配置):   

     

<mvc:resources location="/js/"mapping="/js/**"/>

 

总结:

         springMVC.xml 一般会配:

                   组件扫描器

                   注解映射器(注解驱动)

                   视图解析器

                   可能会配静态资源放行

 

必配:

在web.xml中配置: 在web.xml中添加DispatcherServlet的配置。

在springmvc.xml中配置注解扫描

Controller类上配@controller注解

Controller方法上配@RequesMapping并写参数

 

 

自定义转换器

需要编写一个类实现Converter接口

                   在springMvc.xml中配置自定义转换器

                   在springMvc.xml中将自定义转换器配置到注解驱动上


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
importorg.springframework.core.convert.converter.Converter;
publicclass DateConverterimplementsConverter<String,Date> {
@Override
public Date convert(Stringsource) {
SimpleDateFormatsimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return simpleDateFormat.parse(source);
}catch (ParseExceptione) {
e.printStackTrace();
}
retur nnull;
}
}


Converter<String, Date> string指原始类型,date指转回后的类型

转换器配置:

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<!-- 指定自定义转换器的全路径名称 -->
<bean class="cn.itheima.controller.converter.CustomGlobalStrToDateConverter"/>
</set>
</property>
</bean>





注意: 一定要将自定义的转换器配置到注解驱动上:

<mvc:annotation-drivenconversion-service="conversionService"/>

底层是set集合可以配置多个自定义zhuanhuanqi;

因为自定义转换器属于springMVC所以在springMVC.xml中配置


@RequestMapping

 

1)      通过RequestMapping注解可以定义不同的处理器映射规则。

URL路径映射

@RequestMapping(value="/item")或@RequestMapping("/item)

value的值是数组,可以将多个url映射到同一个方法

 

2)      窄化请求映射

在class上添加@RequestMapping(url)指定通用请求前缀, 限制此类下的所有方法请求url必须以请求前缀开头,通过此方法对url进行分类管理。

 

如下:

@RequestMapping放在类名上边,设置请求前缀: @RequestMapping("/item")

 

方法名上边设置请求映射url:

@RequestMapping放方法上:@RequestMapping("/queryItem")

 

访问地址为:/item/queryItem

 

请求方法限定 (一般不用)

 限定GET方法

@RequestMapping(method = RequestMethod.GET)

限定POST方法

@RequestMapping(method = RequestMethod.POST)

GET和POST都可以

@RequestMapping(method={RequestMethod.GET,RequestMethod.POST})

注意 value属性和method属性可以同时存在

 

请求转发&重定向

 

1)      返回ModelAndView

controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。

         2)      返回string

                   返回的string字符串和  modelAndView 中指定的view一样,返回的是页面的url

                 重定向: 在返回的字符串前加  redirect:


         3)      返回void

(使用原生的response和request;破坏了springMVC的结构不建议使用)
重定向: response.sendRedirect("url")

  请求转发: request.getRequestDispatcher("页面路径").forward(request,response);

注意:请求转发&重定向都可以使用model传递参数;model底层是加强的request

补充:

默认使用转发

         相对路径: 相对于当前目录,也就是在当前类的目录下,这时候可以使用相对路径跳转

         绝对路径: 从项目名后开始.

         在springMvc中不管是forward还是redirect后面凡是以/开头的为绝对路径,不以/开头的为相对路径

         例如:forward:/items/itemEdit.action为绝对路径

                   forward:itemEdit.action为相对路径

         一般使用绝对路径

Restful 支持

                   就是对url的命名标准,要求url中只有能名词,没有动词(不严格要求),但是要求url中不能用问号?传参

         传参数:

                   页面:${pageContext.request.contextPath}/items/itemEdit/${item.id}

@RequestMapping("/itemEdit/{id}")

@PathVariable("id") Integeridd

Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格,是对http协议的诠释。

资源定位:互联网所有的事物都是资源,要求url中没有动词,只有名词。没有参数

资源操作:使用put、delete、post、get,使用不同方法对资源进行操作。分别对应添加、删除、修改、查询。一般使用时还是post和get。Put和Delete几乎不使用。

URL不显示 ?, .action 等

 

@RequestMapping("/viewItems/{id}") 
public viewItems(@PathVariable("id") String id,Model model) throws Exception{
//方法中使用@PathVariable获取useried的值,使用model传回页面
//调用 service查询商品信息
ItemsCustom itemsCustom = itemsService.findItemsById(id);
return itemsCustom;
}


如果RequestMapping中表示为"/viewItems/{id}",id和形参名称一致,@PathVariable不用指定名称。

也就是将URL中的数据按照一定的格式提取其中的数据

自定义拦截器


作用:拦截请求,一般做登录权限验证时用的比较多

         1)需要编写自定义拦截器类,实现HandlerInterceptor接口

        

public class Interceptor implements HandlerInterceptor {

//执行时机:controller已经执行,modelAndview已经返回
//使用场景:记录操作日志,记录登录用户的ip,时间等.
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
}
//执行时机:Controller方法已经执行,ModelAndView没有返回
//使用场景:可以在此方法中设置全局的数据处理业务
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponsearg1, Object arg2, ModelAndViewarg3)
throws Exception {
}
//返回布尔值:如果返回true放行,返回false则被拦截住
//执行时机:controller方法执行前
//使用场景:权限验证
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
return true;
}
}


                  

         2)在spirngMvc.xml中配置拦截器生效

       

<mvc:interceptors>
<!-- 多个拦截器的执行顺序等于springMvc.xml中的配置顺序 -->
<mvc:interceptor>
<!-- 拦截请求的路径 要拦截所有必需配置成/** -->
<mvc:mappingpath="/**"/>
<!-- 指定拦截器的位置 -->
<bean class="cn.itheima.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>


注意:

也可以继承 HandlerInterceptorAdapter 类重写他的方法

多个拦截器的执行顺序等于springMvc.xml中的配置顺序

         拦截请求的路径    要拦截所有必需配置成/**

拦截路径path="/**"/*代表所有文件夹 * 代表多层


SpringMVC常用注解

标签:xml,RequestMapping,SpringMVC,配置,视图,核心技术,url,注解
From: https://blog.51cto.com/u_10176086/5951841

相关文章

  • Springmvc构造RESTful详细讲解
    ​​Springmvc构造RESTful详细讲解​​Rest介绍 /blog/1HTTPGET=>得到id=1的blog/blog/1HTTPDELETE......
  • springMVC10(放行静态资源访问)
    一、放行静态资源访问的目的:为了让静态资源不被"springMVC"访问,而被拦截。我们需要让它被"放行"二、目录结构是什么样?2.1.1-在main包下2.1.2-和java包同"级别"2......
  • 享誉全球的 Java 经典著作《Java核心技术》Java 17
    Java诞生27年来,这本享誉全球的Java经典著作《CoreJava》一路伴随着Java的成长,得到了百万Java开发者的青睐,几乎出现在每个“学Java要看什么书”类似的书单里,影响了......
  • springMVC08(REST风格的“入门案例”)
    一、用REST风格,来演示"增、删、改、查"操作。1.1:增POST1.1.1:用PostMan测试:增POST:代码块@RequestMapping(value="/users",method=RequestMethod.POST)@R......
  • SpringMvc的基础
     首先SpringMvc是一款实现MVC模型的轻量级web框架,主要用在写那个controller也就是控制器,也就是表现层代码的书写,以前使用Servlet来写这个表现层,现在的话使用SpringMvc就......
  • springMVC07(REST风格)
    一、REST风格的解释:(资源的访问形式)二、总结:2.1-REST:资源访问形式2.2-4个动作(GET、POST、PUT、DELETE)2.3-用"REST"风格开发,我们就叫"RESTful"......
  • springMvc23-配置maven环境和创建maven项目(建议收藏,超全超详细)
    1本次歌谣就对如何创建一个maven项目做一个详细的讲解,毕竟卡了我三天,久久不能入眠,也搜了网上很多的博客都没有顺利的解决maven项目的创建。这篇建议大家收藏,总会用到的。不......
  • springmvc web 大文件上传源代码
    ​ 最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的......
  • SpringMVC笔记(尚硅谷)
    目录一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖3、配置web.xm......
  • SSM整合(spring-springmvc-mybatis)之HelloWorld
    一、目录结构  helloworld(SSM)创建步骤:步骤一:创建一个类型为DynamicWebProject 名称为ssm的项目步骤二:加入jar包:spring核心jar包:commons-logging-1.2.jarspring-bean......