一般我们都不希望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中。