- 【问题解决】org.springframework.web.util.NestedServletException Handler dispatch failed;
m0_74825260
面试学习路线阿里巴巴前端
详细异常信息:org.springframework.web.util.NestedServletException:Handlerdispatchfailed;nestedexceptionisjava.lang.NoClassDefFoundError:javax/xml/bind/DatatypeConverteratorg.springframework.web.servlet.Dispa
- Spring MVC的工作流程
ItKevin爱java
javawebjavajavaSpringMVC
SpringMVC的工作流程是一个典型的MVC(Model-View-Controller)架构在Web开发中的应用。下面将详细描述SpringMVC的工作流程:一、用户发起请求用户请求:用户通过浏览器向服务器发送HTTP请求,这个请求首先被SpringMVC的前端控制器(DispatcherServlet)拦截。二、DispatcherServlet处理请求请求转发:DispatcherServ
- Spring MVC流程
zhujilisa
Springspring
SpringMVC启动流程启动流程父子容器请求处理MultipartFile解析参数传递返回值处理HandlerInterceptor启动流程启动Tomcat解析web.xml创建DispatcherServlet调用DIspatcherServlet的init方法4.1创建Spring容器4.2发布ContextRefresheEvent4.3在OnRefreshed方法中触发initStrat
- 若依导出PDF
yu_zheng5163
pdfwindows
后端/***导出PDF*@paramphysicalExamination*@paramresponse*@throwsException*/@GetMapping("/exportPDF")publicvoidexportPDF(PhysicalExaminationphysicalExamination,HttpServletResponseresponse)throwsException{/
- 在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题
老友@
后端springbootjava后端requestTomcat异步线程多线程
在SpringBoot中使用异步线程时的HttpServletRequest复用问题一、问题描述:异步线程操作导致请求复用时`Cookie`解析失败1.场景背景2.问题根源二、问题详细分析1.场景重现2.问题分析三、解决方案四、总结一、问题描述:异步线程操作导致请求复用时Cookie解析失败1.场景背景在一个Web应用中,通常每个请求都会有一个HttpServletRequest对象来保存该请求的
- JavaWeb后端知识总结
G-Vict
javaservletjavatomcat
JavaWeb后端学习阶段重点知识一、Servletsun公司制定的一种用于扩展web服务器的功能的组件规范。开发步骤新建符合javaweb项目的工程servlet类继承HttpServlet重写service方法service(HttpServletRequestrequest,HttpServletResponse)request:请求response:响应javaweb工程中的web.xml
- HttpServletRequest简介
代码代码快快显灵
JavaWebjava开发语言javaweb
HttpServletRequest是什么?HttpServletRequest是一个接口,其父接口是ServletRequest;HttpServletRequest是Tomcat将请求报文转换封装而来的对象,在Tomcat调用service方法时传入;HttpServletRequest代表客户端发来的请求,请求中的所有信息都可以通过该对象获得;如何使用HttpServletRequest?获
- HttpServletRequest 中获取输入流信息
飘零未归人
javajavahttp
HttpServletRequest中获取输入流信息:try{ByteArrayOutputStreambaos=newByteArrayOutputStream();byte[]temp=newbyte[1024];intread;while((read=servletInputStream.read(temp))>0){baos.write(temp,0,read);}byte[]buffer
- javaweb将上传的图片保存在项目文件webapp下的upload文件夹下
yuren_xia
后端技术前端技术webappjavatomcateclipse
前端HTML表单(upload.html)首先,创建一个HTML页面,允许用户选择并上传图片。图片上传上传图片注意:表单的method设置为"post",enctype需设置成"multipart/form-data"2.后端Servlet(UploadServlet.java)接下来,创建一个Servlet来处理文件上传请求,并将上传的图片保存到webapp/load目录下。packagecom
- javaweb文件上传:@MultipartConfig注解与Apache Commons FileUpload对比
yuren_xia
后端技术apachejavatomcat
在JavaWeb应用中处理文件上传时,可以选择使用@MultipartConfig注解或第三方库如ApacheCommonsFileUpload(通常简称为fileupload)。以下是两者的比较和建议:使用@MultipartConfig注解简介:@MultipartConfig是JavaServlet规范中用于处理multipart/form-data请求(通常是文件上传)的注解。它简化了在S
- server.servlet.session.timeout: 12h(HTTP 会话的超时时间为 12 小时)
小丁学Java
产品资质管理系统servlethttpfirefox
从你提供的配置文件(应该是SpringBoot的application.yml或application.properties文件)来看,以下部分与会话超时时间相关:server:servlet:session:timeout:12h#timeout:30cookie:name:VENDER_SID会话超时时间的设置server.servlet.session.timeout:12h:这行配置明确指
- Nacos作为配置中心怎么玩,以及Nacos为何启动就挂,Nacos配置中心有多简单。
YourStarYang
NacosCentos7中遇到的那些事java
首先从GitHub去找文档Nacos主要资源配置项application.properties(主要配置)汉化部分如下:#***************SpringBoot相关配置***************####默认的Web上下文路径:server.servlet.contextPath=/nacos###默认的Web服务器端口:server.port=8848#**************
- Java spring面试题及答案(1~11题)
蒙娜丽莎的Java
java面试学习路线javaspring开发语言githubmysql
1、SpringMVC的工作原理?●用户向服务器发送请求,请求被springMVC前端控制器DispatchServlet捕获;●DispatcherServle对请求URL进行解析,得到请求资源标识符(URL),然后根据该URL调用HandlerMapping将请求映射到处理器HandlerExcutionChain;●DispatchServlet根据获得Handler选择一个合适的Handl
- Spring MVC 的执行流程
圈圈编码
springmvcjava
SpringMVC是一个基于Java的请求驱动型Web框架,其核心设计围绕前端控制器模式,通过DispatcherServlet协调各个组件处理HTTP请求。以下是其完整的执行流程,共分为8个核心步骤:1.HTTP请求到达DispatcherServlet入口:所有请求首先由DispatcherServlet(前端控制器)接收。配置:在web.xml中定义DispatcherServlet并映射U
- java调用百度云人脸识别API
一抓掉一大把
java
packagecom.sike.controller;importcom.baidu.aip.face.AipFace;importcom.sike.entity.User;importcom.sike.service.UserService;importjakarta.servlet.http.HttpServletRequest;importorg.json.JSONObject;import
- 解决多线程环境下 Feign 调用无法获取请求头的问题
SharSteep
springspringcloud
问题背景在Java开发中,我们使用线程池进行异步调用Feign接口时,遇到了一个问题:Feign接口无法正常调用。经过排查,发现问题的根源在于我们根据HTTP请求头中的一个参数来决定调用哪个服务(service1或service2)。然而,当使用多线程调用时,无法获取当前HTTP请求的ServletRequestAttributes,从而导致无法获取请求头信息,进而无法确定应该调用哪个服务。问题分
- Spring MVC 之父子容器详解
码农爱java
【SpringMVC】springmvcjava父子容器SpringMVC面试
前言:前面在分析SpringMVC初始化源码的时候也提到过父容器的概念,当时我们只是对源码进行解析,并没有去深究为什么要有父容器和子容器,本篇我们将对SpringMVC中的父子容器进行分析。SpringMVC知识传送门:详解SpringMVC(SpringMVC简介)SpringMVC初始化源码分析SpringMVC工作流程源码分析SpringMVC源码分析之DispatcherServlet#g
- Spring MVC 面试题及答案整理,最新面试题
扫地僧009
互联网大厂面试题springmvcjava面试
SpringMVC中的DispatcherServlet是什么,它如何工作?DispatcherServlet是SpringMVC中的核心组件,负责协调不同的请求处理器。它的工作流程包括:1、请求接收:接收HTTP请求,并将其转发到相应的处理器。2、处理器映射:根据请求查找合适的Controller。3、调用适当的处理器:执行处理器逻辑并返回ModelAndView对象。4、视图渲染:将Model
- JSP + TAG 实现分页(Tomcat 9)
xiaoyustudiowww
javajava-eetomcat前端jsp
=========java文件packageorg.rain.tag;importjava.io.IOException;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.jsp.JspException;importjavax.servlet.jsp.PageContext;importjavax.servlet.js
- Spring MVC框架二:创建第一个MVC程序
嘵奇
SpringMVCspringmvcjava
精心整理了最新的面试资料,有需要的可以自行获取点击前往百度网盘获取点击前往夸克网盘获取有两种方式利用配置1、利用IDEA新建一个Maven项目,添加一个web支持2、导入常用的依赖junitjunit4.12org.springframeworkspring-webmvc5.1.9.RELEASEjavax.servletservlet-api2.5javax.servlet.jspjsp-api
- 使用Filter实现CORS跨域请求
阿湯哥
spring
在JavaWeb应用中,可以通过自定义Filter来处理跨域请求,主要涉及设置CORS(跨域资源共享)相关的HTTP响应头。以下是详细实现步骤:实现跨域处理的Filter示例importjavax.servlet.*;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;im
- IntelliJ IDEA配置 tomcat
太阳上的雨天
JAVAjavaidea
创建测试项目HttpServletDemo打开IDEA新建一个maven项目,按图中选择之后,点击下一步填写项目名字,位置,Groupid,点击下一步配置Maven的相关目录配置tomcat
- SpringMVC-注解配置
zl979899
SSMjavaspring
代替web.xml在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器,这个类反过来又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成Spring3.2引入了一个便利的WebApplicationInitializer基
- Tomcat体系架构第一篇
gaochaojin
TomcatJavaTomcat
一、Tomcat的定义Tomcat是一款开源轻量级Web应用服务器,是一款优秀的Servlet容器实现。Servlet是JavaServlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互地浏览和生成数据,生成动态Web内容。Servlet严格来讲是指Java语言实现的一个接口,一般情况下我们说的Servlet是指实现了这个Servl
- SpringMVC--10Spring MVC执行流程
sisyphoslee
SpringMVCmvcspring
SpringMVC执行流程核心代码publicclassDispatcherServletextendsFrameworkServlet{protectedvoiddoDispatch(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{//根据请求对象request获取//这个对象是在每次发送请求时都创建一个
- Java Web 开发极简入门实战教程
AI天才研究院
Java实战java
JavaWeb开发极简入门实战教程文章目录JavaWeb开发极简入门实战教程第一部分:JavaWeb开发基础第1章:JavaWeb开发概述1.1JavaWeb的发展历程1.1.1初期阶段:Servlet与JSP1.1.2现代阶段:Spring框架与微服务架构1.1.3未来发展:云原生与无服务器架构1.2Java在Web开发中的优势稳定性与可靠性丰富的生态系统跨平台兼容性强大的社区支持1.3常见的J
- Spring MVC 对象转换器:初级开发者入门指南
干中学26
springmvcjava
SpringMVC对象转换器:初级开发者入门指南为什么需要对象转换器?在Web应用中,我们经常需要处理不同类型的对象。例如:前端数据到后端对象:用户通过表单提交的数据通常是HttpServletRequest对象,我们需要将其转换为Java对象(如POJO)以便进行业务处理。后端对象到前端展示:在将数据返回给前端时,可能需要将Java对象转换为适合前端展示的格式(如JSON或XML)。对象转换是一
- java实现预览静态html,Java 读取模板并生成HTML静态文件实例
guyu0908
java实现预览静态html
原理都很简单,主要是对模板的解析.so,我们先准备一个html模板mb.html,做个文件其中的###title###之类的标签用于程序进行查询替换.HTMLcode复制代码###title######title######author######content######html###下面是具体的代码:JspToHtml.javaJavacode复制代码importjavax.servlet.h
- Spring MVC的控制器是不是单例模式,如果是,有什么问题,怎么决?思维导图 代码示例(java 架构)
用心去追梦
java架构开发语言
SpringMVC控制器的单例模式特性在SpringMVC中,默认情况下控制器(带有@Controller或@RestController注解的类)是按照单例模式创建的。这意味着在整个应用程序生命周期内,只有一个实例会被创建并被所有请求共享。这与Servlet的行为相似,因为Servlet容器也是以单例模式管理Servlet实例的。单例模式的优点:性能优化:减少了对象创建和销毁的开销。资源利用率:
- springboot原理
caihuayuan5
面试题汇总与解析springbootjava后端大数据
springboot原理未使用springboot时,怎样构建web项目(ssm架构的)导入web及其配置,spring,springmvc在web.xml中配置dispatchServlet(前端控制器,作为分发器的作用)配置包扫描路径,让我们的service层,controller层等里面的对象被spring容器进行管理编写controller类部署Tomcat使用了springboot搭建w
- SAX解析xml文件
小猪猪08
xml
1.创建SAXParserFactory实例
2.通过SAXParserFactory对象获取SAXParser实例
3.创建一个类SAXParserHander继续DefaultHandler,并且实例化这个类
4.SAXParser实例的parse来获取文件
public static void main(String[] args) {
//
- 为什么mysql里的ibdata1文件不断的增长?
brotherlamp
linuxlinux运维linux资料linux视频linux运维自学
我们在 Percona 支持栏目经常收到关于 MySQL 的 ibdata1 文件的这个问题。
当监控服务器发送一个关于 MySQL 服务器存储的报警时,恐慌就开始了 —— 就是说磁盘快要满了。
一番调查后你意识到大多数地盘空间被 InnoDB 的共享表空间 ibdata1 使用。而你已经启用了 innodbfileper_table,所以问题是:
ibdata1存了什么?
当你启用了 i
- Quartz-quartz.properties配置
eksliang
quartz
其实Quartz JAR文件的org.quartz包下就包含了一个quartz.properties属性配置文件并提供了默认设置。如果需要调整默认配置,可以在类路径下建立一个新的quartz.properties,它将自动被Quartz加载并覆盖默认的设置。
下面是这些默认值的解释
#-----集群的配置
org.quartz.scheduler.instanceName =
- informatica session的使用
18289753290
workflowsessionlogInformatica
如果希望workflow存储最近20次的log,在session里的Config Object设置,log options做配置,save session log :sessions run ;savesessio log for these runs:20
session下面的source 里面有个tracing 
- Scrapy抓取网页时出现CRC check failed 0x471e6e9a != 0x7c07b839L的错误
酷的飞上天空
scrapy
Scrapy版本0.14.4
出现问题现象:
ERROR: Error downloading <GET http://xxxxx CRC check failed
解决方法
1.设置网络请求时的header中的属性'Accept-Encoding': '*;q=0'
明确表示不支持任何形式的压缩格式,避免程序的解压
- java Swing小集锦
永夜-极光
java swing
1.关闭窗体弹出确认对话框
1.1 this.setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE);
1.2
this.addWindowListener (
new WindowAdapter () {
public void windo
- 强制删除.svn文件夹
随便小屋
java
在windows上,从别处复制的项目中可能带有.svn文件夹,手动删除太麻烦,并且每个文件夹下都有。所以写了个程序进行删除。因为.svn文件夹在windows上是只读的,所以用File中的delete()和deleteOnExist()方法都不能将其删除,所以只能采用windows命令方式进行删除
- GET和POST有什么区别?及为什么网上的多数答案都是错的。
aijuans
get post
如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历
前几天有人问我这个问题。我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用。
这个答案好像并不是他想要的。于是他继续追问有没有别的区别?我说这就是个名字而已,如果服务器支持,他完全可以把G
- 谈谈新浪微博背后的那些算法
aoyouzi
谈谈新浪微博背后的那些算法
本文对微博中常见的问题的对应算法进行了简单的介绍,在实际应用中的算法比介绍的要复杂的多。当然,本文覆盖的主题并不全,比如好友推荐、热点跟踪等就没有涉及到。但古人云“窥一斑而见全豹”,希望本文的介绍能帮助大家更好的理解微博这样的社交网络应用。
微博是一个很多人都在用的社交应用。天天刷微博的人每天都会进行着这样几个操作:原创、转发、回复、阅读、关注、@等。其中,前四个是针对短博文,最后的关注和@则针
- Connection reset 连接被重置的解决方法
百合不是茶
java字符流连接被重置
流是java的核心部分,,昨天在做android服务器连接服务器的时候出了问题,就将代码放到java中执行,结果还是一样连接被重置
被重置的代码如下;
客户端代码;
package 通信软件服务器;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.O
- web.xml配置详解之filter
bijian1013
javaweb.xmlfilter
一.定义
<filter>
<filter-name>encodingfilter</filter-name>
<filter-class>com.my.app.EncodingFilter</filter-class>
<init-param>
<param-name>encoding<
- Heritrix
Bill_chen
多线程xml算法制造配置管理
作为纯Java语言开发的、功能强大的网络爬虫Heritrix,其功能极其强大,且扩展性良好,深受热爱搜索技术的盆友们的喜爱,但它配置较为复杂,且源码不好理解,最近又使劲看了下,结合自己的学习和理解,跟大家分享Heritrix的点点滴滴。
Heritrix的下载(http://sourceforge.net/projects/archive-crawler/)安装、配置,就不罗嗦了,可以自己找找资
- 【Zookeeper】FAQ
bit1129
zookeeper
1.脱离IDE,运行简单的Java客户端程序
#ZkClient是简单的Zookeeper~$ java -cp "./:zookeeper-3.4.6.jar:./lib/*" ZKClient
1. Zookeeper是的Watcher回调是同步操作,需要添加异步处理的代码
2. 如果Zookeeper集群跨越多个机房,那么Leader/
- The user specified as a definer ('aaa'@'localhost') does not exist
白糖_
localhost
今天遇到一个客户BUG,当前的jdbc连接用户是root,然后部分删除操作都会报下面这个错误:The user specified as a definer ('aaa'@'localhost') does not exist
最后找原因发现删除操作做了触发器,而触发器里面有这样一句
/*!50017 DEFINER = ''aaa@'localhost' */
原来最初
- javascript中showModelDialog刷新父页面
bozch
JavaScript刷新父页面showModalDialog
在页面中使用showModalDialog打开模式子页面窗口的时候,如果想在子页面中操作父页面中的某个节点,可以通过如下的进行:
window.showModalDialog('url',self,‘status...’); // 首先中间参数使用self
在子页面使用w
- 编程之美-买书折扣
bylijinnan
编程之美
import java.util.Arrays;
public class BookDiscount {
/**编程之美 买书折扣
书上的贪心算法的分析很有意思,我看了半天看不懂,结果作者说,贪心算法在这个问题上是不适用的。。
下面用动态规划实现。
哈利波特这本书一共有五卷,每卷都是8欧元,如果读者一次购买不同的两卷可扣除5%的折扣,三卷10%,四卷20%,五卷
- 关于struts2.3.4项目跨站执行脚本以及远程执行漏洞修复概要
chenbowen00
strutsWEB安全
因为近期负责的几个银行系统软件,需要交付客户,因此客户专门请了安全公司对系统进行了安全评测,结果发现了诸如跨站执行脚本,远程执行漏洞以及弱口令等问题。
下面记录下本次解决的过程以便后续
1、首先从最简单的开始处理,服务器的弱口令问题,首先根据安全工具提供的测试描述中发现应用服务器中存在一个匿名用户,默认是不需要密码的,经过分析发现服务器使用了FTP协议,
而使用ftp协议默认会产生一个匿名用
- [电力与暖气]煤炭燃烧与电力加温
comsci
在宇宙中,用贝塔射线观测地球某个部分,看上去,好像一个个马蜂窝,又像珊瑚礁一样,原来是某个国家的采煤区.....
不过,这个采煤区的煤炭看来是要用完了.....那么依赖将起燃烧并取暖的城市,在极度严寒的季节中...该怎么办呢?
&nbs
- oracle O7_DICTIONARY_ACCESSIBILITY参数
daizj
oracle
O7_DICTIONARY_ACCESSIBILITY参数控制对数据字典的访问.设置为true,如果用户被授予了如select any table等any table权限,用户即使不是dba或sysdba用户也可以访问数据字典.在9i及以上版本默认为false,8i及以前版本默认为true.如果设置为true就可能会带来安全上的一些问题.这也就为什么O7_DICTIONARY_ACCESSIBIL
- 比较全面的MySQL优化参考
dengkane
mysql
本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分通过加适当的索引即可达到效果,更复杂的就需要具体分析了,可以参考本站的一些优化案例或者联系我,下方有我的联系方式。这是上篇。
1、硬件层相关优化
1.1、CPU相关
在服务器的BIOS设置中,可
- C语言homework2,有一个逆序打印数字的小算法
dcj3sjt126com
c
#h1#
0、完成课堂例子
1、将一个四位数逆序打印
1234 ==> 4321
实现方法一:
# include <stdio.h>
int main(void)
{
int i = 1234;
int one = i%10;
int two = i / 10 % 10;
int three = i / 100 % 10;
- apacheBench对网站进行压力测试
dcj3sjt126com
apachebench
ab 的全称是 ApacheBench , 是 Apache 附带的一个小工具 , 专门用于 HTTP Server 的 benchmark testing , 可以同时模拟多个并发请求。前段时间看到公司的开发人员也在用它作一些测试,看起来也不错,很简单,也很容易使用,所以今天花一点时间看了一下。
通过下面的一个简单的例子和注释,相信大家可以更容易理解这个工具的使用。
- 2种办法让HashMap线程安全
flyfoxs
javajdkjni
多线程之--2种办法让HashMap线程安全
多线程之--synchronized 和reentrantlock的优缺点
多线程之--2种JAVA乐观锁的比较( NonfairSync VS. FairSync)
HashMap不是线程安全的,往往在写程序时需要通过一些方法来回避.其实JDK原生的提供了2种方法让HashMap支持线程安全.
- Spring Security(04)——认证简介
234390216
Spring Security认证过程
认证简介
目录
1.1 认证过程
1.2 Web应用的认证过程
1.2.1 ExceptionTranslationFilter
1.2.2 在request之间共享SecurityContext
1
- Java 位运算
Javahuhui
java位运算
// 左移( << ) 低位补0
// 0000 0000 0000 0000 0000 0000 0000 0110 然后左移2位后,低位补0:
// 0000 0000 0000 0000 0000 0000 0001 1000
System.out.println(6 << 2);// 运行结果是24
// 右移( >> ) 高位补"
- mysql免安装版配置
ldzyz007
mysql
1、my-small.ini是为了小型数据库而设计的。不应该把这个模型用于含有一些常用项目的数据库。
2、my-medium.ini是为中等规模的数据库而设计的。如果你正在企业中使用RHEL,可能会比这个操作系统的最小RAM需求(256MB)明显多得多的物理内存。由此可见,如果有那么多RAM内存可以使用,自然可以在同一台机器上运行其它服务。
3、my-large.ini是为专用于一个SQL数据
- MFC和ado数据库使用时遇到的问题
你不认识的休道人
sqlC++mfc
===================================================================
第一个
===================================================================
try{
CString sql;
sql.Format("select * from p
- 表单重复提交Double Submits
rensanning
double
可能发生的场景:
*多次点击提交按钮
*刷新页面
*点击浏览器回退按钮
*直接访问收藏夹中的地址
*重复发送HTTP请求(Ajax)
(1)点击按钮后disable该按钮一会儿,这样能避免急躁的用户频繁点击按钮。
这种方法确实有些粗暴,友好一点的可以把按钮的文字变一下做个提示,比如Bootstrap的做法:
http://getbootstrap.co
- Java String 十大常见问题
tomcat_oracle
java正则表达式
1.字符串比较,使用“==”还是equals()? "=="判断两个引用的是不是同一个内存地址(同一个物理对象)。 equals()判断两个字符串的值是否相等。 除非你想判断两个string引用是否同一个对象,否则应该总是使用equals()方法。 如果你了解字符串的驻留(String Interning)则会更好地理解这个问题。
- SpringMVC 登陆拦截器实现登陆控制
xp9802
springMVC
思路,先登陆后,将登陆信息存储在session中,然后通过拦截器,对系统中的页面和资源进行访问拦截,同时对于登陆本身相关的页面和资源不拦截。
实现方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23