SpringMVC教程 入门案例 常见问题

SpringMVC是spring的一大组件,来代替传统的servlet。首先要明白SpringMVC的调用过程。

SpringMVC调用过程


1.客户发送request请求localhost:8090/SpringMVC/hello.action

2.请求处理器映射器处理handler(找到匹配的Controller类)

3.返回能够处理的那个Controller类

4.请求处理器适配器执行handler(内部按照匹配规则执行)

5.执行handler(Controller-service--dao)

6.将处理结果进行返回,返回ModelAndView对象(model表示处理后的数据   View表示页面的逻辑名称hello)

7.将ModelAndView对象返回给前端控制器

8.请求视图解析器解析View对象(将页面的逻辑名称,拼接成一个完整的页面路径/WEB-INF/hello.jsp)

9.将完整的页面路径再次返回值给前端控制器

10.将model数据填充到页面中的Request域中

Springmvc入门

1、配置文件方式

1导入相关jar



2 web.xml配置前段控制器

       前端控制器实际上就是一个servlet,springMVC的前端控制器就是这个DispatcherServlet。他所在的位置如图:


在Web.Xml中配置这个servlet


这表示所有以”*.action”结尾的请求,都交给DispatcherServlet这个前端控制器,这个前端控制器不是一个class,同样我们可以通过简单的xml配置就可以让这个控制器以及其他的处理器映射器,视图解析器起作用。


 3 配置springmvc的核心配置文件

       SpringMVC核心配置文件命名规则

Servlet的name+“-servlet.xml”那么这里就是springmvc-servlet.xml



       这个过程也是让处理器映射器起作用

       Spring的核心配置文件已经配置好了那个访问路径,需要用那个Controller,下面我们来实现controller

4.实现controller


5 配置视图解析器


经过这五步后就实现了简单的springmvc的入门。除了用配置文件的方式外Spring还提供了简单的通过注释来实现。

2、注解方式实现

       前两步和配置文件相同,但在配置springmvc核心配置文件时。需要开启spring的注解,不用去新加一个bean来映射url和controller的关系。

     1 2同上

     3 开启springmvc的注解同时配置好视图解析器


4 实现controller


可以直接添加@RequestMapping来说明那个请求用哪个类或哪个方法来处理。

5注意

       @RequestMapping标注在类上表示这个url和子url都在这个类处理,可以用@RequestMapping来标注类和类中的方法

比如:


@RequestMapping(/user)
public class Usercontroller{
	@RequestMapping(/users)//表示只有url=“/user/users”时交给这个方法来处理
	public String list(Model model){
		model.addAttribute(“user”,user);
		return “user/list”
}
}

3、怎么获取页面参数

       一般情况下springmvc可以直接通过形参来获取传递过来的参数


前台传递可以直接get方式?后添加相应参数,或者页面中的name属性的值应该与接收方法的参数名称一致。,比如


4、怎么返回给页面参数

       返回参数需要用到Springmvc的model对象用法和map一样,key-value的形式

前台获取也直接用map的方式获取。

@RequestMapping(/user)
public class Usercontroller{
	@RequestMapping(/users)//表示只有url=“/user/users”时交给这个方法来处理
	public String list(Model model){
		model.addAttribute(“user”,user);//添加返回参数到response域中
		return “user/list”
}
}

几个常见问题

解决中文乱码问题

<!--解决中文乱码问题  -->
  <filter>
          <filter-name>characterEncoding</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>
  </filter>
  
  <filter-mapping>
          <filter-name>characterEncoding</filter-name>
          <url-pattern>/*</url-pattern>
  </filter-mapping>

转发和重定向

1.转发:

1.浏览器的地址不会发生改变

2.转发能够携带参数

forward:/toUser.action   转发的关键字不能错

关键字      url

 

2.重定向

1.浏览器的地址发生改变

2.重定向不负责传递参数

redirect:/toUser.action

关键字        url

同名提交问题

如果遇到同名提交问题,那么如果接收参数为String类型时,那么将会把用户提交的信息拼接成一个字符串,

如果接收的参数为数组时,那么SpringMVC将会把同名提交自动的赋值到数组中。

对象封装参数

如果参数个数较多时,可以使用对象进行封装,页面中的name属性的值应该和对象中的属性保持一致,并且set方法不能省略,否则不能正确注入



为对象的引用封装参数

SpringMVC能够为对象的引用赋值

1.        name属性的值



2. set()不能省略

如果想进行赋值,必须添加set方法

页面中的name属性的值和参数名称不匹配

其他属性值的用法

@RequestParam(value="state",required=true,defaultValue="长不大的成年人")String sta

 

Value:页面中的name属性值

required:如果为true则表示必须传递该参数   false表示可以不传

defaultValue:如果该值为null时,那么会添加默认值

日期类型的转化

如果想转化日期格式例如 2017-11-11 这时如果不做任何处理那么必然会报400错误   400表示 类型匹配错误


解决方案:自定义日期格式

 

@InitBinder

publicvoid InitBinder (ServletRequestDataBinder binder){

binder.registerCustomEditor(

java.util.Date.class,

newCustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));

}

如果将上述代码配置到Controller中那么当前的controller任意的方法都能够实现日期格式的转化。

 

如果其他的Controller也需要进行日期格式的转化,那么必须添加上述代码,这时造成了代码的重复。

所以,日期转化工具通常情况下放到基本类中,别的类继承即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值