在 struts 1.3 中如何从数据库中检索数据并使用 DAO 显示它

Posted

技术标签:

【中文标题】在 struts 1.3 中如何从数据库中检索数据并使用 DAO 显示它【英文标题】:In struts 1.3 how to retrieve data from database and display it using DAO 【发布时间】:2013-01-20 21:42:09 【问题描述】:

*M 刚接触 struts。我正在制作简单的登录页面,通过从数据库中检索来显示用户名和密码。我正在使用 DAO。 我有 LoginDAO.java、LoginAction.java 和 Displaydata.jsp 页面。 *

LoginDAO.java

 public boolean login(String user,String pass) throws SQLException
     
         Connection con = getConnection();

         Statement st;
        try 
            st = con.createStatement();



                  st.executeQuery("select * from login where Username='" + user + "' and Password='" + pass + "'");


                return true;
             catch (SQLException e1) 
                // TODO Auto-generated catch block
                e1.printStackTrace();
            

         return false;

      

LoginAction.java

public class LoginAction extends Action



    public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception 



    DynaValidatorForm rf= (DynaValidatorForm) form;

 String username = rf.get("username").toString();
 String password = rf.get("password").toString();
 HttpSession session=request.getSession();
 session.setAttribute("user", username);

 Login dao= new Login();

 if(dao.login(username,password))
 
      System.out.println("GOT");
        return mapping.findForward("success");
    else
        System.out.println("NOT");
    return mapping.findForward("failure");
        


还有我在 Dislpaydata.jsp 中写什么来显示用户名和密码,不需要任何 java 代码。 谢谢你

【问题讨论】:

格式化代码将是避免阅读本文时可能出现的错误的巨大优势。 【参考方案1】:

没错。前段时间我用 Struts 1.x 和 mysql 构建了一个应用程序。

登录操作

public ActionForward login( ... ) throws Exception 
    String forward;
    final String mail = PropertyUtils.getProperty(form, "mail");
    final String password = PropertyUtils.getProperty(form, "password");
    if (LoginService.getInstance().validate(mail, password)) 
        // Do something e.g. put name of user in session
        forward = SUCCESS;
     else 
        forward = ERROR;
    
    return mapping.findForward(forward);

登录服务

public boolean validate(final String mail, final String password) 
                                                        throws ServiceException 
    try 
        final boolean valid;

        // Validate null and empty

        // Validate with DB
        final UserDAO dao = new UserDAO();
        final User user = dao.findByPk(mail);
        if (user == null) 
            valid = false;
         else 
            if (password.equals(user.getPassword())) 
                valid = true;
             else 
                valid = false;
            
        
        return valid;
     catch (DAOException e) 
        throw new ServiceException("Error validating user and password.", e);
    

用户DAO

private static final String FIND_BY_PK_SQL 
                 = "SELECT mail, name, password, admin FROM user WHERE mail = ?";

public User findByPk(final String mail) throws DAOException 
    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    try 
        conn = getConnection();
        ps = conn.prepareStatement(FIND_BY_PK_SQL);
        ps.setString(1, mail); // PK, NOT NULL
        rs = ps.executeQuery();
        if (rs.next()) 
            return fill(rs);
        
        return null;
     catch (final SQLException e) 
        throw new DAOException(e);
     finally 
        // Close DB resources
    


private User fill(final ResultSet rs) throws SQLException 
    final User user = new User();
    user.setMail(rs.getString("mail"));
    user.setName(rs.getString("name"));
    user.setPassword(rs.getString("password"));
    user.setAdmin(rs.getBoolean("admin"));
    return user;

在我的例子中,我有一个表 user,其中 mail 作为主键。有多种形式。

更多示例:

Building a Login Application Struts Login Application Using Action Form Tutorial | DZone Creating a Email Login Web Application with Struts

例如从数据库中显示会话范围内变量用户的名称:

登录操作

if (LoginService.getInstance().validate(mail, password)) 
    final HttpSession session = request.getSession();
    final User user = UserService.getInstance().getUser(mail);
    session.setAttribute("user", user);
    forward = SUCCESS;

home.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>

Welcome,
<bean:write scope="session" name="user" property="name" filter="false" />

【讨论】:

你能告诉我登录后如何使用会话显示数据吗? M 无法理解如何使用 req.getAttribute("")。 您可以使用tag libraries 来避免在您的jsp 中使用Java。我的应用使用了struts标签库,以后可能会切换到JSTL。 Thanxs @paulvargas 但我已经这样做了,我在登录时创建了会话,它在登录页面后显示。但是现在我将如何使用会话在 jsp 中显示他的所有信息。无法在另一个名为 RetrieveInfo.java 的类中使用已创建的会话来使用另一个名为 DisplayAction 的动作类来显示此数据. 我不确定你想做什么。这取决于struts-config.xml 中定义的应用程序的流程。检索用户数据,将它们放在某个范围内(requestsession),并将其显示在适当的 JSP 中。 嘿,谢谢你的帮助,我终于可以找回我的信息了 :)【参考方案2】:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<title>Login Page</title>
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript"
	src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/jquery.validate.min.js"></script>
</head>
<body bgcolor="#2EFEF7">
	<form action="action" method="post" id="formDemo" name="MyForm">

		<div id="header">
			<h2 style="color: red;">Training</h2>
		</div>
		<hr>
		<h3>Login</h3>
		<div id="center" style="padding-top: 50px; padding-bottom: 220px;">
			<table align="center">

				<tr>
					<th colspan="2"><h1 style="color: BLUE;">LOGIN</h1></th>
				</tr>

				<tr>
					<th colspan="2"><h5 id="error" style="color: red;"></h5></th>
				</tr>

				<tr>
					<td>UserID:</td>
					<td><input type="text" size="40" name="UserId" maxlength="8"></td>
				</tr>

				<tr>
					<td>Password:</td>
					<td><input type="text" size="40" name="Password" maxlength="8"></td>
				</tr>

				<tr>
					<td colspan="2" align="center"><input type="submit"
						value="Login"> <input type="button" id="reset"
						value="Clear"></td>
				</tr>

			</table>
		</div>
		<hr>

		<div id="footer">
			<label>Copy right@ 2000-2008 FUJINET, All Rights Reserved.</label>

		</div>
	</form>

	<script type="text/javascript">
	<!--
		// Form validation code will come here.

		function validate() 

			if (document.MyForm.UserId.value === ""
					|| document.MyForm.UserId.value === null) 
				document.getElementById("error").innerHTML = "Please insert userId";

				return false;
			

			if (document.MyForm.Password.value === ""
					|| document.MyForm.Password.value === null) 
				document.getElementById("error").innerHTML = "Please insert password";

				return false;

			
			return (true);
		
		$("#reset").click(function(event) 
			document.MyForm.UserId.value = "";
			document.MyForm.Password.value = "";
			document.getElementById("error").innerHTML = "";
		);
		$("#formDemo").submit(function(event)
			return validate();
		);
	</script>
</body>
</html>

【讨论】:

欢迎来到 ***!请不要只是发布代码作为答案,请解释您的代码的作用以及它如何回答问题。

以上是关于在 struts 1.3 中如何从数据库中检索数据并使用 DAO 显示它的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Struts 2 中将数据库记录列表(通过 Hibernate 检索)显示到 JSP 页面?

通过 JSON 将数据从 handsontable 检索到 Struts2 Action 不起作用

如何在 Spark 1.3 中通过 Hive 指示 SparkSQL 中的数据库

在 pandas 数据框中检索 NaN 值的索引

Struts 2 动态变量

如何使用 Struts 编程从数据库打印数据并在 ftl 页面上显示