2012-01-19 96 views
3

我有一個帶有兩個文本文件的用戶名和密碼的表單的jsp頁面(index.jsp)。在servlets中使用bean

<form action="MyClass"> 
     <input type="text" name="username" id="username" /> 
     <input type="password" name="password" id="password" /> 
     <input type="submit" /> 
    </form> 

在表單子控件上我調用了一個servlet。我知道,我們可以通過請求方法獲取輸入的用戶名和密碼值,

request.getParameter("username"); 
    request.getParameter("password"); 

但我不想使用它們,相反,我想存儲在一個名爲BeanClass豆這些值,我想從sevlet中的bean中檢索值。我怎麼才能得到它??

回答

2

你必須使用<jsp:useBean/>行動requestsession範圍來實例化BeanClassJSP

樣本 - EmpServlet.java

package com.me; 

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class EmpServlet extends HttpServlet { 
    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     PrintWriter pw=response.getWriter(); 
     Emp emp=(Emp)request.getAttribute("emp"); 
     pw.print(emp); 
    } 
} 

Emp.java:的Emp豆

package com.me; 
public class Emp { 
    private int age; 
    private String name; 
    public Emp() { 
     name=""; 
    } 
    public int getAge() { 
     return age; 
    } 
    public void setAge(int age) { 
     this.age = age; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public boolean valid() 
    { 
     return age!=0 && name.length()!=0; 
    } 
    @Override 
    public String toString() { 
     return "Emp{" + "age=" + age + ", name=" + name + '}'; 
    } 
} 

emp.jsp(視圖)

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<jsp:useBean id="emp" class="com.me.Emp" scope="request"> 
    <jsp:setProperty name="emp" property="*"/> 
</jsp:useBean> 

<c:if test="${emp.valid()}"> 
    <jsp:forward page="emp"/> 
</c:if> 
<form method="post" action="emp.jsp"> 
    <br/><input type="text" name="age"/> 
    <br/><input type="text" name="name"/> 
    <br/><input type="submit"/> 
</form> 

的web.xml

<servlet> 
    <servlet-name>EmpServlet</servlet-name> 
    <servlet-class>com.me.EmpServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>EmpServlet</servlet-name> 
    <url-pattern>/emp</url-pattern> 
</servlet-mapping> 
+0

我可以在index.jsp中使用這個語句嗎?如果是這樣的話,在jsp頁面中放置這個語句..我也嘗試從servlet中使用getter方法獲取val,但是iam獲得了空值 – user636207

1

至此,您正在尋找一個像JSFSpring MVC這樣的MVC框架。在JSF中它會是這個樣子:

<h:form> 
    <h:inputText value="#{bean.username}" required="true" /> 
    <h:inputSecret value="#{bean.password}" required="true" /> 
    <h:commandButton value="submit" action="#{bean.submit}" /> 
    <h:messages /> 
</h:form> 

@ManagedBean 
@RequestScoped 
public class Bean { 

    private String username; 
    private String password; 

    public void submit() { 
     // Do here your job. 
    } 

    // Add/generate getters and setters. 
} 

這就是全部。不需要servlet。

如果你真的想要做到低級別的servlet方式,你需要自己填充bean。使用Apache Commons BeanUtils可以方便地保存樣板代碼。

Bean bean = new Bean(); 
BeanUtils.populate(bean, request.getParameterMap()); 
request.setAttribute("bean", bean); 
// ... 

<jsp:useBean>不允許使用MVC方法,它更像是MV。您必須將轉換/驗證混合到模型中,並控制視圖內的請求/響應,控制器應該執行的任務。 MVC框架爲您提供了一個控制器,可以從您的手中處理所有這些令人討厭的樣板任務。