一般我们都不希望jsp代码中包含太多复杂且功能混合的java代码,这时候javabean类就派上用场了————可以在jsp中引入已经写好的java文件。
首先在java resourse里的src目录下创建一个包,例如我创建了一个jspDemo包,里面新建了一个学生Student类:
package jspDemo;
//外部类定义的时候一定要定义包,否则找不到
public class Student {
public int age=18;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Student.jsp关键代码如下,注意page指令中我们添加了“import=jspDemo.Student”:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import='jspDemo.Student'%>
...
<body>
<%
Student s=new Student();
s.setAge(99);
out.print("s的年龄:"+s.getAge()+"<br>");
out.print("----");
%>
</body>
...
结果输出18。
注意,如果想要jsp页面中的java输出换行,不论是用常规的“\n”还是out.println都实现不了,要用<br>。
如果有jsp中关于bean的语法详解的,应该知道Student.jsp还可以通过jsp指令这么写:
....
<body>
<jsp:useBean id="s" class="jspDemo.Student"></jsp:useBean>
<jsp:setProperty name="s" property="age" value="99"/>
s的年龄:<jsp:getProperty name ="s" property="age"/>
</body>
...
效果是一样的。如果这么写,则page文件中可以不用import。
特别注意,setProperty不是相当于直接初始化参数age,通过查看Student.jsp编译好Student_jsp.java文件我们可以看出!setProperty其实是调用了setAge(99)方法的!。getProperty也同理,java文件中要有相对应的get方法。
经实验发现,jsp的参数为“age”,Java中有“getAge()”时候,程序可运行。jsp:"age",java:"getage()",可运行。
jsp:"Age" ,java:"getAge"(报错)、 jsp:"Age",java:"getage()"报错。
一般情况下,我们希望直接是在浏览器页面中直接设置数值,而不是在服务器设置好参数值。
所以我们可以通过form表单获取数值,例如下例的通过输入上底、下底、高,求梯形面积:
Tixing.java代码如下:
package jspDemo;
public class Tixing {
private double a,b,h; //上底,下底,高
public double getA() {
return a;
}
public void setA(double a) {
this.a = a;
}
public double getB() {
return b;
}
public void setB(double b) {
this.b = b;
}
public double getH() {
return h;
}
public void setH(double h) {
this.h = h;
}
public double getArea(){
return ((a+b)*h)/2;
}
}
jsp如下:
....
<body>
<form action="" method="get" >
梯形上底:<input type="text" name="a"><br>
梯形下底:<input type="text" name="b"><br>
梯形的高:<input type="text" name="h"><br>
<input type=submit value="确定">
</form>
<jsp:useBean id="t" class="jspDemo.Tixing"></jsp:useBean>
<jsp:setProperty name="t" property="*" />
梯形的上底:<jsp:getProperty name ="t" property="a"/>
梯形的下底:<jsp:getProperty name ="t" property="b"/>
梯形的高:<jsp:getProperty name ="t" property="h"/>
梯形的面积:<jsp:getProperty property="area" name="t"/>
</body>
...
其中setproperty中的property=“*”:储存用户在Jsp输入的所有值,用于匹配Bean(java文件)中的属性。在Bean中的属性的名字必须和request对象(即form表单)中的参数名一致.
注意:setproperty的value和param属性不能同时使用,但可以使用其中任意一个。(明天4.26再更,回去睡觉了....)
value是自定义属性的值,param是将请求参数(比如前端表单数据) 作为值 注入到该property中。
另外,param的值应该对应前端 请求参数的name属性名,表明哪个请求参数将注入到该property中。