JavaBeans应用(小白遇到的坑,Javaweb遇到invalid情况)

在这里插入图片描述
下列示例首先在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>
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值