新手提升JSP技术能力的一点建议-调试篇

保姆级教程:用Python和PyTorch复现PTB-XL心电信号分类论文(附完整代码) 本文提供了一份详细的PTB-XL心电信号分类教程,涵盖从数据预处理到模型优化的完整流程。通过PyTorch实现三种深度学习架构(Conv1D、SincNet和熵特征融合网络),并针对医疗AI特有的类别不平衡问题提供解决方案。教程包含可运行的代码示例,帮助开发者快速复现论文结果并应用于实际心电信号分析场景。 阅读详情

最近又发现了许多人提问JSP里面遇空指针的问题,突然想起我还不是小版主时,就写过一个类似的文章。不过那时没有引起太大的反向,也就冷清了。今天利用【特权】加为精华。

同时将此文发布到博客上,希望对初学者掌握一定的调试技巧有帮助。

原文地址:http://www.java2000.net/viewthread.jsp?tid=223

论坛地址:http://topic.youkuaiyun.com/u/20080107/09/30190cef-a255-43ac-ad78-4e5201791019.html?seed=1724603974

声明:此文为2008年1月7日的帖子,部分内容在我以后发布的帖子中出现了。此文可以看作陈年老帖了。

一 如何快速提升自己的技术能力
做项目。 自己假设的也算。

比如你要做一个论坛,像优快云 这样的。 在制作过程中,你会遇到非常多的困难。 
你的代码结构也会变动很多次,我说的是结构,代码就变动更多了。 
遇到问题,首先到搜索引擎上去搜索,我只去google,可以确定一点,

你绝对不是第一个遇到这个问题的人,也不是最后一个。 

只有自己通过努力思考,搜索,最终掌握的东西才真正是自己的。  
自己实在想不通,也找不到(因为不会找,而不是没有),再到论坛,QQ什么的,找其它人帮忙 
问题也会局限在某个技术点上,毕竟你已经自己思考过了,别人稍微一点拨,你就会豁然开朗的。 
那些直接问,这个功能怎么做啊的,基本都不是自己认真思考过的,否则他只会问,谁知道XXX的地方,怎么弄才能达到YYY的效果? 

另外,英文是不不可少的,看到那么多人带着异常来求救,真是.... 


二 关于JSP的调试

授之以鱼不如授之以渔,掌握有效的调试方法才是正道。

NullPointerException 
ClassNotFoundException 
这2个出现的频率太高了,如果他能仔细看的话,异常信息连那一行都给你指出来了,自己直接去看源代码不就行了 
以tomcat为例。 jsp文件会先被tomcat的 jspc 翻译成 .java文件,一个servlet, 然后再javac 编译成.class文件

  找到错误

  你的错误信息一般有2种大类
  1 源代码错误

org.apache.jasper.JasperException: Unable to compile  class   for  JSP: 

An error occurred at line: 
24  in the jsp file:  / viewthread.jsp
Syntax error, insert 
" ; "  to complete Statement
21 :   }
22 :    if (post.getIdParent() > 0 ) {
23:     %>
24: <script type="text/javascript">self.location="viewthread.jsp?tid=<%post.getIdParent()%>";</script>
25: <%
26:   return;
27:   }



Stacktrace:
        at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:
85 )
        at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:
330 )
        at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.
可以看到在第24行,出现了无法编译的问题,经检查,那个<%post.getIdParent()%>少了等于号 <%=post.getIdParent()%>
  
这类错误因为错误信息和源代码逐行对应,所以比较好找。

  2 运行错误
HTTP Status  500   -  

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling 
this  request.

exception 

org.apache.jasper.JasperException
        org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:
512 )
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:
395 )
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:
314 )
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:
264 )
        javax.servlet.http.HttpServlet.service(HttpServlet.java:
802 )


root cause 

java.lang.NullPointerException
        java.math.BigDecimal.compareTo(BigDecimal.java:
2406 )
        com.goodtp.sales.html.Order.getOrderItem(Order.java:
146 )
        com.goodtp.sales.html.HtmlOrder.saveOrder(HtmlOrder.java:
214 )
        org.apache.jsp.saler.saveOrder_jsp._jspService(saveOrder_jsp.java:
180 )
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:
97 )
        javax.servlet.http.HttpServlet.service(HttpServlet.java:
802 )
这个错误最常见,请注意如下这一行
org.apache.jsp.saler.saveOrder_jsp._jspService(saveOrder_jsp.java:180)

  错误在 saveOrder_jsp.java 的 180行, 怎么找到这个文件呢
  
  这个文件就在 tomcat/works/ 目录下面,你可以在这个目录下面搜索文件,就能找到saveOrder_jsp.java
  打开后,找到 180行,就可以看到到底是哪里出了问题了。

  对于eclipse集成Tomcat调试的, 这个文件不在 tomcat目录下面,而是在
eclipse/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work

  实在找不到,就全盘搜索,一般也就1-3分钟的事情。


  问题找到了,怎么调试呢?

  我们假设你没有用过log工具,我们现在就用最简单的 System.out.println() 来做

  比如NullPointerException, 那证明那一行的调用方法的对象是null,
   int id = order.getId(); //

  你可以修改成
  System.out.println("order="+order);
  int id = order.getId();

  运行,你就能在控制台看到
  order=null 的输出,从而确定 order并没有被正确的赋值。

  然后以这里为起点,逐步往前面查找,看看到底是哪里给order赋值的。比如找到
  Order order = orderService.find(orderId);
  
  这也许是因为 orderId对应的order根本没有啊,也许是orderId取错了参数。
  修改为
  System.out.println("orderId="+order);
  Order order = orderService.find(orderId);

  运行,输出为
  orderId=35

  查看数据库,如果不存在35号数据,可以肯定参数错误,如果存在,可以肯定是 orderService.find() 方法里面出现了问题。查进取


  这就是最基本的jsp调试方法.

  对于java应用,比如Swing, Eclipse提供了集成单步调试工具,就更方便了。


  随着经验的积累,你会很快的找到问题的原因,而且同样的错误,你也会降低极大的再次出现的几率。

三 ClassNotFoundException 的解决方法
  classpath问题,对于jsp,最大的可能是因为你的jar没有放对地方,对于tomcat 有2个地方可放
  a) tomcat/shared/lib 目录 tomcat 5.5版本 或者 tomcat/lib目录 tomcat6版本 
  b) 你的应用的 WEB-INF/lib 目录 推荐放在这里。

  如果你不确认需要哪些jar,就把hibernate随包带的都复制过去就行了。 虽然不推荐,但对于初学者,也是一个临时的解决方法


四 最常见的几种问题和解决方法
  1 字符串的== 判断,应该用 equals() 进行
  2 ResultSet 使用前忘了 rs.next();
  3 数据库连接没有放在 finally{} 里面关闭
  4 没有判断每个方法的返回值,造成程序隐患





<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
DNN加速器脉动阵列轻量级瞬时故障检测 本文系统综述了面向深度神经网络(DNN)脉动阵列加速器的轻量级瞬时故障检测技术。通过分析比较算法级校验(ABFT)、数值异常监测(剪裁、中值滤波等)、硬件编码检错(AN码、剩余码)以及选择性冗余等方案,指出这些方法能以5%-10%的开销实现对权重和激活比特翻转的高效检测,远低于传统ECC/冗余计算的成本。研究显示,结合多种轻量技术可构建多层防护体系,在保障推理可靠性的同时保持加速器的高性能特性。该成果为安全关键领域的DNN加速器设计提供了重要参考。 阅读详情

相关推荐

深度学习基于Resnet18的图像多分类--训练自己的数据集(超详细 含源码)

深度学习基于Resnet18的图像多分类--训练自己的数据集(超详细 含源码)

她是不会无条件的!! 2万+

JSP介绍

目录 一、JSP入门 二、JSP 运行原理 1、JSP 技术特点 2、JSP 与 Servlet 区别 三、JSP 的使用 1、JSP 的三种原始标签 2、JSP 原始标签的使用 3、JSP 的指令标签 4、JSP 三大指令 四、JSP 的内置对象 request常用的方法: response常用的方法 session session常用方法 五、JSP四大作用域对象 一、JSP入门 1、JSP技术介绍 为什么会出现JSP(Java Server Pages)技术..

Zxy_zzz的博客 1万+

YOLOv11+SAHI实战:5步搞定无人机航拍小目标检测(附VisDrone数据集调参技巧)

本文详细介绍了如何结合YOLOv11目标检测框架与SAHI切片推理技术,高效解决无人机航拍图像中的小目标检测难题。通过VisDrone数据集调参技巧和5步实战指南,帮助开发者快速构建高性能检测系统,显著提升小目标检测的准确率和效率。

rum55的博客 191

JavaWeb开发 JSP技术详解

仅为个人学习使用。

,,,,,,, 6609

STC15W204S最小系统开发指南:从串口通讯到自动热加载全流程

本文详细介绍了STC15W204S最小系统的完整开发流程。从芯片资源解析、最小系统搭建、串口通讯驱动编写(使用Timer2生成波特率),到实现基于魔术值触发的自动热加载功能,并最终集成Keil与STC-ISP软件,构建高效的自动化开发工作流,显著提升嵌入式调试效率。

a1b2c的博客 393

手把手教你用三极管搭建麦克风音频放大电路(附完整电路图)

本文详细介绍了如何使用三极管搭建麦克风音频放大电路,包括电路设计基础、元件选择、完整电路图及分步焊接指南。通过实际操作和调试技巧,帮助电子爱好者和学生深入理解模拟电路原理,实现音质清晰的音频放大效果。

Black的专栏 987

JSP技术

学习目标 一、JSP概述 二、JSP基本语法 三、JSP隐式对象 学习内容 一、JSP概述 1.1 什么是jsp: 它的英文全称 java server pages ,java服务端页面,它是建立在servlet规范基础上的动态网页开发技术。 java 服务端 页面: 在jsp上可以写java代码,也可以写html标记,它运行在服务器端。 jsp = java + html + jsp自身的一些东西。 为什么会产生jsp技术: 因为在早期没有jsp时,需要servlet向页面写数据,比较麻烦,所以就产生了

m0_55689562的博客 1万+

Apollo和autoware规划算法代码ros移植-路径规划可跑工程分享

Apollo6.0规划核心代码移植到Ros工程,可编译移植分享

weixin_39735688的博客 8509

JSP详解,看这一篇就够了(含示例)

动作标签为开发者提供了一种方便的方式来控制和管理 JSP 页面的行为。通过使用动作标签,可以轻松地包含其他页面、转发请求、创建 JavaBean 实例、传递参数等,从而使得页面的逻辑更加清晰、易于维护。JSP隐式对象是JSP的重要组成部分,它们提供了对请求、响应、会话、应用上下文等各种Web资源的直接访问,极大地简化了Web应用程序的开发。了解和熟练使用这些隐式对象,是掌握JSP开发的重要一步。JSP是Java Web开发的重要组成部分,适用于创建动态网页。

2301_79858914的博客 2万+

高速设计注意事项总结——MDI篇

在以太网高速通信系统中,MDI(Medium Dependent Interface,介质相关接口)是连接物理层芯片(PHY)与传输介质(如网线)的关键接口,其设计直接影响信号完整性、传输速率和抗干扰能力。本文围绕 MDI 及 RJ45 接口电路、关键参数、设计与布线要点展开,为高速以太网设计提供参考。本文包含MDI 及 RJ45 接口电路组成、电路设计注意事项、布局布线要求等内容

qq_16237389的博客 1452

程序设计二(面向对象)_实训10_复杂类的实现_ArrayList类的实现

第1关:构造函数与析构函数的实现

2401_83406306的博客 822

AWK

一.AWK基本概念 1.基本用法 1.Centos中的文本处理工具 1)grep,egrep,fgrep:基于pattern(模式)的文本过滤工具 2)sed:流编辑器,行编辑器;通过模式空间,保持空间实现编辑 3)AWK:报告生成器,实现格式化文本输出 gawk - pattern scanning and processing language:基于模式扫描以及语言处理 1.AWK: Aho,...

Kasumi_yuki的博客 6626

【OpenFOAM】-olaFlow-算例10-wavemakerTank

采用 Flap和Piston两种方式的动网格进行造波

ou_no的博客 2169

awk用法

&“表示"与”、“||表示"或”、"!还可以进行简单的数学运算,如+、一、*、/、%、^分别表示加、减、乘、除、取余和乘方。逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出。其他内置变量的用法FS(输入)、OFS、NR、FNR、RS、ORS。AWK 工作通过三个步骤。

yangye2424637628的博客 2453

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Linux awk 命令

方法一:-v varname=value ,变量名区分字符大小写。方法二:在program中直接定义。这里是封面:

yangchuang111213的博客 1810

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

awk嵌套awk_与AWK一起喝咖啡

awk嵌套awk 以下内容基于一个真实的故事,尽管某些名称和详细信息已更改。 很久以前,在一个遥远的地方,有一间办公室。 由于各种原因,该办公室没有购买速溶咖啡。 那个办公室的一些工人聚在一起,决定建立“咖啡角”。 Coffee Corner的一名成员将购买速溶咖啡,其他成员将偿还。 结果是有些人喝的咖啡比其他人多,因此增加了“半员”级别:每周允许一半成员喝有限数量的咖啡,并且支付一半...

cuml0912的博客 2914

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Shell脚本,awk编程语言,awk科普,awk语法,风格,awk的print功能,列数$num

Shell脚本,awk编程语言,awk科普,awk特点和作用 O、介绍awk 1、基于模式匹配检查输入文本,逐行处理并输出 2、通常用于在shell脚本中,获取指定的数据 3、单独使用时,可以对文本数据做统计 一、awk不同与sed和grep的地方 1、grep的作用是从文件中过滤并显示出指定内容的内容行。 2、sed除了可以从文件中过滤出指定内容的内容行,还能对文件的行数据进行非交互式编辑和其他操作。 3、awk用于对指定文件的数据进行分列,区别与以行作为数据单位,awk可以将内容按照规则分列,并对逐列的

ganfanren00001的博客 5351

awk

awk:按行取列awk的默认分隔符:空格,tab键,有多个空格自动压缩成一个。

QChestnut的博客 917

awk命令

前言 awk是一个非常棒的数据处理工具,相较于sed常常作用于一整行的处理,awk则比较倾向于一行当中分成数个字段来处理,因此,awk相当适合处理小型的文本数据。 awk工作原理 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk...

Yanghu4112的博客 2971

awk是什么?awk工作原理是什么?怎么用awk?

一、awk介绍 1. awk概述awk是一种==编程语言==,主要用于在linux/unix下对==文本和数据==进行处理,是linux/unix下的一个工具。数据可以来自标准输入、一个或多个文件,或其它命令的输出。awk的处理文本和数据的方式:==逐行扫描==文件,默认从第一行到最后一行,寻找匹配的==特定模式==的行,并在这些行上进行你想要的操作。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Wein...

vecloud的博客 3473

AWK脚本

1、AWK脚本定义格式 格式1: BEGIN{} pattern{} END{} 格式2: #!/bin/awk -f #add 'x' right BEGIN{} pattern{} END{} 关于awk 脚本,需要注意两个关键词BEGIN和END BEGIN{ 这里面放的是执行前的语句 } END {这里面放的是处理完所有的行后要执行的语句} {这里面放的是处理每一行时要执行的语句} 格式1假设为f1.awk文件,格式2假设为f2.awk文件 awk [-v var=val

qq_48644092的博客 2388

linux awk命令和awk语言

Awk 是一个工具,使程序员能够编写小巧但有效的程序,这些程序以定义要在文档的每一行中搜索的文本模式的形式出现,并定义当在某一行中找到匹配项时应采取的操作。Awk 的内置变量包括字段变量—$1、$2、$3 等($0 是整个行)—这些变量将一行文本分解为单独的单词或称为字段的片段。由于默认情况下,输入行是输入记录,因此默认的记录分隔符字符是换行符。通常大家说的awk几乎都是在linux/unix中使用的awk命令,见下,在上面的例子中,awk 命令打印出所有匹配 ‘manager’ 的行。

有人说学习`这个`最好的时间是十年前,有人说最好的时间是现在,众说纷纭... 847

awk详解

awk介绍 awk是一种可以处理数据、产生格式化报表的语言,功能十分强大。awk 认为文件中的每一行是一条记录 记录与记录的分隔符为换行符,每一列是一个字段 字段与字段的分隔符默认是一个或多个空格或tab制表符. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每条记录以字段分隔符分成若干字段,然后输出各个字段的值. awk语法 awk [options] [BEGIN]{program} [END][file] awk # 执行命令 [options] # 选项 BEGIN]{prog

学习笔记 5717

(P9)awk:什么是awk,awk简单用法,awk脚本语法,awk执行过程

文章目录1.什么是awk2.awk简单用法3.awk脚本语法4.awk执行过程 1.什么是awk awk 是什么 awk 是一种用于处理数据和生成报告的编程语言 awk 可以在命令行中进行一些简单的操作,也可以被写成脚本来处理较大的应用问题 awk 与 grep、sed 结合使用,将使 shell 编程更加容易 Linux 下使用的 awk 是 gawk awk 如何工作 awk 逐行扫描输入 ( 可以是文件或管道等 ),按给定的模式查找出匹配的行,然后对这些行执行 awk 命令指定的操作。 与

喜欢打篮球的普通人 1220
上一篇: 使用OpenAPI读取指定人员积分信息
下一篇: 面试题-Java作用域描述符的区别
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值