springmvc学习

spring对象工厂

在web.xml中配置的核心控制中心DispatcherServlet,它在初始化的时候,会加载一个配置文件,会根据配置文件初始化bean工厂,默认情况下,会到WEB-INF下面寻找一个配置文件,该配置文件的名称应为该[sevlet名称]-servlet.xml

当前我们的jsp页面是放在WEB-INF下面的,如果想在浏览器中直接访问jsp是不可能的,所以需要通过Controller转到jsp下面上面。但是这个Controller是不需要处理任何业务逻辑

如果请求的url和返回的视图是相同的,即请求的为hello.do,返回视图如果是hello的话,可以使用一个更简单的视图解析器:

当提交的请求有表单参数时,如果还使用现在的控制器时,那么如果有多个参数,接收起来是非常麻烦的:

数组绑定

上面只有字符串,可以正常的转换没有异常,但如果存在复杂类型的话,将出现数据绑定异

因此要自定义属性编辑器:

表单控制器

表单控制器的工作原理:表单控制器一个url路径addEmployyForm.do分为两个请求,一个get,一个post,当发起get请求时,请求会认为是个转向页面的请求,然后运行referenceData方法准备需要的参数,如这里的部门选择信息,通过formView指向跳转到

表单页面,表单的action可以为空,这样就提交到相同的url上,但必须是post请求,当post请求时,onSubmit()方法会被处理,进而转向到成功页面。

多处理方法的控制器

如上是多方法控制器的使用流程。

1、继承类:MultiActionController

2、编写控制器处理方法,这里一个toAdd,一个addEmp

注意方法的签名:

public (ModelAndView | Map | String | void) actionName(HttpServletRequest request, HttpServletResponse response, [,HttpSession] [,AnyObject]);

返回类型必须为:ModelAndView | Map | String | void

参数至少为:HttpServletRequest request, HttpServletResponse response

可以直接接收参数对象,如上面的Employy emp,如果有session,session必须为第三个参数

3、配置

关键在于如何映射方法,这种映射策略叫做方法名解析器。

1)InternalPathMethodNameResolver

该解析器是根据路径来解析的,如路径为.../toAdd.do那么就会去找toAdd方法

2)ParameterMethodNameResolver

该解析器是根据一个参数来找方法的,如路径为…/emp.do?func=toAdd就会去找toAdd 方法。

3)PropertiesMethodNameResolver

从属性文件中读取配置,少用。

其他处理器

1、

class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/> (推荐)

该处理器会根据类名去映射具体的控制器类。

如路径为abc.do则会去找AbcController控制器类。

这样就大大减少了之前根据url映射的配置信息。

使用这种处理器,如果控制器是多方法的控制器,里面的方法名解析器如果是基于参数的,仍然可以正常工作,如果是基于路径的,则使用下面的请求路径:

employyMutil/toAdd.do

这样会自动将employyMutil解析为employyMutilController然后再去配置方法toAdd

2、 (少用)

需要在控制器配置时bean上指定name属性

基于注解的springmvc

基于注解的参数处理(参数位置没有限制)

HttpServletRequest HttpServletResponse

HttpSession

@PathVariable AnyType:路径参数

@RequestParam:

@CookieValue AnyType cookieName

@RequestHeader() anyType abc : 如@RequestHeader(“user-Agent”) anyType abc PrintWriter out

Map model:用于返回数据

直接使用实体类型获取表单参数:User user

@RequestMapping

public String testCommod(User user,BindingResult result){}

这个result对象可以用来验证实体中的类型是否都转换正确。

基于注解的返回类型

一、void:

1)

@RequestMapping

public void testVoid(PrintWriter out){

out.print(“xxx”);

}

2)

@RequestMapping(“/xxx”)

public void testVoid(){

//没有写到页面东西时,返回根据请求路径生成一个默认的返回页面// ${appName}/test/xxx.do → test/xxx →/WEB-INF/page/test/xxx.jsp

}

二、String 类型

即使只返回字符串,如果参数中有model也会返回

三、返回任意的对象

public User testUser(){

return null;

}//此时这个user会自动加入到model中,key为类名首字母小写,值为对象//视图名为默认视图名

public List queryUsers(){

//model{“userList”,user};

}

/*自动生成key的规则*/

四、返回ModelAndView

重定向视图

一般为了避免重复提交使用重定向到成功页面

报表视图拦截器

视图国际化

MyEclipse有一个国际化插件:ResourceBundleEditor_v0.8.0

验证

相关文档
最新文档