What do you need for this tutorial?
- Java
- Tomcat
- Java IDE (For example Eclipse or NetBeans)
- Struts 1.x version http://struts.apache.org/download.cgi#struts1310
I’ll write another document for Struts 2.x. They are different frameworks with somehow different ideas but both are excellent choice.
For clearness it would be very simple code - I won’t use packages or other good practices. Consider this only as an introduction not a reference.
Struts programming is centered at the MVC pattern. MVC stands for Model-View-Controller, an idea to separate the business logic, application data and the presentation layer. I won’t discuss here what the advantages of using MVC architecture in web application are – just make a fast search, there is plenty of information out there.
Let’s start with creating a new project. Our web application would ask visitors for a name and redirect them to a Hi! page. At part 2 it won’t like some of the visitors and will return back them with an error message.
Here is my directory and file structure for Struts1Example project:
Struts1Example src NameAction.java NameActionForm.java webroot WEB-INF classes lib struts-config.xml web.xml ask.jsp greet.jsp
Lets start with writing our ActionForm – I’ll name the class NameActionForm. It would be very plain – only one field and a setter-getter pair. Here is the code:
NameActionForm.java
import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class NameActionForm extends ActionForm { private String name = null; public void reset(ActionMapping mapping, HttpServletRequest request) { this.name = null; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
And our action:
NameAction.java
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class NameAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { return mapping.findForward("success"); } }
In Struts the Action class goal is to process a request, do the logic and pass a forward object (ActionForward). Our Action is very simple – it is doing nothing, just passes our forward object. The “success” forward is defined in our struts-config.xml.
We will have two jsp files – ask.jsp and greet.jsp. In ask.jsp we will ask visitors for a name.
ask.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <html:html> <head> <title>Say Hi!</title> </head> <body> <html:form action="nameAction"> What's your name? <html:text property="name"></html:text> <html:submit>Send!</html:submit> </html:form> </body> </html:html>
greet.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" %> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <html:html> <head> <title>Say Hi!</title> </head> <body> Hi, <bean:write name="nameForm" property="name" /> </body> </html:html>
And now the cool part – web.xml
web.xml
<?xml version="1.0"?> <web-app> <display-name>Struts 1x Example</display-name> <servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value> /WEB-INF/struts-config.xml </param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
And our struts configuration – struts-config.xml
struts-config.xml
<?xml version="1.0" ?> <struts-config> <form-beans> <form-bean name="nameForm" type="NameActionForm"/> </form-beans> <global-forwards> <forward name="/nameAction" path="/nameAction.do"/> </global-forwards> <action-mappings> <action path="/nameAction" type="NameAction" input="ask.jsp" name="nameForm" > <forward name="success" path="/greet.jsp"/> <forward name="failure" path="/ask.jsp"/> </action> </action-mappings> </struts-config>
struts-config.xml is used to initialize Struts. It describes the action mappings for the project and must be placed in the WEB-INF directory. We have a form-bean tag describing our NameActionForm and an action-mapping for our NameAction.
This is our base code. In some future post I’ll add field validation, error handling and some other good stuff.
3 comments:
Java/JSP-based framework for building Web-based applications. While later articles will get deep into the technology behind Struts, this first article provides an introduction to Struts and evaluates the case for using it.
Really nice blog for beginners.
I think the web.xml is wrong. Doesn't the welcome file have to be ask.jsp? Cause there is no index.jsp.
Also, how would you have the Classes in an own package, not in the default package?
Struts 1x Example
action
org.apache.struts.action.ActionServlet
config
/WEB-INF/struts-config.xml
2
action
*.do
ask.jsp
Post a Comment