下列示例首先在inputCustomer.jsp中输入客户信息,然后将控制转到CustomerServlet,最后将请求转发到displayCustomer.jsp页面。
程序1 inputCustomer.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head> <title>输入客户信息</title></head>
<body>
<h4>输入客户信息</h4>
<form action = "CustomerServlet" method = "post">
<table>
<tr><td>客户名:</td> <td><input type="text" name="custName" ></td></tr>
<tr><td>邮件地址:</td><td><input type="text" name="email"></td></tr>
<tr><td>电话:</td><td><input type="text" name="phone" ></td></tr>
<tr><td><input type="submit" value="确定" ></td>
<td><input type="reset" value="重置" ></td>
</tr>
</table>
</form>
</body>
</html>
下面程序给出了如何在Servlet代码创建JavaBeans类的实例,以及如何使用作用域对象共享他们。可以直接在Servlet中使用JavaBeans。并且可以在JSP页面中和JavaBeans中共享bean实例。
程序2 Customer.java
package com.demo;
public class Customer{
// 属性声明
private String name;
private String email;
private String phone;
// 构造方法的定义
public Customer(){}
public Customer(String name, String email, String phone){
this.name = name;
this.email = email;
this.phone = phone;
}
// getter方法
public String getName(){ return this.name; }
public String getEmail(){ return this.email; }
public String getPhone(){ return this.phone; }
// setter方法
public void setName(String name){ this.name = name; }
public void setEmail(String email){ this.email = email; }
public void setPhone(String phone){ this.phone = phone; }
}
这里特别提醒,我遇到的坑就是Customer的构造方法必须写,必须public,空白的,不然会出现:
即The value for the useBean class attribute [com.demo.Customer] is invalid.
解决方法是:
//构造方法的定义
public Customer(){}
程序3 CustomerServlet.java
package com.demo;
import com.demo.Customer;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
@WebServlet("/CustomerServlet")
public class CustomerServlet extends javax.servlet.http.HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws java.io.IOException,ServletException {
String name = request.getParameter("name");
String email = request.getParameter("email");
String phone = request.getParameter("phone");
Customer customer = new Customer(name,email,phone);
HttpSession session = request.getSession();
synchronized(session) {
session.setAttribute("customer", customer);
}
RequestDispatcher rd =
request.getRequestDispatcher("/displayCustomer.jsp");
rd.forward(request,response);
}
}
这个例子说明在Servlet中可以把JavaBeans实例存储到作用域对象中。这里需要注意是会话作用域对象的访问使用了同步(synchronized)代码块,这是因为HttpSession对象不是线程安全
下面的页面在会话作用域内查找Customer的一个实例并用表格的形式打印出他的属性值。
程序4 displayCustomer.jsp
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="customer" class="com.demo.Customer" scope="session" >
</jsp:useBean>
<html><head> <title>显示客户信息</title></head>
<body>
<h4>客户信息如下</h4>
<table border="1">
<tr>
<td>客户名:</td>
<td>${customer.name }</td>
</tr>
<tr>
<td>Email地址:</td>
<td><jsp:getProperty name="customer" property="email"/></td>
</tr>
<tr>
<td>电话:</td>
<td><jsp:getProperty name="customer" property="phone"/></td>
</tr>
</table>
</body></html>
最后实现效果
如果要显示客户名,displayCustomer.jsp的代码还可以更改为
<td><jsp:getPrpperyt name ="customer" property =""name/></td>