容器拿到JSP,会把它转换为一个servlet类源文件(.java),然后再把这个源文件编译为java servlet类。也就是说,JSP本质上就是一个servlet。
JSP转换后的servlet代码放在<tomcat home>\work\Catalina\<server name>\<web app name>\org\apache\jsp下。
注意:如果是第一次访问.JSP文件,速度会很慢,因为要被服务器翻译成对于的Java(Servlet)文件,然后再被编译成.class文件并加载到内存中。但是如果是以后访问速度就会变快了,因为是直接调用内存中JSP实例。
例子:用JSP编写一个计算器
主要知识点有:
1、如何接受JSP页面提交的数据并处理
2、JSP中如何使用Java片段
3、JSP中如何使用JavaScript完成对数据合法性的校验。
代码如下:
<!--这是计算器的界面-->
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
<h1>我的计算器</h1>
<!--在JSP中添加js代码,防止用户空提交-->
<script language="javascript">
<!--
//写一个函数验证用户是不是空提交
function checkNum(){
//判断num1是不是为空
if((form1.num1.value=="")||(form1.num2.value=="")){
window.alert("输入不能为空");
return false;
}
//判断num1是不是一个数
if((Math.round(form1.num1.value)!=form1.num1.value)||(Math.round(form1.num2.value)!=form1.num2.value)){
window.alert("输入的不是一个数字");
return false;
}
}
-->
</script>
</head>
<body>
<!--这是计算的结果-->
<%
//接收第一个数
String s_num1 = request.getParameter("num1");
//接收第二个数
String s_num2 = request.getParameter("num2");
//接收符号
String flag = request.getParameter("flag");
int num1 = 0;
int num2 = 0;
int result = 0;
if((s_num1!=null) && (s_num2!=null) && (flag!=null)){
num2 = Integer.parseInt(s_num2);
num1 = Integer.parseInt(s_num1);
//计算
if(flag.equals("+")){
result = num1 + num2;
}else if(flag.equals("-")){
result = num1 - num2;
}else if(flag.equals("*")){
result = num1 * num2;
}else if(flag.equals("/")){
result = num1 / num2;
}
}
%>
<hr>
<form name="form1" action="myCal.jsp" >
请输入第一个数:<input type="text" name="num1" value=<%=num1 %>><br/>
<select name="flag">
<option value=+>+</option>
<option value=->-</option>
<option value=*>*</option>
<option value=/>/</option>
</select><br/>
请输入第二个数:<input type="text" name="num2" value=<%=num2 %>><br/>
<input type="submit" value="计算" οnclick="return checkNum();">
</form>
<hr>
计算结果:<%=result %>
</body>
</html>