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工作流程图:
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工具网。
推荐阅读: