GDPU JavaWeb JSP异常处理与获取表单

本文详细介绍了JSP中的异常处理,包括errorPage和isErrorPage属性的使用,以及如何在JSP页面中进行加减乘除运算并处理除数为零的异常。同时,文章还展示了如何获取和处理表单数据,包括中文乱码问题和省份/城市联动的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不卖关子,本次实验进行JSP处理与Java异常复习。

JSP异常处理 

1.errorPage属性和isErrorPage属性的使用。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page errorPage="errorHandler.jsp" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    String name=request.getParameter("name");
    if(name==null)
        throw new RuntimeException("没有指定name属性。");
%>
Hello,<%= name%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isErrorPage="true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
请求不能被处理:<%= exception.getMessage()%><br>
请重试!
</body>
</html>

直接运行,没有赋值是有异常的,所以页面出现异常

 

在URL处给name传递参数值,即可得到正常页面

一个jsp页面用来抛出异常,同时通过指令errorpage与另一个处理异常的jsp页面isErrorPage属性关系起来。

 

2.编写一个JSP页面,指定两个数(或随机产生两个数,或由用户输入两个数)在页面显示,并计算两数加减乘除运算的结果,并利用errorPage属性和isErrorPage属性做必要的异常处理。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page errorPage="errordivision.jsp" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    //产生两个0到9的随机数
    int n1= (int) (Math.random()*10);
    int n2= (int) (Math.random()*10);

    try{
    int add=n1+n2;
    int sub=n1-n2;
    int mul=n1*n2;
    int div=n1/n2;
        out.print(n1+"     "+n2+"<br>");
        out.print("两数相加:"+add+"<br>");
        out.print("两数相减:"+sub+"<br>");
        out.print("两数相乘:"+mul+"<br>");
        out.print("两数相除:"+div+"<br>");
    }
    catch(Exception e){
        if (n2 == 0) {
            throw new Exception("除数不能为0");
        }
    }

%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isErrorPage="true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
请求不能被处理:<%= exception.getMessage()%><br>
请重试!
</body>
</html>

 

注意一下,用的随机数是0到9,所以除数是可以为0的,这时候就可以编写jsp页面捕获异常,这里用的打印方式是exception.getMessage(),即获取到原来页面抛出的异常信息,可以看到原来页面用了throw抛出异常做了异常处理。还有这题要写try{}跟catch{},否则,运算时当异常出现,程序就不会再执行,后面抛出的异常是处理不了的,即exception.getMessage()是用不了的。在这复习一下java的异常,简单点讲,就是把可能出现的异常放在try{}里,一旦捕获到异常就直接跳到catch{}进行异常处理,可以直接在catch{}打印异常信息,也可以调用一些exception的方法。异常处理也可以用throw与throws抛出异常。还有个finally{}语句,无论异常是否被捕获,最后一定运行finally语句块的代码。在这里用了try{}跟catch{}就是可以让随机数正常加减乘除的时候正常运行,当然也可以把throw扔到运算前提前做处理,如果不做异常处理,程序是报错的。然后这种异常的题想做异常处理,就尽量让原页面出现异常的情况,否则另一个jsp处理异常的页面体现不了。

JSP获取表单 

📕两个重要的jsp语句。

request.getParameter();//获取单个表单元素
request.getParameterValues()//获取多个表单元素

3.请将上一个实验中该用户注册的信息提交到jsp页面,并在该页面显示相应的注册信息,注意处理中文乱码的情况。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    request.setCharacterEncoding("utf-8");
%>
         <b>用户名:</b>
         <%= request.getParameter("username")%><br>
         <b>密码:</b>
         <%= request.getParameter("password")%><br>
         <b>确认密码:</b>
         <%= request.getParameter("repassword")%><br>
         <b>性别:</b>
         <%= request.getParameter("gender")%><br>
         <b>爱好:</b>
         <%
             String []h=request.getParameterValues("hobby");
         for(String i : h)
         out.print(i+"  ");
         %>
         <br>
          <b>你来自:</b>
         <%--  <%= request.getParameter("provinceName")%><%= request.getParameter("city")%>--%>
              <%
                  out.print(request.getParameter("provinceName")+request.getParameter("city"));
              %>
            <br>
          <b>邮箱:</b>
          <%= request.getParameter("email")%><br>
</body>
</html>

这是简单的获取上一个用户注册的表单信息,要注意的地方, request.getParameter()里面的参数是表单里的name属性,所以前端页面没写的要补充。然后,表单注册还有个省市级联,在获取省份的时候,我们传进属性,会发现得到的是value值,前端页面是用了编号编排的,那要获取到省份名称怎么处理好,经过多次验证,其实本题有很多种方法做这道题,可以在前端页面的js设置,也可以在后台jsp页面中直接修改。在js中,我们要对元素做操控会有新的变量,要在前端页面再加多一句<input type="hidden" name="" id="">,使得提交表单时,jsp页面能读取到js获取的元素。

 <input type="hidden" name="provinceName" id="provinceNameInput">

然后就是js的dom获取了,可以用js的字典创建省份对象,也可以通过函数用switch把value转换成名称,也可以直接option属性进行文本操控。

// var provincemap = {
//     "province1": "北京市",
//     "province2": "广东省",
//     "province3": "上海市",
//     //添加更多省份及其对应城市n
// };//js字典对应


// function getProvinceName(province) {
//     switch (province) {
//         case "province1":
//             return "北京市";
//         case "province2":
//             return "广东省";
//         case "province3":
//             return "上海市";
//         // 添加其他省份的 case
//         default:
//             return "";
//     }
// }//函数调用switch
 var province= document.getElementById("province");
    var selectedProvince=province.value;
    var citySelect = document.getElementById("city");

    // var provinceName = provincemap[selectedProvince];//字典存值
    // var provinceName = getProvinceName(selectedProvince);//用switch转换值
    var provinceName = province.options[province.selectedIndex].text;

     console.log("Selected province: " + provinceName);//在这里可以用控制台打印看看有没有出错

    document.getElementById("provinceNameInput").value = provinceName;
  

这是对js页面的改动。当然,在jsp页面中改值可能会更好,可以在服务器端处理数据,将数据动态生成到页面上,确保数据的准确性和安全性。在jsp页面就是Java了,简单的就是switch,还可以编写一个方法用if与equals等进行改写,还可以用常见的映射结构hashmap。因此,简单的一个获取表单题帮你复习到很多重点了。

实验心得 

当你单着做表单还想着接单。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值