依赖
<dependencies>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.2.10.RELEASEversion>
dependency>
dependencies>
Handler是一个Controller的对象和请求方式的组合的一个Object对象
HandleExcutionChains是HandleMapping返回的一个处理执行链,它是对Handle的二次封装,将拦截器关联到一起。然后,在DispatcherServlert中完成了拦截器链对handler的过滤。
DispatcherServlet要将一个请求交给哪个特定的Controller,它需要咨询一个Bean——这个Bean的名字为“HandlerMapping”。HandlerMapping是把一个URL指定到一个Controller上,(就像应用系统的web.xml文件使用将URL映射到servlet)。
Handler 中文意思叫操作者,它的主要作用是用于处理映射。
Controller 中文意思叫控制器,一般来说Controller就是一种Handler,但是并非所有Handler的都是Controller。通常我们Controller当中采用的映射处理策略是/或者是方法对应的HTTP客户端请求,这是基于请求的URL地址与HTTP方法来完成的,这种采用的就是我们上面概念提到的HandlerMapping的Bean来进行处理。
@RequestMapping("映射路径")
public ModelAndView hello(){
ModelAndView mv = new ModelAndView();
mv.addObject("msg","hello world!");
mv.setViewName("index.jsp");
return mv;
}
@RequestMapping("映射路径")
public void xx(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
request.setAttribute("msg", "操作成功");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
public String yy(Model model){
model.addAttribute("msg", "success");
return "forward:/index.jsp";//forward写不写都是转发,redirect代表重定向.
}
}
① addObject(String attributeName, Object attributeValue)方法中的两个参数分别表示,第一个参数表示设置模型对象的名字,类似于我们声明变量的变量名一样,便于我们后期在页面获取模型对象,如果添加两次重名的模型对象,后者会覆盖前者的值。第二个参数表示具体模型对象的值,它可以是任何一种类型。
② addAll0bjects(Map modelMap)也是添加我们模型数据的方法,只不过它的参数是一个Map类型的集合
③ setView(String viewName)方法,参数填写一个视图的名称,如果我们没有配置视图解析器的话,默认是从WebApp/WebContent路径下面去寻找页面,如找不到页面则会出现404的错误。
视图解析器的作用是将逻辑视图转为物理视图,所有的视图解析器都必须实现ViewResolver接口。
SpringMVC为逻辑视图名的解析提供了不同的策略,可以在Spring WEB上下文中配置一种或多种解析策略,并指定他们之间的先后顺序。每一种映射策略对应一个具体的视图解析器实现类。程序员可以选择一种视图解析器或混用多种视图解析器。可以通过order属性指定解析器的优先顺序,order越小优先级越高,SpringMVC会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则抛出ServletException异常。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/">property>
<property name="suffix" value=".jsp">property>
bean>
prefix:表示前缀,简而言之就是返回视图的时候,会在返回路径的前面加上前缀
suffix:表示后缀,与前缀同理,会在返回路径的后面加上后缀
关于重定向,一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理,但如果返回的字符串中带forward:或redirect:前缀时,SpringMVC会对它们进行特殊处理:将forward: 和redirect: 当成指示符,其后的字符串作为URL 来处理。
Ajax本章节我们采用的JQuery给我们封装好的Ajax方法,所以第一步我们需要导入JQuery的库。在我们视图页面(JSP、HTML等)导入我们的JQuery的库。
<script src="jquery-1.10.2.min.js" >script>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
同步:发送一个请求,等待返回,然后再发送下一个请求
异步:发送一个请求,不等待返回,随时可以再发送下一个请求
同步:可以避免出现死锁,读脏数据的发生,一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错,同步就会按顺序来修改。
异步:可以提高效率了,现在cpu都是双核,四核,异步处理的话可以同时做多项工作,当然必须保证是可以并发处理的。
在我们JQuery的Ajax方法中,我们只需要设置一个属性就可以设置同步或者异步了。默认JQuery中Ajax是使用的是异步处理(即sync:true)。如需改成同步状态,需要在Ajax方法中放入sync:false。即可变成同步状态。
局部刷新是指无需重新加载整个网页的情况下,通过ajax的回调函数更新部分网页的技术。在JQuery中Ajax方法中可以在回调的success 或者error回调方法中对页面部分控件进行局部修改,达到局部刷新的目的。