Struts – Database Access with struts-config.xml
Posted by leejeok on May 26, 2008
A sample program which connecting to the MySQL database to display the data. I am using the Struts framework to developed this program. The main idea is of this post is to use the struts-config.xml to define the datasource and using Action class to access and select the data.
Please bear in mind, the Action class which represent as controller layer, should not contain any business logic code and database access code. The best pratice is to apply the DAO mechanism by putting your business logic or database access code within the model layer.
The datasource should only define within the struts-config.xml when there is a limitation of connectivity to the database within the model layer. Alternative, you can use the JNDI to define the datasource and that would be the best recommendation in best pratice. However, that will be my next post on my blog.
Sample of the datasource used within the struts-config.xml:
<data-sources>
<data-source type=”org.apache.commons.dbcp.BasicDataSource” key=”dbSource”>
<set-property property=”driverClassName” value=”com.mysql.jdbc.Driver” />
<set-property property=”url” value=”jdbc:mysql://localhost:3306/bookstore” />
<set-property property=”username” value=”someuser” />
<set-property property=”password” value=”somepassword” />
</data-source>
</data-sources>
Here are the summary of development been used.
- Struts 1.2.9 framework
- index.jsp, selectBook.jsp, SelectBookActionForm.java – view layer
- SelectBookAction.java – controller layer
- Book.java – data layer
- Defining datasouce at struts-config.xml
- MySQL database
Source Code: Click Here
Simple JNDI Accessing MySQL Datasource « leejeok said
[…] Struts – Database Access with struts-config.xml […]
nissan struts said
I’m having trouble with my database test app. As a background, I’m writing
my Action and ActionForm classes in Visual Age for Java, then exporting my
classes to the WEB-INF\classes directory of my application. Within the lib
directory I include struts.jar and the jdbc thin drivers in .zip format (if
these are not needed here please tell me).
I have tried to run this two ways. The first was using the datasource tag in
the struts-config.xml file. I included it right after my action-mappings and
form-beans tag, all of which are included inside the struts-config tags.
When I start my Tomcat server, I receive an error in the console that says
basically that there are illegal characters after my action-mapping tag ends
(I.e. the datasource tag). The console will also give me a class not found
exception at java.sql.Datasource. After I point my browser at the war file I
get an error stating that it can’t find the ActionMappings or
ActionFormBeans collection.
The second way I tried to run this was by simply establishing a connection
to the database manually in my Action class and using
Class.forName(jdbcUrl). However, this time, when I try run the app it will
crap out when I try to do the actual query and give me a class not found
exception at Class.forName(jdbcUrl) at the Tomcat console. The browser gives
me a null pointer exception. I think I have all the required imports within
my classes.
Using the datasource tag looks like it should be very straight forward but
I’m having no joy. For anyone who has read this far, I apologize for the
length of the message. I have included my code from the struts-config.xml
file and my Action class perform() method.
moeen said
I tried this, but 404 error was generating. I found http://java.sun.com/docs/books/tutorial/jdbc/basics/connecting.html which says it do not support datasource in strut.xml.
I put simple connection and driver string in my action class, and it seems working.
What’s the best. I m using Netbeans, Mysql.
One more thing, How to pass the result set of many records to the view level.
leejeok said
Within the struts-config.xml, have you change the datasource name for the username and password?
You had code the ResultSet within the Action class (“controller”). The best database practice is to open and close the ResultSet and database connection. After you pass the ResultSet from controller or model to view, you will get an error saying ResultSet been closed (if you tried to accessing it).
For your case, perhaps you can execute the ResultSet and put the return values into list (eg: ArrayList, Map) of instances which is bean (model). In Action, put the list into scope (eg: session) and use the JSP to access the scope.
By the way, you shouldn’t code the ResultSet within the controller. This would violate the MVC rules. Consider to put ResultSet within the model. Hope it help.
wilson said
if there will be a problem, like you can’t run it. You may try to add the libraries:
commons-dbcp-1.2.2.jar
commons-pool-1.3.jar
jdbcFramework_1_5.jar