SpringMVC笔记 3 视图解析器 常见功能 & 处理静态资源 &类型转换器

SpringMVC视图解析器 & 常见功能 & 处理静态资源类型转换器



前言

 SpringMVC 要实现省略控制器的部分直接实现从客户端到目标端,要在控制器中写@RequestMapping("XXX") 实现将参数传递并跳转 到 文件视图文件中,现在直接省略控制器中有注释 @RequestMapping("XXX")的方法,直接跳转

SpringMVC  配置相关标签 ,之后直接可以实现将字符串进行切割,插入对象中。    


代替 @RequestMapping("XXX") 

一、视图解析器

1. 在springMVC的配置文件中直接实现跳转至目标页面

<!-- 配置视图解析器  InternalResourceViewResolver-->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <property name="prefix"  value="/views/"></property>
     <property name="suffix"  value=".jsp"></property>

</bean>

<!--  实现将配置的跳转控制和控制器的requestMapping注解共存--> 
<mvc:annotation-driven></mvc:annotation-driven>
<!-- mvc:view-controller path直接跳转 view-name --> 
<mvc:view-controller path="handler/mvcViewController"  view-name="sucess"/>
</beans>

 在视图解析器下面直接 配置 mvc:view-controller标签。即可实现从一个 页面不经过handler控制器直接跳转到目标页面。path即为@RequestMapping("XXX") 的内容,view-name 即是返回页面,经过视图解析器处理后直接变为目标页面。  该配置会优先于手写的 @RequestMapping("XXX"),若想实现二者共存,需要增加注解<mvc:annotation-driven></mvc:annotation-driven>。该注解为常用注解,需要熟练掌握。

2.  如果不希望handler控制器中的方法实现 请求转发/重定向 时被springMVC的配置文件影响,需要自行配置目标文件的前后缀,并在返回字符串前添加 forward:/redirect:  s ;其中的之前的返回值字符串不再由视图解析器处理,需要手动添加字符串对应的前后缀,实现 请求转发/重定向 。

二、处理静态资源

静态资源只 图片、文字、HTML文件 等不会和用户产生交互的资源,放在项目根目录下也无法直接访问静态资源(报错404,因为请求被web.xml中的springDispatcherServlet已经拦截了一切请求,该类的处理方式就是直接寻找该请求对应的注释 @RequestMapping() )。   

只需要在springMVC的配置文件添加一行配置(两个注解,一个之前的mvc:annotation-driven),当一个请求没有对应的 RequestMapping 时,可以使用一些Tomcat中默认的servlet处理,添加配置  mvc:default-servlet-handler 即可。 之后在web.xml 中配置相关的静态资源访问路径的servlet。

1.添加springMVC.xml 的bean配置

代码如下(示例):

<mvc:annotation-driven></mvc:annotation-driven>
<!-- mvc:view-controller path直接跳转 view-name --> 
<mvc:view-controller path="handler/mvcViewController"  view-name="sucess"/>

<mvc:default-servlet-handler/>
以上的 default-servlet-handler 相当于添加引用了Tomcat自带的web.xml中的servlet配置。在Tomcat的安装目录下进入conf-->web.xml 中,即可发现:<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
 在请求中输入相关静态资源的地址即可直接访问静态资源 :http://localhost:8080/SpringMVC_001/picture/point.jpg

2.类型转换器

类型转换器主要作用于三层模型中 表示层的 前台与后台之间。

具体步骤大概分3步 :  1. 引入一个类实现转换器的接口  2.将该类注册到springMVC的配置文件中 3.将转换器的bean再注册到service中  最后将相关的service再注入到 annotation-driven中。 在使用该转换器时,在控制器的方法中的参数前也要添加相关的注解 。

index.jsp 首页代码如下:

   <form action= " handler/convert "  method="post">
         id-name : <input   name="convertInfor"  type="text" /> <br>
     ----  "convertInfor"  ---
     <input type="submit" value=" 转换器">
     </form>

将 name="convertInfor" 的信息(1-zs)通过控制器处理(将id-name 格式的字符串写入到person对象中),通过在springMVC.xml 文件中的配置,可实现相关功能。配置信息如下:

<!-- 将  MyConvert 的bean加载到配置文件中--> 
<bean id="myconvert"  class="priv.mvc.handler.MyConvert"></bean>
<!-- 将转换器的bean加载到   ConversionServiceFactoryBean -->
<bean id="MyConversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
  <property  name="converters">
    <set>
      <ref bean="myconvert" />
    </set>
  </property>
</bean>

<!--  加载ConversionServiceFactoryBean 到  -->
 <mvc:annotation-driven conversion-service = "MyConversionServiceFactoryBean">
 </mvc:annotation-driven>
 

控制器中的代码如下 : 

 @RequestMapping(value="handler/convert")  // 
 public String  convertTest( @RequestParam("convertInfor") Person person) {
	 
		System.out.println(person.getId()+"-*-"+person.getName());
	 return "sucess";
 }

 在新建一个类进行处理字符串生成对应对象:

package priv.mvc.handler;

import org.springframework.core.convert.converter.Converter;

import priv.mvc.entity.Person;

public class MyConvert implements Converter<String,Person> {

	@Override
	public Person convert(String source) {
		// TODO Auto-generated method stub
		Person person = new Person()  ;
		// change String source to array , then add elements to Person 
		String[] personEle = source.split("-") ; //id-name
		person.setId(Integer.parseInt(personEle[0] ) );
		person.setName (personEle[1] );
				
		return person;
	}

 数据格式化 实现 字符串-时间日期 转换

在前端输入 某些特定形式的字符串可以转换为Java中对应的日期格式。形如(2022.05.10)格式的字符串可以直接转换为 Java中 的 Date 对象格式的字符串。

前端显示代码如下(其中下方的birthday 框中用以存储,传递日期格式字段,目前自定义的规则为 yyyy.MM.dd ), 对应Java中的Date对象:

   <!-- 数据格式转换 以日期为例 yyyy.MM.dd  -->
          <form action="handler/formmat"   method="post">
         id: <input   name="id"   /> <br>
        name :  <input   name="name"   /> <br>
    
    birthday :  <input   name="birthday"   /> <br>
     <input type="submit" value="formatConversion">
     </form>

在实体类(Person)中,将birthday属性对应的 日期类型做注解处理( 为实现 数据格式化,可以通过 使用注解  @DateTimeFormat(pattern="yyyy.MM.dd") )使其接收到特定的字符串可以转换为Date 对象:

import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;
public class Person {
	private int id ;
	private String name ;
	private Address address ;
	@DateTimeFormat(pattern="yyyy.MM.dd")
	private Date birthday ; //birthday
	
.....
}

在 springMVC.xml 中加载,需要将之前加载的 类型转化器注释掉,使用新的类型转换器bean,该bean对应的类为之前bean对应的类的子类。修改后的xml 内容如下:

<!-- mvc:view-controller path直接跳转 view-name -->
<mvc:view-controller path="handler/mvcViewController"  view-name="sucess"/>

<!-- 用以执行加载静态资源 -->
<mvc:default-servlet-handler/>
<!-- 将  MyConvert 的bean加载到配置文件中--> 
<bean id="myconvert"  class="priv.mvc.handler.MyConvert"></bean>
<!-- 将转换器的bean加载到   ConversionServiceFactoryBean 
<bean id="MyConversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
  <property  name="converters">
    <set>
      <ref bean="myconvert" />
    </set>
  </property>
</bean>
-->
<!--  加载ConversionServiceFactoryBean 到  -->
 <mvc:annotation-driven conversion-service = "conversionService">
 </mvc:annotation-driven>
 
 <!-- 数据格式化测试 日期 -->
 <bean id="conversionService"  class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> 
      <property  name="converters">
    <set>
      <ref bean="myconvert" />
    </set>
  </property>
 </bean>
 

 控制器代码如下:

 @RequestMapping(value="handler/formmat")  // 数据格式化
 public String testFormmat( Person person) {
		System.out.println(person.getId()+"-*-"+person.getName()+"-*-"+person.getBirthday());
	 return "sucess";
 }

 运行后结果如下:

总结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值