- spring4第6课-bean之间的关系+bean的作用范围
ademen
springjavaspring
总结:①bean之间的关系有1,继承;2,依赖;3,引用;②bean的作用范围(scope)1,singletonSpringioc容器中仅有一个Bean实例,Bean以单例的方式存在;(重点)2,prototype每次从容器中调用Bean时,都返回一个新的实例;(重点)3,request每次HTTP请求都会创建一个新的Bean;4,session同一个HTTPSession共享一个Bean;5,
- Java Spring 之监听器(Listener)详解与实战
Java皇帝
javaspringjavaspring后端开发语言
目录一、监听器的作用1.1应用生命周期管理1.2会话管理1.3请求处理监控二、创建监听器2.1Servlet容器监听器2.2HttpSession监听器2.3请求处理监听器三、Spring应用事件监听器3.1定义自定义事件3.2创建事件监听器3.3发布事件四、总结在Spring框架中,监听器(Listener)是一种用于监听特定事件的强大工具。通过监听器,我们可以在事件发生时执行自定义的逻辑,例如
- Spring 中 Bean 的作用域有哪些?默认是什么?
_艾米莉
springjava后端学习开发语言算法负载均衡
分析:Spring支持6种作用域(Bean的创建和销毁范围),需结合依赖注入场景理解。singleton:默认作用域,容器中仅创建一个实例,全局共享(如服务层Bean)。prototype:每次请求都会创建新实例(如资源消耗大的Bean)。request:一次HTTP请求内有效(需结合Web环境,如SpringMVC)。session:同一个HTTPSession内有效。application:同
- Springboot 项目一启动就获取HttpSession
梁云亮
SpringBootspringboot获取Session
在SpringBoot项目中,HttpSession是有状态的,通常只有在用户发起HTTP请求并建立会话后才会创建。因此,在项目启动时(即应用刚启动还未处理任何请求)是无法获取到HttpSession的。方法一:使用HttpSessionListener(监听session创建)@ComponentpublicclassMySessionListenerimplementsHttpSessionL
- Web会话机制全景深度概览
北漂老男人
web会话机制笔记经验分享
一、Web会话机制概览Web会话机制用于追踪和识别用户的连续操作,常见于登录、购物车、权限管理等场景。主流方案有:CookieURL重写隐藏表单域HttpSession分布式Session(如SpringSession/Redis)Token机制(JWT、OAuth2、OpenIDConnect)前后端分离的Token+API网关SSO(单点登录,CAS、SAML、OIDC)二、主流会话机制技术栈
- HttpSession背景、使用原理、使用环境、生命周期
小兜熊
HttpSession
导语:目前所写项目遇到几个问题:前后端分离下如何验证用户身份、用户登录后如何持久化,虽用cookie解决,但在编写过程中深感代码效率低下,希望寻求更高优质的解决思路,深入了解一下Session的背景、使用原理、使用环境。1、http协议:简单了解一下http协议可以更好理解session机制http协议是“连接-请求-应答-关闭连接”模式,是一种无状态协议(http只是一个传输协议)因为http是
- Spring MVC Session 属性 (@SessionAttributes) 是什么?如何使用它共享数据?
冰糖心书房
SpringMVC源码系列springmvcjava
在SpringMVC中,@SessionAttributes是一个类级别的注解,用于表示SpringMVC将Controller中的属性存储到HTTPSession中,以便在同一用户会话的后续请求中可以访问这些属性。简单来说,它的作用是将请求范围的模型(Model)属性“提升”到会话范围。为什么需要@SessionAttributes?模型属性(通过Model,ModelMap,ModelAndV
- HttpSessionAttributeListener 的用法笔记250417
kfepiza
JAVA笔记javatomcatservletjava-eespringboot
HttpSessionAttributeListener的用法笔记250417以下是关于HttpSessionAttributeListener的用法详解,涵盖核心方法、应用场景、实现步骤及关键注意事项,帮助您有效监听会话(HttpSession)中属性的动态变化:1.核心功能HttpSessionAttributeListener用于监听会话(HttpSession)中属性的增删改事件,适用于实
- java中过滤器应实现的接口_下面选项中,编写过滤器需要实现的接口是( )
凛冬之怒
java中过滤器应实现的接口
【填空题】Tomcat容器中会话的有效时间可以在___文件中设置,默认会话过期时间为30分钟【判断题】在修改传智书城注册页面使用include指令包含顶部、菜单列表和底部这些公共页面时,可以参考引入css、js文件一样放到head标签内部。()【单选题】下列选项中,可以更改Cookie的存活时间的是()【判断题】用于监听HttpSession对象生命周期的接口是HttpSessionBinding
- 大模型GPT辅助学习解释代码-HttpSession 监听器
ahauedu
前沿技术与趋势gpt
本文主题大模型解释代码。最近在接触旧项目代码是往往没有注释,或者是注释和代码对应不上,这样对于了解业务逻辑,以及后期的改造开发造成了很大的困扰。尽然大模型这么强大,我们尝试下用大模型来解释代码。以下是大模型对项目代码中的HttpSession监听器的代码解释,很高效的方式,可以借鉴。代码解析这段代码定义了WebHttpSessionListener类,它是一个HttpSession监听器,用于监听
- Web 应用中 HttpSession 的工作原理
triticale
前端java开发语言
首次访问:当浏览器A和浏览器B首次访问Web服务器时,服务器通过request.getSession()方法为每个浏览器创建一个HttpSession对象,并生成对应的jsessionid。该jsessionid通过Cookie响应给浏览器,用于标识会话。第二次访问:后续浏览器再次发起请求时,会携带jsessionid。服务器根据该jsessionid在HttpSession列表(Map)中找到对
- Spring MVC中使用HttpSession管理会话属性
t0_54program
数据库个人开发
在SpringMVC开发中,我们常常需要处理用户会话(Session)相关的数据。虽然Spring提供了SessionScope的Bean来管理会话数据,但在某些情况下,我们可能无法使用这种方式。这时,我们可以借助低级别的ServletAPI来实现会话管理。本文将通过一个具体的实例,展示如何在SpringMVC控制器中使用javax.servlet.http.HttpSession来管理会话属性。
- Java(Springboot)
奶龙牛牛
javaspringboot开发语言
get请求在Controller中--->从仓库里取出要用的mysql----->对于get请求(httpsession,model容器)----->从httpsession取出userid再赋值给userid----->用userid在mysql获取用户的信息------>然后用户的信息在保存在model容器里---->return到html地址里面put请求得到请求体的参数--->从https
- 生成验证码的工具类
落晚_
java
packagecom.htc.utils;importorg.springframework.stereotype.Component;importjavax.imageio.ImageIO;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importjava.awt.*;impor
- webSocket获取httpsession
爱吃辣椒炒肉
javawebsocketsession
websocket使用握手拦截器publicclassHttpSessionHandshakeInterceptorextendsorg.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor{@OverridepublicbooleanbeforeHandshake(ServerHttpRequestre
- JavaWeb,会话管理的学习
曦月落雨
javaWebjavaweb
会话管理概述无状态协议无状态就是不保存状态,HTTP就是无状态协议,HTTP协议自身不会对请求和响应之间的通信状态进行保存,也就是说,在HTTP协议这个级别,协议对于发送过的请求或者响应都不做持久化处理。会话管理实现的手段cookie是在客户端保留少量数据的技术,主要通过响应头向客户端响应一些客户端要保留的信息session是在服务器端保留更多的数据的技术,主要通过HttpSession对象保存一
- idea处理文件报错问题
大cheng
idea处理文件报错问题1、idea上传文件获取文件路径的报错报错原因:ServletRequest的getServletContext方法是Servlet3.0添加的,本地用的是Tomcat9.0,版本比较高,支持request.getServletContext()这种写法,而线上是Tomcat6.0,只支持到Servlet2.5,需要先用request拿到HttpSession或者通过Ser
- jsp有哪些内置对象?作用分别是什么?
富哥92
面试
1.HttpServletRequet类的Request对象:代表请求对象,主要用于接受客户端通过HTTP协议连接传输服务器端的数据。2.HttpSevletResponse类的Response对象:代表响应对象,主要用于向客户端发送数据。3.JspWriter类的out对象:主要用于向客户端输出数据,out的基类是jspWriter4.HttpSession类的session对象:主要用来分别保
- SpringMVC参数解析器HandlerMethodArgumentResolver
这是一条海鱼
SpringMVC
前言在享受SpringMVC带给你便捷的时候,你是否曾经这样疑问过:Controller的handler方法参数能够自动完成参数封装(有时即使没有@PathVariable、@RequestParam、@RequestBody等注解都可),甚至在方法参数任意位置写HttpServletRequest、HttpSession、Writer…等类型的参数,它自动就有值了便可直接使用。对此你是否想问一句
- 分布式 WebSocket 集群解决方案
2401_83916394
程序员分布式websocket网络协议
下面我将描述session特性,以及根据这些特性列举出n个解决分布式架构中处理ws请求的集群方案WebSocketSession与HttpSession在Spring所集成的WebSocket里面,每个ws连接都有一个对应的session:WebSocketSession,在SpringWebSocket中,我们建立ws连接之后可以通过类似这样的方式进行与客户端的通信:protectedvoidh
- 黑猴子的家:JavaWeb 之 Servlet Listener 监听器
黑猴子的家
1、监听器简介Listener是JavaWeb中三大组件之一。Servlet、Filter、Listener三大组件都有的共同特点,都需要实现一个接口,并在web.xml文件配置。JavaWeb中的监听器的监听对象是谁? ServletContext HttpSession ServletRequest2、监听器分类JavaWeb中的监听器共有三种,共8个监听器 -生命周期
- JSP九大内置对象及四个作用域
聂叼叼
request请求对象类型javax.servlet.ServletRequest作用域Requestresponse响应对象类型javax.servlet.SrvletResponse作用域PagepageContext页面上下文对象类型javax.servlet.jsp.PageContext作用域Pagesession会话对象类型javax.servlet.http.HttpSession作
- Cookie 和 Session 的工作流程
墨溱
springjava
Cookie和Session的工作流程.什么是Cookie和session核心操作HttpServletRequest类中的相关方法HttpServletResponse类中的相关方法HttpSession类中的相关方法Cookie类中的相关方法setCookiegetCookie使用cookie结合session实现登录效果login.htmlloginServletindexServlet.C
- 服务器端会话技术-Session
小哼快跑
JavaWeb专栏Session服务器端会话技术
一、Session1.1概述和快速入门概述:Session是服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中快速入门获取HttpSession对象使用HttpSession对象常用方法方法作用HttpSessionrequest.getSession()通过request对象获取HttpSession对象ObjectgetAttribute(Stringname)根据
- 【JavaWeb】会话管理 cookie session 三大域对象总结
道格维克
后端#JavaWebjavaweb后端
文章目录会话管理一、Cookie1.1Cookie的使用1.2Cookie的时效性1.3Cookie的提交路径二、Session2.1HttpSession的使用2.2HttpSession时效性三、三大域对象3.1域对象概述3.2域对象的使用总结会话管理HTTP是无状态协议无状态就是不保存状态,即无状态协议(stateless)HTTP协议自身不对请求和响应之间的通信状态进行保存发送请求和接受响
- Java EE面试题解析(中)
小爱聊IT
Javajava-eejava面试
11、Servlet、Filter、Listener的启动顺序?【重点】启动的顺序为:Listener->Filter->Servlet;执行的顺序不会因为三个标签在配置文件中的先后顺序而改变。监听器类型:Servlet2.4规范定义,按监听的对象划分:用于监听应用程序环境对象(ServletContext)的事件监听器用于监听用户会话对象(HttpSession)的事件监听器用于监听请求消息对象
- HttpSession
Gambler_Tu
httpservletservlethttp
HTTP概述HTTP无状态协议和服务器端状态管理HttpSession一个用户有且最多有一个HttpSession,并且不会被其他用户访问到。HttpSession对象在用户第一次访问网站时自动被创建,你可以通过调用HttpServeltRequest的getSession()方法获得该对象。会话(Session)是一个比请求(Request)更「大」的概念。一个会话中可以包含一个或多个请求;一个
- JavaWeb学习——Session会话
柿子镭
Javawebsession
目录一、Session会话二、创建Session和获取(id号,是否为新)三、Session域数据的存取四、Session生命周期控制1、设置Session的超时时间(以秒为单位)2、获取Session的超时时间3、让当前Session会话马上超时无效五、浏览器和Session之间关联的技术内幕一、Session会话1、Session就是一个接口(HttpSession)。2、Session就是会
- JavaWeb学习|Session
半夜下雨
Java技术学习javaservlet
学习材料声明所有知识点都来自互联网,进行总结和梳理,侵权必删。引用来源:尚硅谷最新版JavaWeb全套教程,javaweb零基础入门完整版Session1、Session就一个接口(HttpSession)。2、Session就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。3、每个客户端都有自己的一个Session会话。4、Session会话中,我们经常用来保存用户登录之后的信息。Se
- 6. SpringMVC-域对象共享数据
CAFEBABE 34
#spring-mvc服务器java运维
域对象共享数据零、四大域对象1.PageContext域2.Request域3.HttpSession域4.ServletContext一、创建项目二、向request域对象共享数据1.使用ServletAPI向request域对象共享数据2.使用ModelAndView向request域对象共享数据3.使用Model向request域对象共享数据4.使用map向request域对象共享数据5.使
- java Illegal overloaded getter method with ambiguous type for propert的解决
zwllxs
javajdk
好久不来iteye,今天又来看看,哈哈,今天碰到在编码时,反射中会抛出
Illegal overloaded getter method with ambiguous type for propert这么个东东,从字面意思看,是反射在获取getter时迷惑了,然后回想起java在boolean值在生成getter时,分别有is和getter,也许我们的反射对象中就有is开头的方法迷惑了jdk,
- IT人应当知道的10个行业小内幕
beijingjava
工作互联网
10. 虽然IT业的薪酬比其他很多行业要好,但有公司因此视你为其“佣人”。
尽管IT人士的薪水没有互联网泡沫之前要好,但和其他行业人士比较,IT人的薪资还算好点。在接下的几十年中,科技在商业和社会发展中所占分量会一直增加,所以我们完全有理由相信,IT专业人才的需求量也不会减少。
然而,正因为IT人士的薪水普遍较高,所以有些公司认为给了你这么多钱,就把你看成是公司的“佣人”,拥有你的支配
- java 实现自定义链表
CrazyMizzz
java数据结构
1.链表结构
链表是链式的结构
2.链表的组成
链表是由头节点,中间节点和尾节点组成
节点是由两个部分组成:
1.数据域
2.引用域
3.链表的实现
&nbs
- web项目发布到服务器后图片过一会儿消失
麦田的设计者
struts2上传图片永久保存
作为一名学习了android和j2ee的程序员,我们必须要意识到,客服端和服务器端的交互是很有必要的,比如你用eclipse写了一个web工程,并且发布到了服务器(tomcat)上,这时你在webapps目录下看到了你发布的web工程,你可以打开电脑的浏览器输入http://localhost:8080/工程/路径访问里面的资源。但是,有时你会突然的发现之前用struts2上传的图片
- CodeIgniter框架Cart类 name 不能设置中文的解决方法
IT独行者
CodeIgniterCart框架
今天试用了一下CodeIgniter的Cart类时遇到了个小问题,发现当name的值为中文时,就写入不了session。在这里特别提醒一下。 在CI手册里也有说明,如下:
$data = array(
'id' => 'sku_123ABC',
'qty' => 1,
'
- linux回收站
_wy_
linux回收站
今天一不小心在ubuntu下把一个文件移动到了回收站,我并不想删,手误了。我急忙到Nautilus下的回收站中准备恢复它,但是里面居然什么都没有。 后来我发现这是由于我删文件的地方不在HOME所在的分区,而是在另一个独立的Linux分区下,这是我专门用于开发的分区。而我删除的东东在分区根目录下的.Trash-1000/file目录下,相关的删除信息(删除时间和文件所在
- jquery回到页面顶端
知了ing
htmljquerycss
html代码:
<h1 id="anchor">页面标题</h1>
<div id="container">页面内容</div>
<p><a href="#anchor" class="topLink">回到顶端</a><
- B树、B-树、B+树、B*树
矮蛋蛋
B树
原文地址:
http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html
B树
即二叉搜索树:
1.所有非叶子结点至多拥有两个儿子(Left和Right);
&nb
- 数据库连接池
alafqq
数据库连接池
http://www.cnblogs.com/xdp-gacl/p/4002804.html
@Anthor:孤傲苍狼
数据库连接池
用MySQLv5版本的数据库驱动没有问题,使用MySQLv6和Oracle的数据库驱动时候报如下错误:
java.lang.ClassCastException: $Proxy0 cannot be cast to java.sql.Connec
- java泛型
百合不是茶
java泛型
泛型
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,任意化的缺点就是要实行强制转换,这种强制转换可能会带来不安全的隐患
泛型的特点:消除强制转换 确保类型安全 向后兼容
简单泛型的定义:
泛型:就是在类中将其模糊化,在创建对象的时候再具体定义
class fan
- javascript闭包[两个小测试例子]
bijian1013
JavaScriptJavaScript
一.程序一
<script>
var name = "The Window";
var Object_a = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
- 探索JUnit4扩展:假设机制(Assumption)
bijian1013
javaAssumptionJUnit单元测试
一.假设机制(Assumption)概述 理想情况下,写测试用例的开发人员可以明确的知道所有导致他们所写的测试用例不通过的地方,但是有的时候,这些导致测试用例不通过的地方并不是很容易的被发现,可能隐藏得很深,从而导致开发人员在写测试用例时很难预测到这些因素,而且往往这些因素并不是开发人员当初设计测试用例时真正目的,
- 【Gson四】范型POJO的反序列化
bit1129
POJO
在下面这个例子中,POJO(Data类)是一个范型类,在Tests中,指定范型类为PieceData,POJO初始化完成后,通过
String str = new Gson().toJson(data);
得到范型化的POJO序列化得到的JSON串,然后将这个JSON串反序列化为POJO
import com.google.gson.Gson;
import java.
- 【Spark八十五】Spark Streaming分析结果落地到MySQL
bit1129
Stream
几点总结:
1. DStream.foreachRDD是一个Output Operation,类似于RDD的action,会触发Job的提交。DStream.foreachRDD是数据落地很常用的方法
2. 获取MySQL Connection的操作应该放在foreachRDD的参数(是一个RDD[T]=>Unit的函数类型),这样,当foreachRDD方法在每个Worker上执行时,
- NGINX + LUA实现复杂的控制
ronin47
nginx lua
安装lua_nginx_module 模块
lua_nginx_module 可以一步步的安装,也可以直接用淘宝的OpenResty
Centos和debian的安装就简单了。。
这里说下freebsd的安装:
fetch http://www.lua.org/ftp/lua-5.1.4.tar.gz
tar zxvf lua-5.1.4.tar.gz
cd lua-5.1.4
ma
- java-递归判断数组是否升序
bylijinnan
java
public class IsAccendListRecursive {
/*递归判断数组是否升序
* if a Integer array is ascending,return true
* use recursion
*/
public static void main(String[] args){
IsAccendListRecursiv
- Netty源码学习-DefaultChannelPipeline2
bylijinnan
javanetty
Netty3的API
http://docs.jboss.org/netty/3.2/api/org/jboss/netty/channel/ChannelPipeline.html
里面提到ChannelPipeline的一个“pitfall”:
如果ChannelPipeline只有一个handler(假设为handlerA)且希望用另一handler(假设为handlerB)
来
- Java工具之JPS
chinrui
java
JPS使用
熟悉Linux的朋友们都知道,Linux下有一个常用的命令叫做ps(Process Status),是用来查看Linux环境下进程信息的。同样的,在Java Virtual Machine里面也提供了类似的工具供广大Java开发人员使用,它就是jps(Java Process Status),它可以用来
- window.print分页打印
ctrain
window
function init() {
var tt = document.getElementById("tt");
var childNodes = tt.childNodes[0].childNodes;
var level = 0;
for (var i = 0; i < childNodes.length; i++) {
- 安装hadoop时 执行jps命令Error occurred during initialization of VM
daizj
jdkhadoopjps
在安装hadoop时,执行JPS出现下面错误
[slave16]
[email protected]:/tmp/hsperfdata_hdfs# jps
Error occurred during initialization of VM
java.lang.Error: Properties init: Could not determine current working
- PHP开发大型项目的一点经验
dcj3sjt126com
PHP重构
一、变量 最好是把所有的变量存储在一个数组中,这样在程序的开发中可以带来很多的方便,特别是当程序很大的时候。变量的命名就当适合自己的习惯,不管是用拼音还是英语,至少应当有一定的意义,以便适合记忆。变量的命名尽量规范化,不要与PHP中的关键字相冲突。 二、函数 PHP自带了很多函数,这给我们程序的编写带来了很多的方便。当然,在大型程序中我们往往自己要定义许多个函数,几十
- android笔记之--向网络发送GET/POST请求参数
dcj3sjt126com
android
使用GET方法发送请求
private static boolean sendGETRequest (String path,
Map<String, String> params) throws Exception{
//发送地http://192.168.100.91:8080/videoServi
- linux复习笔记 之bash shell (3) 通配符
eksliang
linux 通配符linux通配符
转载请出自出处:
http://eksliang.iteye.com/blog/2104387
在bash的操作环境中有一个非常有用的功能,那就是通配符。
下面列出一些常用的通配符,如下表所示 符号 意义 * 万用字符,代表0个到无穷个任意字符 ? 万用字符,代表一定有一个任意字符 [] 代表一定有一个在中括号内的字符。例如:[abcd]代表一定有一个字符,可能是a、b、c
- Android关于短信加密
gqdy365
android
关于Android短信加密功能,我初步了解的如下(只在Android应用层试验):
1、因为Android有短信收发接口,可以调用接口完成短信收发;
发送过程:APP(基于短信应用修改)接受用户输入号码、内容——>APP对短信内容加密——>调用短信发送方法Sm
- asp.net在网站根目录下创建文件夹
hvt
.netC#hovertreeasp.netWeb Forms
假设要在asp.net网站的根目录下建立文件夹hovertree,C#代码如下:
string m_keleyiFolderName = Server.MapPath("/hovertree");
if (Directory.Exists(m_keleyiFolderName))
{
//文件夹已经存在
return;
}
else
{
try
{
D
- 一个合格的程序员应该读过哪些书
justjavac
程序员书籍
编者按:2008年8月4日,StackOverflow 网友 Bert F 发帖提问:哪本最具影响力的书,是每个程序员都应该读的?
“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本, 你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西。”
很多程序员响应,他们在推荐时也写下自己的评语。 以前就有国内网友介绍这个程序员书单,不过都是推荐数
- 单实例实践
跑龙套_az
单例
1、内部类
public class Singleton {
private static class SingletonHolder {
public static Singleton singleton = new Singleton();
}
public Singleton getRes
- PO VO BEAN 理解
q137681467
VODTOpo
PO:
全称是 persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录。 好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。
BO:
全称是 business object:业务对象 主要作用是把业务逻辑封装为一个对象。这个对
- 战胜惰性,暗自努力
金笛子
努力
偶然看到一句很贴近生活的话:“别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得吊儿郎当,和你一样会抱怨,而只有你自己相信这些都是真的,最后也只有你一人继续不思进取。”很多句子总在不经意中就会戳中一部分人的软肋,我想我们每个人的周围总是有那么些表现得“吊儿郎当”的存在,是否你就真的相信他们如此不思进取,而开始放松了对自己的要求随波逐流呢?
我有个朋友是搞技术的,平时嘻嘻哈哈,以
- NDK/JNI二维数组多维数组传递
wenzongliang
二维数组jniNDK
多维数组和对象数组一样处理,例如二维数组里的每个元素还是一个数组 用jArray表示,直到数组变为一维的,且里面元素为基本类型,去获得一维数组指针。给大家提供个例子。已经测试通过。
Java_cn_wzl_FiveChessView_checkWin( JNIEnv* env,jobject thiz,jobjectArray qizidata)
{
jint i,j;
int s