springmvc
springmvc解析
springMVC图解
一、流程实现文字解析
前端控制器 DispatcherServlet(本质:servlet;功能:中转站)
1、客户端通过浏览器向前端控制器发出请求,前端控制器接到客户端发来的请求后,发送给处理器映射器
处理器映射器 HandleMapping(本质:提供映射关查询)
2、处理器映射器通过URL查看是否有对应的hander可以处理这个请求,并把结果返回给前端控制器
处理器映射器 handerAdapter(功能:找hander)
3、DispatcherServlet将请求和对应的响应的处理器关系交给处理器适配器,处理器去找真正可以处理的处理器hander
处理器hander
4、处理器处理并将处理后的model和view返回给前段控制器。
视图解析器 ViewResolver(本质:映射关系)
5、前段控制器将view的名字交给视图解析器ViewResolver,视图解析器会将返回 的view的名字对应真正的视图对象,处理得到真正的视图并返回给DispatcherServlet。
视图渲染 View(功能:数据嵌入视图)
6、前段控制器得到视图后,将从handler里得到的model发送给视图渲染,视图渲染将model嵌入从ViewResolver得到的jsp返回给客户端。
二、对应配置
1、DispatcherServlet的配置(web.xml中配置映射关系,并设置配置文件的位置到src目录下)
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation<.param-name>
classpath:/springmvc-servlet.xml
springmvc
*.action
2、spring配置文件(springmvc-servlet.xml的配置)
<context:component-scan base-package=“cn.tedu.springmvc.controller”>
3、处理器映射器由注解实现 @RequestMapping(value="hello.action")三、springmvc工作原理
1、当服务器启动的时候,回首先加载web.xml文件,之后通过引入核心配置文件,开始加载springmvc-servlet.xml文件。
2、当解析到其中的<context:component-scan base-pacakage="">开始扫描交于spring的包,发现其中有@Controller注解的类,就把这个类当做控制器来管理,如果配置过mvc:annotation-driven/,就会解析springmvc注解
3、当解析到@RequestMapping("/hello.action"),将指定的地址和方法映射关系进行保存
4、当用户发出一个请求,springmvc查找是否有对应的关系,如果有找到对应的处理器处理,并返回modelandview,如果没有返回404.
四、注意
1、当引入或者复制项目的时候,要properties-myecplise-web-webcontextroot更改虚拟路径名字;
2、在springmvc的注解开发中,可以选择性的接受request和response对象来使用
3、{pageContext.request.contextPath}/hello.action
五、error1:@RequestMapping("/hello.action")
error2:web.xml文件出错了
六、查看myecplise的默认字符集:
windows-preferences-workspaces查看到默认字符集为gbk
解决乱码响应
response.setContentType(“text/html;charset=UTF-8”);
七、转发和重定向
return “foward:/hello11.action”
return “redirect:/hello11.action”
八、@ModelAttribute会在任意handle执行之乡执行,将zs存入model中,供后续使用
@ModelAttribute(“uname”)
public void mx(){
syso("输出什么都可以”)
return “zs”;
}
九、当通过ajax访问页面的时候得到的不是一个页面,而是一段文字时,可以直接写出
@Controller
public class A{
@RequestMapping("/a.action")
public void m(PrintWriter p){
p.write();
}
}
ajax实现自动发送json格式的数据
@Controller
public class A{
@RequestMapping("/a.action")
public void m(HttpServletResponse response){
response.getWriter().write("{name:‘zs’,age:18,addr:[bj,sh,zz]}");
}
}
@Controller
public class A{
@ResponseBody
@RequestMapping("/a.action")
public void m(HttpServletResponse response){
User user = new User();
user.setuserName(“zs”);
user.setuserAge(19);
Dog dog = new Dog();
dao.setName("旺财”);
dog.setAge(2);
user.setDog(dog);
return user;
}
}
@ResponseBody这个注解,springmvc会将返回的对象自动转换为json格式写到响应中