我们用一个UserInfoBean类别来存储一个使用者的信息,并且在Servlet和jsp之间传送这个容器,以达到沟通和属性共享的目的,为了示范方便这个类别只提供一个属性:useName,代码如下:
//类名:userTnfoBean.java
//编译: javac –d..\classes UserInfoBean.java
Package cn.ts;
public class UserInfoBean{
private String userNanme;
public void setUsernName(String userName){
this.userName=username;
}
public String getUserName(){
return this.userName;
}
}
撰写Servlet:
文件名:helloServlet2.java
package cn.ts;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import cn.ts.UserInfoBean;
publicclass HelloServlet2 extends HttpServlet {
publicvoid service(HttpServletRequest request, HttpServletResponseresponse)throws ServletException,IOException{
// 下面两行让中文文字能正确显示;
response .setContentType("text/html charset=big5");
request.setCharacterEncoding("big5");
// 建立UserInfo容器,并指定一个session的attribute与之对应;
UserInfoBeanuserInfo=new UserInfoBean();
usrInfo.setUserName("好好");
HttpSession session=request.getSession();
session.setAttribute("userInfo",userInfo);
// 前往指定的网页
Requestdispatch rd;
rd=getServletContext().getRequestDispatcher("/helloFromServlet2.jsp");
rd.forward(request,response);
}
}
Session.setAttribute()会将UserInfoBean的容器的属性存入session里面。
撰写jsp
<%@ page contentType="text/html;charset=big5" %>
<jsp:useBean id="userInfo" class="com.huanlin.UserInfoBean" scope="session"/>
<html>
<body>
<p>从 servlet 传入 UserInfoBean.userName 是:
<b>
<jsp:getProperty name="userInfo" property="userName"/>
</b>
</body>
</html>
有个地方要特别注意。如果在Servlet储存属性时用的是session.setAttribute()方法,也就是将参数存入session中那么在jsp中<jsp:useBean>标签的scope就必须指定为session,否则会发生取不到参数的情况。