一.spring-mvc
ssm(spring mvc) 作用就是你的controller(控制层,替换以前的servlet)
spring mvc是spring框架分解出来的一部分
spring mvc的执行过程:(1)首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
(2)DispatcherServlet——>HandlerMapping,映射处理器将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象;
(3)DispatcherServlet——>HandlerAdapter,处理器适配器将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
(4)HandlerAdapter——>调用处理器相应功能处理方法,并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
(5)ModelAndView对象(Model部分是业务对象返回的模型数据,View部分为逻辑视图名)——> ViewResolver, 视图解析器将把逻辑视图名解析为具体的View;
(6)View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构;
(7)返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。
核心对象:第一个对象:DispatcherServlet(相当于一个中继站,不做处理在,只转发委托)
第二个:HandelerAdapter(处理器)
第三个:视图渲染器(viewResolver)
开发一个spring mvc
第一步:导入核心jar包
saopalliance-1.0.jar
aspectjweaver-1.6.9.jar
commons-logging-1.1.1.jar
spring-aop-3.2.13.RELEASE.jar
spring-beans-3.2.13.RELEASE.jar
spring-context-3.2.13.RELEASE.jar
spring-core-3.2.13.RELEASE.jar
spring-expression-3.2.13.RELEASE.jar
spring-web-3.2.13.RELEASE.jar
spring-webmvc-3.2.13.RELEASE.jar
核心xml文件 springmvc.xml配置:请求地址配置统一的前缀(目录的文件)和后缀(.jsp .html)
第二步:加载web.xml
<!--扫描controller下所有的包-->
<context:component-scan base-package="com.offcn.controller"/>
<!--开启注解驱动-->
<mvc:annotation-rdiven/>
<!-- <!–当你的请求地址是index.html的时候,就会到UserController这个类–>
<bean name="/index.html" class="com.offcn.UserController"></bean>-->
<!--完成视图的对应-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--开始配置前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--开始配置后缀-->
<property name="suffix" value=".jsp"/>
</bean>
核心xml文件在哪里加载 web.xml最先加载,所以核心配置文件要配置到web.xml
第三步:加载springmvc-servlet.xml
<!--注解版:扫描controller下所有的包-->
<context:component-scan base-package="com.offcn.controller"/>
<!--开启注解驱动-->
<mvc:annotation-rdiven/>
<!-- <!–非注解版:当你的请求地址是index.html的时候,就会到UserController这个类–>
<bean name="/index.html" class="com.offcn.UserController"></bean>-->
<!--完成视图的对应-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--开始配置前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--开始配置后缀-->
<property name="suffix" value=".jsp"/>
</bean>
第四步:
将jsp中的参数传到controller中
@RequestMapping("/UserController")*/
public class UserController implements Controller {
/*这个方法,当你的客户端发送请求的url地址,跟这个类对应上 就会走这个方法(HanderMapping)*/
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//return就是你要跳转的页面,参数就是处理后要跳转的界面
return new ModelAndView ("doIndex");
}
//注解方式1:注解里的userName代表你参数的键,后面的userName是它的值
@RequestMapping("index")
public String index(@RequestParam("userName")String userName){
System.out.println (userName);
return "doIndex";
}
//注解方式2:)value代表你网页拼接的键,required这个代表是否必须拼接这个参数,false代表可以拼接也可不拼接
@RequestMapping("index")
public String index(@RequestParam(value = "userName",required = false)String userName){
System.out.println (userName);
return "doIndex";
}
//注解方式3:这种方式必须传参 method设置请求方式 报405错误是因为你的请求方式和你接受方式不统一
@RequestMapping(value = "index",params = {"userName"},method = RequestMethod.GET)
public String index(String userName){
System.out.println (userName);
return "doIndex";
}
//注解方式4:@PathVariable这个注解就是匹配你url上的任何参数,注解上的pid跟你的参数一定要一样,这样才能拿到你具体的数据,这种方式只能传一个参数
@RequestMapping(value = "/index/{userName}")
public String index(@PathVariable String userName){
System.out.println (userName);
return "doIndex";
}
把controller的数据传到jsp页面中
@RequestMapping("/toDoIndex")
public ModelAndView toDoIndex(@RequestParam(value = "userName",required = false)String userName){
//获取userName
//构建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
//把值放到ModelAndView(以键值对的形式来传递)
modelAndView.addObject("userName",userName);
//把你跳转的界面放到modelAndView里
modelAndView.setViewName("doIndex");
return modelAndView;
}
//返回就是我们要跳转的地址,view model,这个model不用实例化出来,直接传进去(用的最多)
@RequestMapping("/toDoIndex")
public String toDoIndex(String userName,Model model){
//model里面来添加数据,同样是以键值对来传递参数的
model.addAttribute("userName",userName);
return "doIndex";
}
//通过map把数据传过去
@RequestMapping("/toDoIndex2")
public String toDoIndex2(String userName, Map<String,Object> map){
map.put("userName",userName);
return "doIndex";
}
/*最终版*/
@RequestMapping("/toUpdate")
public String toUpdate(@RequestParam(value = "userName",required = false)String userName,
@RequestParam(value = "pwd",required = true)String pwd){
return "doIndex";
}
当web项目发布
web.xml(加载前段控制器,引入核心配置文件) 用户发送一个请求----->
(当请求有匹配的controller)—>到你的实体bean(controller)---->
返回一个modelAndView----->springmvc-servlet.xml---->视图渲染器----->网页