当前位置 : 主页 > 编程语言 > java >

jsp(6): 利用javaBean,在 jsp 中直接嵌入使用java文件

来源:互联网 收集:自由互联 发布时间:2021-06-25
一般我们都不希望jsp代码中包含太多复杂且功能混合的java代码,这时候javabean类就派上用场了————可以在jsp中引入已经写好的java文件。 首先在java resourse里的src目录下创建一个包,

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

网友评论