【问题标题】:How to use model in MVC flow如何在 MVC 流程中使用模型
【发布时间】:2012-05-31 05:49:47
【问题描述】:

我有一个提供登录屏幕的 jsp 文件,在提交表单后,控件必须转到一个 servlet。现在,我如何将表单中的值保存到模型(Bean 类)并让它们在控制器中使用。? 我没有使用任何框架,如 struts、spring 等。

我使用了以下代码,但得到了错误

java.lang.NoClassDefFoundError: bean/LoginBean

我的代码是:

index.jsp:

     <form name="signin" method="post" action="LoginServlet">
                 <table>
                     <tr><td><font>USERNAME</font></td><td><input type="text" name="signin_uname" /></td></tr>
                     <tr><td><font>PASSWORD</font></td><td><input type="password" name="signin_pwd" /></td></tr>
                     <tr><td><input type="reset" value="RESET" /></td><td><input type="submit" value="LOGIN" /></td></tr>
                 </table>
            </form>

LoginServlet.java

   @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
  processRequest(request, response);
    HttpSession session=request.getSession();
    System.out.println(session);
    try {
        LoginBean login=new LoginBean();
        login.setSignin_pwd("raviteja");
        login.setSignin_uname("raviteja");
        System.out.println(login.getSignin_uname());
        System.out.println(login.getSignin_pwd());
    } finally {

    }
    response.sendRedirect("");
}

LoginBean.java

public class LoginBean implements Serializable {
String signin_uname,signin_pwd;
public LoginBean() {

}

public String getSignin_pwd() {
    return signin_pwd;
}

public void setSignin_pwd(String signin_pwd) {
    this.signin_pwd = signin_pwd;
}

public String getSignin_uname() {
    return signin_uname;
}

public void setSignin_uname(String signin_uname) {
    this.signin_uname = signin_uname;
}

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
  <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>servlets.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

【问题讨论】:

  • 我建议您查看此链接,因为它解释了您的问题的可能解决方案。 3 ways to resolve NoClassDefFoundError in Java
  • LoginBean 的包层次结构是什么?
  • 你编译你的代码了吗?如果是,那么类文件是否在您期望的位置?您的输出文件夹是类路径的一部分吗?
  • 检查控制器中的导入语句,即控制器导入 bean.LoginBean 或导入其他一些包 bean。

标签: java model-view-controller jsp servlets


【解决方案1】:

1 将 Spring 库添加到您的项目中,并在 web.xml 中映射 DispatherServlet 以处理 /LoginServlet

2 创建 bean(表单和 bean 字段名称相同):

public class LoginData {
    private String signin_uname;
    private String signin_pwd;

    // Getters and setters
}

3 创建控制器:

@Controller
public class LoginController {

    @RequestMapping(value = "/LoginServlet", method = RequestMethod.POST)
    public String postLoginData(@ModelAttribute LoginData loginData) {

        // All data from form will be at your model attribute bean. It will also will 
        // be putted at request
        String userName = logigData.getSignin_uname();

        return "loginResult.jsp";
    }
}

【讨论】:

  • 这是错误的请求。为什么他们要你?这是众所周知的良好做法。我建议放弃这个项目并进入允许框架的更好的项目:)
【解决方案2】:

您的代码应该可以正常运行。你的类路径有问题。 JVM 在运行时找不到类 LoginBean

顺便问一下,你想向控制台输出什么?如果您想打印输入的数据用户,请使用以下内容更正您的代码:

LoginBean login = new LoginBean(); 
String username = request.getParameter("signin_uname");
String password = request.getParameter("signin_pwd");
login.setSignin_uname(username);
login.setSignin_pwd(password); 

但如果您正确地使用您的代码创建了一个项目,则不应该出现错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    相关资源
    最近更新 更多