不卖关子,本次实验进行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。因此,简单的一个获取表单题帮你复习到很多重点了。
实验心得
当你单着做表单还想着接单。