struts怎么连接数据库?struts工作流程是什么?

struts是重要的开发框架,使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。那在开发项目的过程中struts怎么连接数据库?下面来我们就来给大家讲解一下。

在struts中连接数据库,并且在action操作数据库,需要在struts.xml中进行配置,具体配置如下:

<data-sources>  
    <data-source type="org.apache.commons.dbcp.BasicDataSource">  
        <set-property property="driverClassName"  
            value="com.mysql.jdbc.Driver" />  
        <set-property property="url"  
            value="jdbc:mysql://localhost:3306/demo" />  
        <set-property property="username" value="root" />  
        <set-property property="password" value="" />  
        <set-property property="maxActive" value="10" />  
        <set-property property="maxWait" value="5000" />  
        <set-property property="defaultAutoCommit" value="false" />  
        <set-property property="defaultReadOnly" value="false" />  
        <set-property property="validationQuery"  
            value="SELECT COUNT(*) FROM user" />  
    </data-source>  
</data-sources>

之后就可以在action中访问数据库了,具体方式如下:

package com.demo.struts.actions;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.actions.DispatchAction;
import com.demo.struts.forms.LoginForm;
import com.demo.struts.util.Constants;
public class LoginAction extends DispatchAction
{
    Logger log = Logger.getLogger(this.getClass());
    @SuppressWarnings("deprecation")
    public ActionForward execute(ActionMapping mapping, ActionForm form
        , HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {
        ActionErrors errors = new ActionErrors();
        ActionForward forward = new ActionForward();
        LoginForm loginForm = (LoginForm) form;
        try
        {
            // get parameters
            String username = loginForm.getUsername();
            // invalidate the original session if exists
            HttpSession session = request.getSession(false);
            if (session != null)
            {
                session.invalidate();
            }
            // create a new session for the user
            session = request.getSession(true);
            // login
            boolean isValid = valid(request, loginForm);
            if (isValid)
            {
                session.setAttribute(Constants.USERNAME_KEY, username);
                log.info("User " + username + " login.");
            }
            else
            {
                errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionMessage(
                    "login.message.failed"));
            }
        }
        catch (Exception e)
        {
            errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionMessage(
                "login.message.failed"));
        }
        // If a message is required, save the specified key(s)
        // into the request for use by thetag.
        if (!errors.isEmpty())
        {
            saveErrors(request, errors);
            request.setAttribute("loginFormBean", loginForm);
            forward = mapping.findForward(Constants.FAILURE_KEY);
        }
        else
        {
            forward = mapping.findForward(Constants.SUCCESS_KEY);
        }
        // Finish with
        return (forward);
    }
    private boolean valid(HttpServletRequest request, LoginForm loginForm)
    {
        DataSource ds = null;
        Connection cn = null;
        boolean b = false;
        try
        {
            ds = getDataSource(request);
            cn = ds.getConnection();
            Statement st = cn.createStatement();
            ResultSet rs = st
                .executeQuery("select * from user where username='" +
                    loginForm.getUsername() + "' and password='" +
                    loginForm.getPassword() + "'");
            if (rs.next())
            {
                b = true;
            }
            rs.close();
            st.close();
            cn.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return b;
    }
}

struts工作流程是什么?

struts工作流程图:

struts怎么连接数据库?struts工作流程是什么?.jpg

ActionServlet是struts中核心的控制器,所有的用户请求都必须通过ActionServlet的处理,而struts-config.xml是struts中核心的配置文件,在这个文件中配置了用户请求URL和控制器Action的映射关系,ActionServlet通过这个配置文件把用户的请求发送到对应的控制器中。

在struts web应用程序中,当web应用程序启动的时候,就会初始化ActionServlet在初始化ActionServlet的时候会加载struts-config.xml配置文件,在加载成功后会把这些URL和控制器映射关系存放在ActionMapping对象或者其他对象中。当ActionServlet接收到用户请求的时候,就会按照下面的流程对用户请求进行处理。

(1)ActionServlet接收到用户的请求后,会根据请求URL寻找匹配的ActionMapping对象,如果匹配失败,说明用户请求的URL路径信息有误,所以返回请求路径无效的信息,当找到匹配的ActionMapping的时候,进入到下一步。

(2)当ActionServlet找到匹配的ActionMapping对象的时候,会根据ActionMapping中的映射信息判断对应的ActionForm对象是否存在,如果不存在对应的ActionForm对象就创建一个新的ActionForm对应,并把用户提交的表单信息保存到这个ActionForm对象中。

(3)在struts-config.xml中这个配置文件,可以配置表单是否需要验证,如果需要验证,就调用ActionForm中的validate()方法对用户输入的表单进行验证。

(4)如果ActionForm的validate()方法返回了ActionErrors对象,则表明验证失败,ActionServlet把这个页面返回到用户输入的界面,提示用户重新输入。如果方法的返回值为null,就表明验证已经通过,可以进入下一步处理。

(5)ActionServlet可以根据ActionMapping对象查找用户请求转发给哪个控制器Action,如果对应的Action对象不存在,就创建这个对象,并调用这个Action的excute()方法。

(6)业务逻辑控制器Action的execute()方法就会返回一个ActionForward对象,ActionServlet把控制器处理的结果转发到ActionForward对象指定的JSP页面。

(7)ActionForward对象指定的JSP页面根据返回的处理结果,用合适形式把服务器处理的结果展示给用户,到这里为止,一个客户请求的整个过程完毕。

struts的工作流程就是以上这些,我们需要了解并且灵活的运用到实践中去,才能真正驾驭好这个框架哦!最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。

推荐阅读:

java为什么打不开?java如何打开?

struts的配置文件是什么?如何配置struts自动提示功能?

java怎么写爬虫?java写爬虫简单示例