首先,AJAX是一个缩写,AJAX=Asynchronous JavaScript And XML(异步 JavaScript 及 XML),其次AJAX 并不是一种新的编程语言,而仅仅是一种新的技术,它可以创建更好、更快且交互性更强的 web 应用程序。
AJAX 使用 JavaScript 在 web 浏览器与 web 服务器之间来发送和接收数据。通过在幕后与 web 服务器交换数据,而不是每当用户作出改变时重载整个 web 页面,AJAX 技术可以使网页更迅速地响应。
在这里,简单说一下,传统的 web 应用程序会把数据提交到 web 服务器(使用 HTML 表单),在 web 服务器把数据处理完毕之后,会向用户返回一张完整的新网页。由于每当用户提交输入,服务器就会返回新网页,传统的 web 应用程序往往运行缓慢,且越来越不友好。
优点: 通过 AJAX,web 应用程序无需重载网页,就可以发送并取回数据。完成这项工作,需要通过向服务器发送 HTTP 请求(在幕后),并通过当服务器返回数据时使用 JavaScript 仅仅修改网页的某部分。
引入JQuery
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>删除按钮:
<button type="button" class="btn btn-default" title="批量删除" onclick="deleteAll()"> <i class="fa fa-refresh"></i> 批量删除 </button>controller层:
@RequestMapping("/batchDelete.do") public String batchDelete(String userList){ String[] strs = userList.split(","); // string类型强制转换成int类型数组 List<Integer> ids=new ArrayList<>(); for(int i=0;i< strs.length;i++){ ids.add(Integer.parseInt(strs[i])); } userInfoService.batchDelete(ids); return "redirect:findAll.do"; }编写script代码:
function deleteAll() { var checkedNum= $("input[name='ids']:checked").length; if(checkedNum==0){ alert("至少选中一项删除!"); return; } if(confirm("确定删除选中的用户?")){ var userList = new Array(); $("input[name='ids']:checked").each(function(){ userList.push($(this).val()); }); } $.ajax({ type:"post", url:"${pageContext.request.contextPath}/user/batchDelete.do", data:{userList:userList.toString()}, success:function () { alert("删除成功!"); location.reload(); }, error:function () { alert("删除失败!"); } }); }大致效果图类似:
①拦截器是基于java的反射机制的,而过滤器是基于函数回调。 ②拦截器不依赖与servlet容器,过滤器依赖于servlet容器。 ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。 ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。 ⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。拦截器可以获取ioc中的service bean实现业务逻辑
spring-mvc.xml 配置
<mvc:interceptors> <!-- 拦截器 --> <mvc:interceptor> <mvc:mapping path="/**" /> <mvc:exclude-mapping path="/res/**"/> <mvc:exclude-mapping path="/login/**"/> <mvc:exclude-mapping path="/404.html"/> <bean class="com.cms.intercept.SecurityInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>service层实现方法:
@Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { //1.查询当前登录的用户信息 UserInfo userInfo=userDao.doLogin1(username); //2.查询当前的用户有多少角色 List<Role> roleList=roleDao.findRoleByUserId(userInfo.getId()); //3.把角色放入用户中 userInfo.setRoleList(roleList); User user=new User(userInfo.getUsername(),"{noop}"+userInfo.getPassword(),getAuthority(userInfo.getRoleList())); return user; } private Collection<? extends GrantedAuthority> getAuthority(List<Role> roleList) { List<SimpleGrantedAuthority> list=new ArrayList<>(); for(Role role:roleList){ list.add(new SimpleGrantedAuthority("ROLE_"+role.getRolename())); } return list; }效果: 抵御一切非法输入,除了登录匹配外无法进入系统。
正常进入admin:具备用户和角色两个管理; 正常进入user:仅一个角色管理;
