spring3下载支持socket么

人气:570763
访问用户量:1852
笔记经验:1294
总积分:1201
级别:普通会员
搜索本笔记
ta的交流分类
ta的全部笔记
浏览(1869)|(1)
&&交流分类:|笔记分类:
Java Socket的api可能很多人会用,但是Java Socket的参数可能很多人都不知道用来干嘛的,甚至都不知道有这些参数。
用于ServerSocket,配置ServerSocket的最大客户端等待队列。等待队列的意思,先看下面代码
public&class&Main&{ &
&&&&public&static&void&main(String[]&args)&throws&Exception&{ &
&&&&&&&&int&port&=&8999; &
&&&&&&&&int&backlog&=&2; &
&&&&&&&&ServerSocket&serverSocket&=&new&ServerSocket(port,&backlog); &
&&&&&&&&Socket&clientSock&=&serverSocket.accept(); &
&&&&&&&&System.out.println(&revcive&from&&&+&clientSock.getPort()); &
&&&&&&&&while&(true)&{ &
&&&&&&&&&&&&byte&buf[]&=&new&byte[1024]; &
&&&&&&&&&&&&int&len&=&clientSock.getInputStream().read(buf); &
&&&&&&&&&&&&System.out.println(new&String(buf,&0,&len)); &
&&&&&&&&} &
这段测试代码在第一次处理一个客户端时,就不会处理第二个客户端,所以除了第一个客户端,其他客户端就是等待队列了。所以这个服务器最多可以同时连接3个客户端,其中2个等待队列。大家可以telnet localhost 8999测试下。
这个参数设置为-1表示无限制,默认是50个最大等待队列,如果设置无限制,那么你要小心了,如果你服务器无法处理那么多连接,那么当很多客户端连到你的服务器时,每一个TCP连接都会占用服务器的内存,最后会让服务器崩溃的。
另外,就算你设置了backlog为10,如果你的代码中是一直Socket clientSock = serverSocket.accept(),假设我们的机器最多可以同时处理100个请求,总共有100个线程在运行,然后你把在100个线程的线程池处理clientSock,不能处理的clientSock就排队,最后clientSock越来越多,也意味着TCP连接越来越多,也意味着我们的服务器的内存使用越来越高(客户端连接进程,肯定会发送数据过来,数据会保存到服务器端的TCP接收缓存区),最后服务器就宕机了。所以如果你不能处理那么多请求,请不要循环无限制地调用serverSocket.accept(),否则backlog也无法生效。如果真的请求过多,只会让你的服务器宕机(相信很多人都是这么写,要注意点)
TcpNoDelay
禁用纳格算法,将数据立即发送出去。纳格算法是以减少封包传送量来增进TCP/IP网络的效能,当我们调用下面代码,如:
Socket&socket&=&new&Socket();&& &
socket.connect(new&InetSocketAddress(host,&8000));&& &
InputStream&in&=&socket.getInputStream();&& &
OutputStream&out&=&socket.getOutputStream();&& &
String&head&=&&hello&&;&& &
String&body&=&&world\r\n&;&& &
out.write(head.getBytes());&& &
out.write(body.getBytes());&
我们发送了hello,当hello没有收到ack确认(TCP是可靠连接,发送的每一个数据都要收到对方的一个ack确认,否则就要重发)的时候,根据纳格算法,world不会立马发送,会等待,要么等到ack确认(最多等100ms对方会发过来的),要么等到TCP缓冲区内容&=MSS,很明显这里没有机会,我们写了world后再也没有写数据了,所以只能等到hello的ack我们才会发送world,除非我们禁用纳格算法,数据就会立即发送了。
纳格算法参考:
另外有一篇讲解纳格算法和delay ack的文章(挺不错的):
当我们调用socket.close()返回时,socket已经write的数据未必已经发送到对方了,例如
Socket&socket&=&new&Socket();&& &
socket.connect(new&InetSocketAddress(host,&8000));&& &
InputStream&in&=&socket.getInputStream();&& &
OutputStream&out&=&socket.getOutputStream();&& &
String&head&=&&hello&&;&& &
String&body&=&&world\r\n&;&& &
out.write(head.getBytes());&& &
out.write(body.getBytes());& &
socket.close();&
这里调用了socket.close()返回时,hello和world未必已经成功发送到对方了,如果我们设置了linger而不小于0,如:
bool&on&=&true; &
int&linger&=&100; &
socket.setSoLinger(boolean&on,&int&linger) &
socket.close();&
那么close会等到发送的数据已经确认了才返回。但是如果对方宕机,超时,那么会根据linger设定的时间返回。
UrgentData和OOBInline
TCP的紧急指针,一般都不建议使用,而且不同的TCP/IP实现,也不同,一般说如果你有紧急数据宁愿再建立一个新的TCP/IP连接发送数据,让对方紧急处理。
所以这两个参数,你们可以忽略吧,想知道更多的,自己查下资料。
设置socket调用InputStream读数据的超时时间,以毫秒为单位,如果超过这个时候,会抛出java.net.SocketTimeoutException。
keepalive不是说TCP的常连接,当我们作为服务端,一个客户端连接上来,如果设置了keeplive为true,当对方没有发送任何数据过来,超过一个时间(看系统内核参数配置),那么我们这边会发送一个ack探测包发到对方,探测双方的TCP/IP连接是否有效(对方可能断点,断网),在Linux好像这个时间是75秒。如果不设置,那么客户端宕机时,服务器永远也不知道客户端宕机了,仍然保存这个失效的连接。
SendBufferSize和ReceiveBufferSize
TCP发送缓存区和接收缓存区,默认是8192,一般情况下足够了,而且就算你增加了发送缓存区,对方没有增加它对应的接收缓冲,那么在TCP三握手时,最后确定的最大发送窗口还是双方最小的那个缓冲区,就算你无视,发了更多的数据,那么多出来的数据也会被丢弃。除非双方都协商好。
以上的参数都是比较重要的Java Socket参数了,其他就不另外说明了。
相关笔记推荐
精品视频课程推荐
创建规范的XML文档,DTD的作用,并且可以根据要求创建私用的DTD,通过JavaScript解析XML DOM
JavaScript的内置对象--Array、String、Date、Math等,可以通过DOM对象进行对象控制,创建控制菜单及复选框的控制,创建二级联动列表框及列表框选项的移动,JavaScript项目,创建基于JS的商品管理系统。
内容概述:Shiro是目前最热门、最易用、功能超强大的Java权限管理框架,强烈推荐,每个项目都必备的权限管理技术!通过本课程,你将从零开始直到彻底掌握Shiro的相关开发知识,达到可以进行实际项目开发的能力。包括:权限管理基础、Shiro入门、配置、身份认证、授权、Realms、Session管理、和Spring的集成、Web、Cache等众多开发细节技术
技术要点:源码级分析Shiro的授权过程、自定义开发Realm、多个Realms的开发配置、自定义开发AuthenticationStrategy、自定义开发自定义SessionDAO、和Struts2+Spring3的集成(包括修正struts2的bug)、Shiro和SpringMVC+Spring3的集成、包装使用其他的Cache框架、缓存数据同步更新的解决方案等等实际开发中常用的内容
系统、完整的学习Spring Web MVC开发的知识。包括:Spring Web MVC入门;理解DispatcherServlet;注解式控制器开发详解;数据类型转换;数据格式化;数据验证; 拦截器;对Ajax的支持;文件上传下载;表单标签等内容;最后以一个综合的CRUD带翻页的应用示例来综合所学的知识
从零到精通Spring3的开发知识;IoC/DI的思想、IoC/DI的运行流程、IoC/DI的开发指导、AOP的思想、AOP的运行流程、AOP应用的设计、Spring对JDBC和Hibernate的支持、Spring的事务、SSH的集成应用
浏览(1869)|(1)
&&交流分类:|笔记分类:
版权所有 Copyright(C) 私塾在线学习网C++语法这句C代码在((char *)curr += curr-&NextEntryDelta);C++中如何改_socket编程有关问题 服务器是VC的,客户端是C#的。连接有关问题 求帮忙!_spring3.1.1&hibernate4.1.1 整合有关问题__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
C++语法这句C代码在((char *)curr += curr-&NextEntryDelta);C++中如何改
socket编程有关问题 服务器是VC的,客户端是C#的。连接有关问题 求帮忙!
spring3.1.1&hibernate4.1.1 整合有关问题
C++语法这句C代码在((char *)curr += curr-&NextEntryDelta);C++中如何改
C++语法这句C代码在((char *)curr += curr-&NextEntryDelta);C++中怎么改((char *)curr += curr-&NextEntryDelta);上面的代码是在C中通过编译并正常使用的,在C++中出错:左操作数必须为左值
(curr += curr-&NextEntryDelta);去掉(char*)可以通过编译,但是运行会出错,我昨天发过帖子 *(char**)用这个命令也出错,
if( NT_SUCCESS(ntStatus))
if(SystemInformationClass == 5)
struct _SYSTEM_PROCESSES *curr = (struct _SYSTEM_PROCESSES *)SystemI
struct _SYSTEM_PROCESSES *prev = NULL;
while(curr)
if (curr-&ProcessId != 0 && pid != 0)
if(curr-&ProcessId == pid)
m_UserTime.QuadPart += curr-&UserTime.QuadP
m_KernelTime.QuadPart += curr-&KernelTime.QuadP
if(curr-&NextEntryDelta)
prev-&NextEntryDelta += curr-&NextEntryD
prev-&NextEntryDelta = 0;
if(curr-&NextEntryDelta)
(char *)SystemInformation += curr-&NextEntryD//还有这句
SystemInformation = NULL;
curr-&UserTime.QuadPart += m_UserTime.QuadP
curr-&KernelTime.QuadPart += m_KernelTime.QuadP
m_UserTime.QuadPart = m_KernelTime.QuadPart = 0;
if(curr-&NextEntryDelta) ((char *)curr += curr-&NextEntryDelta);//这句代码
else curr = NULL;
else if (SystemInformationClass == 8)
struct _SYSTEM_PROCESSOR_TIMES * times = (struct _SYSTEM_PROCESSOR_TIMES *)SystemI
times-&IdleTime.QuadPart += m_UserTime.QuadPart + m_KernelTime.QuadP
return ntS}------解决方案--------------------用个临时指针+,然后在强转回来char *pTemp = (char *)pTemp+=curr-&NextEntryDcurr = (struct _SYSTEM_PROCESSES *)pT
------解决方案--------------------
看起来好像是用(char *)转为地址然后加上一个值形成地址跳转!因为地址是4字节存储的!加上ULONG的正好形成一个地址跳转!C 中出错不知道什么原因…按理说应该支持的!
socket编程有关问题 服务器是VC的,客户端是C#的。连接有关问题 求帮忙!
socket编程问题 服务器是VC的,客户端是C#的。连接问题 求帮忙!!服务端 部分代码:…… sockaddr_in myaddr, cli_ int cliaddrLen = 0; HANDLE H DWORD dwThreadID; myaddr.sin_addr.S_un.S_addr = inet_addr("172.16.42.224"); myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(82);
if((ServerSock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) == INVALID_SOCKET) {
AfxMessageBox("WSASocket");
} if(0 != bind(ServerSock, (SOCKADDR *)&myaddr, sizeof(SOCKADDR))) {
closesocket(ServerSock);
AfxMessageBox("bind");
} if(listen(ServerSock,10) != 0) {
AfxMessageBox("?í?ó??·??ú??listen");
} cliaddrLen = sizeof(SOCKADDR); ClientSock = accept(ServerSock, (SOCKADDR *)&cli_addr, &cliaddrLen);……一直在这等待。客户端 部分代码:…… //socket连接服务端与客户端
public void Connect()
//建立连接socket
connectSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//获取IP地址,创建网络端点
IPAddress ipHostInfo = IPAddress.Parse("172.16.42.224");
//网络端点
IPEndPoint ipendpoint = new IPEndPoint(ipHostInfo, 82);
connectSocket.BeginConnect(ipendpoint,
new AsyncCallback(ConnectCallback),
connectSocket);
catch (Exception e)
MessageBox.Show(e.Message);
private void ConnectCallback(IAsyncResult ar)
//从传递的状态中获取套接字,创建一个客户端套接字
Socket client = (Socket)ar.AsyncS
//完成挂起的连接操作
client.EndConnect(ar);
//连接服务器成功
}……客户端能一直运行下去,就是服务端没接收。求帮忙啊,先谢谢了。------解决方案--------------------
用你给的代码基本未作修改,只修改了IP地址及补充必要的WSAStartup等,C#代码未动,运行正常,连接正常不知道你那边的网络拓扑啥样的,你把服务端跑起来,在客户端命令行里 telnet 172.16.42.224 82 能连上吗?我猜可能连不上
------解决方案--------------------应该不是你贴出来的这段代码的问题,AsyncCallback 在 .Net Compact Framework 里是被支持的,可能是你代码的其它部分的问题吧,去掉其它功能,单独把你帖子里的这个C#代码在CE上跑一下试试呢?
spring3.1.1&hibernate4.1.1 整合有关问题
spring3.1.1&hibernate4.1.1 整合问题相关配置信息:&bean id="mysf" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&
&property name="dataSource" ref="ds"/&
&!-- &property name="mappingResources"&
&value&product.hbm.xml&/value&
&/property& --&
&property name="annotatedClasses"&
&value&com.spring.bean.User&/value&
&/property&
&property name="hibernateProperties"&
&prop key="hibernate.dialect"&
org.hibernate.dialect.Oracle10gDialect
&prop key="hibernate.show_sql"&true&/prop&
&prop key="format_sql"&true&/prop&
&prop key="hbm2ddl.auto"&create&/prop&
&/property&
&bean id="ds" class="mons.dbcp.BasicDataSource" destroy-method="close"&
&property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/&
&property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/&
&property name="username" value="scott"/&
&property name="password" value="scott"/&
&/bean&配置感觉都没什么问题,但却报了class not found:org.hibernate.cache.cacheprovider错误,我在hibernate.croe里能够找到org.hibernate.cache包但没有cacheProvider类。感觉问题可能会是:少jar包,或cacheprovider过时被替代,小弟初学不能完成此检验,还请帮忙,小弟感激不尽。------解决方案--------------------楼主还是一个好心人
------解决方案--------------------
给分的好楼主
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:链接:/blog/1297746 (附源码)
链接:/blog/983801
链接:/xguo/p/3163519.html
链接:/blog/947191
链接:http://blog.csdn.net/FansUnion/article/details/
链接:/blog/1547197(附源码)
Spring3.0对异常的处理通过HandlerExceptionResolver来实现。HandlerExceptionResolver有4个实现类DefaultHandlerExceptionResolver、AnnotationMethodExceptionResolver、ResponseStatusExceptionResolver、SimpleMappingExceptionResolver。
Spring3.0对异常的处理主要可通过这两种方式:一种是使用HandlerExceptionResolver接口;一种是在@Controller处理器内部使用@ExceptionHandler注解。使用第一种方式可以实现全局异常控制,并且Spring已经提供了一个默认的实现类SimpleMappingExceptionResolver;使用第二种方式可以在Controller内部实现更个性化异常处理方式。
---方式一:HandlerExceptionResolver接口,复写resolveException()方法
springmvc通过HandlerExceptionResolver处理程序的异常,该接口仅有一个方法ModelAndView
resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)。我们可复写该方法实现全局异常的处理。
当发生异常时,springmvc会调用resolveException()方法,并返回一个ModelAndView对象。如果该方法返回了null,Spring会搜索所有注册在其环境中的实现了HandlerExceptionResolver接口的Bean,逐个执行,直到返回一个ModelAndView对象,最后转到ModelAndView对应的视图作为一个异常报告页面!
* 基于HandlerExceptionResolver接口的异常处理类
* 这个类必须声明到Spring中去,让Spring管理它,你可以使用@Component标签:
&context:component-scan base-package=&test.*& /&
* 或者使用在配置文件通过&bean/&节点配置:
&bean id=&exceptionResolver& class=&test.CustomExceptionHandler &/&
@Component
public class CustomExceptionHandler implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object object, Exception exception) {
if(exception instanceof IOException){
return new ModelAndView(&ioexp&);
}else if(exception instanceof SQLException){
return new ModelAndView(&sqlexp&);
---区分ajax请求和普通http请求进行异常处理返回:
* 说明:当在系统应用中出现普通异常时,根据是系统异常还是应用异常,跳到相应的界面,
* 当ajax异常时,在ajax的error中可直接获得异常。普通的异常我们都配置好了界面,系统会自动跳转。
public class CustomSimpleMappingExceptionResolver extends SimpleMappingExceptionResolver {
protected ModelAndView doResolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
// Expose ModelAndView for chosen error view.
String viewName = determineViewName(ex, request);
if (viewName != null) {// JSP格式返回
if (!(request.getHeader(&accept&).indexOf(&application/json&) & -1 || (request
.getHeader(&X-Requested-With&)!= null && request
.getHeader(&X-Requested-With&).indexOf(&XMLHttpRequest&) & -1))) {
// 如果不是异步请求
// Apply HTTP status code for error views, if specified.
// Only apply it if we&re processing a top-level request.
Integer statusCode = determineStatusCode(request, viewName);
if (statusCode != null) {
applyStatusCodeIfPossible(request, response, statusCode);
return getModelAndView(viewName, ex, request);
} else {// JSON格式返回
PrintWriter writer = response.getWriter();
writer.write(ex.getMessage());
writer.flush();
} catch (IOException e) {
e.printStackTrace();
---方式二:@ExceptionHandler
AnnotationMethodExceptionResolver:springmvc也默认配置了AnnotationMethodExceptionResolver,它允许通过@ExceptionHandler指定处理特定异常的方法。@ExceptionHandler:处理同一个类内触发的局部异常(如果要让其处理多个需拦截异常的处理器,则可另其他类继承此类!)
@Controller
//可以被其他处理器继承
public class MyExceptionFilter {
//该处理器类中的所有方法抛出的异常都可由此方法捕获并处理
//该注解也可制定多个异常类,如@ExceptionHandler(value={IOException.class,SQLException.class})
@ExceptionHandler(Exception.class)
public String handleException(Exception e, HttpServletRequest req) {
System.out.println(&exception name: & + e.getClass().toString());//异常名
System.out.println(&exception cause: & + e.getCause());
System.out.println(&exception msg: & + e.getLocalizedMessage());
//e.printStackTrace();
StackTraceElement[] ste = e.getStackTrace();
StringBuffer sb_e = new StringBuffer();
for(int j=0;j&ste.j++){
if(ste[j].toString().contains(&xxxx&)) {
sb_e.append(ste[j].toString()+&,
System.out.println(&Exception detail: &);//异常详细信息
System.out.println(sb_e.toString());
StringBuffer sbUrl = new StringBuffer();//拼url
System.out.println(&request method: &+req.getMethod());//get,post
System.out.println(&request encode: & + req.getCharacterEncoding());//编码
System.out.println(&request mapping: &+req.getRequestURL().toString());//请求url方法
sbUrl.append(req.getRequestURL().toString());
Enumeration en = req.getParameterNames();//请求参数-值
for(int i=0; en.hasMoreElements(); i++){
String arg = en.nextElement().toString();
sbUrl.append(&?&);
sbUrl.append(&&&);
sbUrl.append(arg + &=& + req.getParameterValues(arg)[0]);
System.out.println(&request url: & + sbUrl.toString());
if(ex instanceof BusinessException) {
return &error-business&;
}else if(ex instanceof ParameterException) {
return &error-parameter&;
return &error&;
return &forward:error.jsp&;
---方式三:SimpleMappingExceptionResolver
SimpleMappingExceptionResolver:可对全局异常进行统一处理。
&bean class=&org.springframework.web.servlet.handler.SimpleMappingExceptionResolver&&
&!--设置日志输出级别,不定义则默认不输出警告等错误日志信息。链接:/blog/875830 --&
&property name=&warnLogCategory& value=&WARN& /&
&!-- 默认错误页面,就是不在exceptionMappings指定范围内 --&
&property name=&defaultErrorView& value=&error&&&/property&
&!-- 定义需要特殊处理的异常,如当发生IOException异常时跳转到error/ioexp视图--&
&property name=&exceptionMappings&&&span style=&font-family: Arial, Helvetica, sans-&&&!—key为异常类,可以是全路径,错误页面或Controller路径!会自动跳转到对应url --&&/span&
&prop key=&IOException&&redirect:/login&/prop&
&prop key=&java.sql.SQLException&&error/sqlexp&/prop&
&/property&
---方式四:&error-page&
DefaultHandlerExceptionResolver:Springmvc默认装配了DefaultHandlerExceptionResolver,它会将springmvc的异常转换成对应的响应状态码(500,404等)。对于Unchecked Exception而言,由于代码不强制捕获,往往被忽略,如果运行期产生了Unchecked Exception,而代码中又没有进行相应的捕获和处理,则我们可能不得不面对尴尬的404、500……等服务器内部错误提示页面。
我们需要一个全面而有效的异常处理机制。目前大多数服务器也都支持在web.xml中通过&error-page&(Websphere/Weblogic)或者&error-code&(Tomcat)节点配置特定异常情况的显示页面。(springmvc)操作如下:
1.在web.xml中配置响应状态码对应的页面,如:
&error-page&
&error-code&500&/error-code&
&location&/WEB-INF/pages/error/500.jsp&/location&
&/error-page&
&!-- 未捕获的错误,同样可指定其它异常类,或自定义异常类 --&
&error-page&
&exception-type&java.lang.Exception&/exception-type&
&location&/uncaughtException&/location&
&/error-page&
2. applicationContext.xml中配置
&!-- 错误路径和错误页面,注意指定viewResolver --&
&mvc:view-controller path=&/404& view-name=&404&/&
&mvc:view-controller path=&/500& view-name=&500&/&
&mvc:view-controller path=&/uncaughtException& view-name=&uncaughtException&/&
附:.hk/search?newwindow=1&safe=strict&espv=210&es_sm=93&q=error+page%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8&revid=&sa=X&ei=ORwOU7K_INKbiQeTjIG4BA&ved=0CIcBENUCKAE&biw=1440&bih=737
---方式五:Spring3.2新注解@ControllerAdvice
链接:/blog/1866350
@ControllerAdvice,是spring3.2提供的新注解。会把@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法(全局的)
有一次发现springmvc3.2.x的@ControllerAdvice注解不起作用,参考链接/linux/spring3_2_mvc__ControllerAdvice_buqizuoyong_5786240.html加上@EnableWebMvc后就可以了。但是,后来又发现会导致这个原因是因为项目的springmvc配置文件中没有配置&mvc:annotation-driven /&,于是将其配置上。但是配置上&mvc:annotation-driven /&后问题就来了,启动的时候就报异常,看了下原因,感觉是@EnableWebMvc注解导致的,于是将该注解删除掉,果然就正常启动了。不过,至于其中的原理还是理解不深刻,不知道内部是怎么调用的,只是发现当配置上&mvc:annotation-driven /&的时候不应该用@EnableWebMvc修饰@ControllerAdvice。(待研究)附链接:/blog/1738599。/?p=196。
测试后发现,当全局异常和局部异常都存在时,全局异常处理会被局部异常处理覆盖。
* 全局异常
//@EnableWebMvc
@ControllerAdvice
public class MyExceptionHandler {
@ExceptionHandler(Exception.class)
public String handleException(Exception re, HttpServletRequest request) {
System.out.println(&error.......&);
return &forward:error.jsp&;
相关 [spring mvc 异常处理] 推荐:
- 编程语言 - ITeye博客
链接:/blog/1297746 (附源码). 链接:/blog/983801 . 链接:/xguo/p/3163519.html . 链接:/blog/947191 . 链接:http://blog.csdn.net/FansUnion/article/details/. 链接:/blog/1547197(附源码).
Spring3.0对异常的处理通过HandlerExceptionResolver来实现.
- 互联网 - ITeye博客
源:/blog/1547197. 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理. 每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大. 那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护. 下面将介绍使用Spring MVC统一处理异常的解决和实现过程. Spring MVC处理异常有3种方式:. (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver;.
- 编程语言 - ITeye博客
使用RAISE_APPLICATION_ERROR存储过程. ============================================================
--演示该存储过程
BEGIN. RAISE_APPLICATION_ERROR(-20000, &Account past due.&);-- explicitly raise exception
--创建子程序
CREATE OR REPLACE PROCEDURE account_status (. END IF;
--调用子程序
DECLARE. -- INSERT INTO t VALUES(due_date);
--调用子程序
- BlogJava-首页技术区
欢迎来到“
Under The Hood”第六期. 本期我们介绍
JVM处理异常的方式,包括如何抛出和捕获异常及相关的字节码指令. 但本文不会讨论finally子句,这是下期的主题. 你可能需要阅读
往期的文章才能更好的理解本文. 在程序运行时,异常让你可以平滑的处理意外状况. 为了演示JVM处理异常的方式,考虑NitPickyMath类,它提供对整数进行加,减,乘,除以及取余的操作. NitPickyMath提供的这些操作和Java语言的“+”,“-”,“*”,“/”和“%”是一样的,除了NitPickyMath中的方法在以下情况下会抛出检查型(checked)异常:上溢出,下溢出以及被0除.
- Oracle - 数据库 - ITeye博客
5.1.1 预定义的异常处理. 5.1.2 非预定义的异常处理. 5.1.3 用户自定义的异常处理. 5.1.4
用户定义的异常处理. 5.2.1 在执行部分引发异常错误. 5.2.2 在声明部分引发异常错误. 5.3 异常错误处理编程. 5.4
在 PL/SQL 中使用 SQLCODE, SQLERRM异常处理函数. 即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件. 一个优秀的程序都应该能够正确处理各种出错情况,并尽可能从错误中恢复. 任何ORACLE错误(报告为ORA-xxxxx形式的Oracle错误号)、PL/SQL运行错误或用户定义条件(不一写是错误),都可以. 当然了,PL/SQL编译错误不能通过PL/SQL异常处理来处理,因为这些错误发生在PL/SQL程序执行之前.
- 研发管理 - ITeye博客
任务与预先设定的规则不相符的情况都可以称之为异常. 但凡业务逻辑操作,都会划定一些边界或规则,但是往往事与愿违,总会有调皮鬼来挑战系统的健壮性. 用户并不都是知道潜规则的,比如用户的银行账户中只有100块钱,但是用户不查询就直接取200块. 码农有时候太过自信了,比如你在编写文件下载功能时忽略了文件有可能不存在这个分支流程. 软件系统也是要靠天吃饭的,谁都保不准网络一直畅通,硬盘一直稳定. 有问题我们就要解决问题,如果问题解决不了,那么就把问题的影响面降到最低. 对于异常也是如此,为了提高健壮性,需要对于异常进行兼容. 处理异常一个很重要的原则是不逃避,不歪曲. 吞异常与提供错误的异常信息一样罪恶.
- CSDN博客Web前端推荐文章
理解异常在javaScript面向对象编程是非常重要的,异常是一种非常强大的处理错误的方式.
首先我们来看一个有问题的代码:. 在以上这个例子中,访问一个不存在的变量,在这种情况下,程序会怎么处理. 很早以前的处理方式就是程序直接崩溃死掉,所以我们不能容忍这种处理方式,需要有办法来处理.
最简单的处理方式是先检查,像这样:.
上面这种处理方式,仍然可能还会出现错误. 因为window.func可能不是一个函数,因此我们仍需要这样检查:. 在上面的例子中,typeof确保变量存在并确保是个函数.
我们满怀希望地做了很多需要的检查来确保执行func是安全的.
- 博客 - 伯乐在线
译者注:这是一篇2003年的文章,因为时间久远,可能有些观点已经过时,但里面讨论的大部分方法如今仍能适用. 如若有其他好的错误处理的方法,欢迎留言. 异常处理的关键就在于知道何时处理异常以及如何使用异常. 这篇文章,我会提到一些最佳的异常处理方法. 我也会总结checked exception的用法. 我们
程序员都想写出高质量的代码来解决问题. 但是,异常有时会给我们的代码带来副作用. 没有人喜欢副作用,所以我们很快找到了方法来改善它们. 我看见过许多聪明的程序员这样来处理异常:. 当异常被抛出后,正常的程序执行过程中断,控制权交给catch段,catch段会catch 异常,然后抑制异常的进一步扩大.
- 博客 - 伯乐在线
注:本文来自志军(@
_Zhijun )在微博推荐的一篇转载于的旧文,他说“没法找到原作者”. 的确,我也花了半个多小时在找原作者. 先是找到了一个标注“日转字Java研究组织”的文章(“Java研究组织”的域名已过期),后来找到是大连理工大学碧海青天BBS上一个发于的2003年5月中旬的
合集帖子,其中提到一条来自 CSDN 的链接,可惜该链接已挂,否则应该能找到作者的. 你觉得自己是一个Java专家吗. 是否肯定自己已经全面掌握了Java的异常处理机制. 在下面这段代码中,你能够迅速找出异常处理的六个问题吗. 作为一个Java
程序员,你至少应该能够找出两个问题.
- BlogJava-qileilove
java网络编程Socket通信中,通常会遇到以下异常情况:.   第1个异常是 java.net.BindException:Address already in use: JVM_Bind.   该异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)操作时. 异常的原因是以为与port一样的一个端口已经被启动,并进行监听. 此时用netstat -an命令,可以看到一个Listending状态的端口. 只需要找一个没有被占用的端口就能解决该问题了.   第2个异常是java.net.ConnectException: Connection refused: connect.
坚持分享优质有趣的原创文章,并保留作者信息和版权声明,任何问题请联系:@。

我要回帖

更多关于 spring3.0下载 的文章

 

随机推荐