我正在创建一个.jsp页面的问题。对于那些担心的人来说,该网站是为了完成家庭作业,但是,我试图超越所需要的,并且不会要求任何与评分相关的内容。这完全是为了我自己的利益。
开展业务: 我从用户那里得到一个输入,执行方法=“发布”并刷新页面,并且在理想的情况下它可以工作(那是作业。)但是,我试图在这个案例中做一个try / catch块用户将字符串输入int字段。
int Svolt = 0;
double Amperes = 0.0;
double LEDdrop = 0.0;
if (request.getParameter("Svolt") != null) {
try {
Svolt = Integer.parseInt(request.getParameter("Svolt"));
} catch ( NumberFormatException e ) {
%>
<script type ="text/javascript">
alert("The source voltage must be an integer. Please fix this.");
</script>
<%
}
我已尝试将“NumberFormatException”切换为“Exception”,但它返回了相同的错误代码。 早些时候,我在if()语句之前尝试了catch,它运行了,但是没有显示我想要的警告框。
该代码如下:
final double MA_TO_A = 0.001;
int Svolt = 0;
double Amperes = 0.0;
double LEDdrop = 0.0;
try {
if (request.getParameter("Svolt") != null) {
try {
Svolt = Integer.parseInt(request.getParameter("Svolt"));
} catch (Exception e)
{
%>
<script type ="text/javascript">
alert("The source voltage must be an integer. Please fix this.");
</script>
<%
}
Amperes = Double.parseDouble(request.getParameter("Amperes"));
LEDdrop = Double.parseDouble(request.getParameter("LEDdrop"));
out.println("Ideal resistance is: " + ((Svolt - LEDdrop) / (Amperes * MA_TO_A)) + " Ohms.");
}
} catch (Exception e) {
out.println("Please make sure your inputs are correct.");
}
任何帮助都表示赞赏,您的时间也是如此。非常感谢你!
编辑: 抱歉,打算复制粘贴错误代码:
org.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: "a"
测试输入是字符串“a”
EDIT2: 备份/编辑/测试@ Nambari的建议
final double MA_TO_A = 0.001;
int Svolt = 0;
double Amperes = 20.0;
double LEDdrop = 1.8;
try {
if (request.getParameter("Svolt") != null) {
try {
Svolt = Integer.parseInt(request.getParameter("Svolt"));
} catch (Exception e)
{
%>
<script type ="text/javascript">
alert("The source voltage must be an integer. Please fix this.");
</script>
<%
}
out.println("Ideal resistance is: " + ((Svolt - LEDdrop) / (Amperes * MA_TO_A)) + " Ohms.");
}
} catch (Exception e) {
out.println("Please make sure your inputs are correct.");
}
输出: 理想电阻为:-90.0欧姆
警告框说(“源电压必须是整数。请解决此问题。”)
没有错误代码。
没有out.println说(“请确保您的输入正确”)。
最终编辑:
代码现在几乎可以正常工作,但还不错。
final double MA_TO_A = 0.001;
int Svolt;
double Amperes;
double LEDdrop;
if (request.getParameter("Svolt") != null)
{
try
{
try
{
Svolt = Integer.parseInt(request.getParameter("Svolt"));
} catch (Exception e)
{
%>
<script type ="text/javascript">
alert("The source voltage must be an integer. Please fix this.");
</script>
<%
Svolt = 0;
}
try
{
Amperes = Double.parseDouble(request.getParameter("Amperes"));
} catch (Exception e)
{
%>
<script type = "text/javascript">
alert("The source voltage must be an integer. Please fix this.");
</script>
<%
Amperes = 0.0;
}
try
{
LEDdrop = Double.parseDouble(request.getParameter("LEDdrop"));
} catch (Exception e)
{
%>
<script type = "text/javascript">
alert("The source voltage must be an integer. Please fix this.");
</script>
<%
LEDdrop = 0.0;
}
out.println("Ideal resistance is: " + ((Svolt - LEDdrop) / (Amperes * MA_TO_A)) + " Ohms.");
} catch (Exception e)
{
out.println("Please make sure your inputs are correct.");
}
}
我知道很多行话,但那是最终的结果。不知何故,这一切都有效。感谢所有帮助过的人!
答案 0 :(得分:3)
首先,不建议在java servlet页面中嵌入java代码,你应该只关注jsp中的表示层,没有业务逻辑,你需要一个servlet来接受http请求,做你的逻辑,将结果放在响应上,然后重定向到jsp。
另一方面,JSP页面抛出的异常类型是org.apache.jasper.JasperException,而不是NumberFormatException,apache jasper JSP引擎正在捕获数字格式异常,并向Tomcat抛出JasperException。
另外,清除tomcat缓存以确保将JSP部署到最后一个版本,为此,删除以下文件夹和文件(包括war):
{tomcat安装路径} \ work \ Catalina \ localhost(你的应用)
{tomcat安装路径} \ webapps(您的应用)
如果你捕获泛型java.lang.Exception,它应该可以工作。
也试试这个:
final double MA_TO_A = 0.001;
int Svolt = 0;
double Amperes = 0.0;
double LEDdrop = 0.0;
try {
if (request.getParameter("Svolt") != null) {
try {
Svolt = Integer.parseInt(request.getParameter("Svolt"));
} catch (Exception e)
{
//Changed to avoid the message if no exception, or for some other reason it fails to execute the conditions
out.println("<script type =\"text/javascript\">")
out.println("alert(\"The source voltage must be an integer. Please fix this.\");") ;
out.println("</script>")
}
Amperes = Double.parseDouble(request.getParameter("Amperes"));
LEDdrop = Double.parseDouble(request.getParameter("LEDdrop"));
out.println("Ideal resistance is: " + ((Svolt - LEDdrop) / (Amperes * MA_TO_A)) + " Ohms.");
}
} catch (Exception e) {
out.println("Please make sure your inputs are correct.");
}
答案 1 :(得分:1)
这是根据我的评论发布的答案:
我建议删除除表单上的Svolt相关代码之外的所有内容并尝试。我觉得还有其他东西搞砸了。备份现有代码。删除除Svolt之外的所有内容,看看,我们可以解决这个问题。
确保try / catch块与代码流正确同步,如上面的注释所示。