Web Development with Apache Struts 2 Fabrizio Giudici Tidalwave sas, CEO NetBeans Dream Team Senior Java Architect, Blogger www.tidalwave.it bluemarine.tidalwave.it weblogs.java.net/blog/fabriziogiudici stoppingdown.net Nov 20, 2008 Web Development with Apache Struts 2 1
Agenda ● Java Web Frameworks ● Struts basics ● Struts 2 ● A small code example ● Q&A Nov 20, 2008 Web Development with Apache Struts 2 2
NetBeans 6.5 is out ● Get it while it's hot! www.netbeans.org – Faster! – Compile-on-save, multithreading Java debugger, visual deadlock indication – PHP support, JavaScript debugger and library manager, better Spring / Hibernate / JSF / JPA support – RESTful web services, SQL editor improvements, JavaFX, Groovy and Grails, Ruby and Rails improvements, GlassFish v3 ● Nov 20, 2008 Web Development with Apache Struts 2 3
Java Web Frameworks ● Question: how many Java web frameworks are available? – 1? – 5? – 10? – Dozens? Nov 20, 2008 Web Development with Apache Struts 2 4
Java Web Frameworks ● Answer: more than 50! – www.manageability.org/blog/stuff/how- many-java-web-frameworks ● Of course, those with a significant spread are not so many ● But choosing is difficult ● NIH, but also radically different approaches Nov 20, 2008 Web Development with Apache Struts 2 5
My (subjective) take ● Wicket – You really want to be agile – You routinely live on the leading edge ● Tapestry – You like agile, but consolidated ● Struts – You are “conservative” and like it easy ● Java Server Faces – You love visual designers – You can survive to high complexity Nov 20, 2008 Web Development with Apache Struts 2 6
JEE ● JEE Web components: – “Foundation”: Servlet, JSP, Filter – “High level”: JSF ● Foundation elements are enough, but you're going to write tons of code – Validation, flow control, etc... Nov 20, 2008 Web Development with Apache Struts 2 7
Struts ● Struts 1 appeared in June 2001 – Apache License – Strictly based on MVC pattern – Supported declarative validation, flow control ● Struts 2 is the “merge” of Struts 1 + WebWork Nov 20, 2008 Web Development with Apache Struts 2 8
MVC Nov 20, 2008 Web Development with Apache Struts 2 9
Struts 2.x benefits ● Actions are POJOs ● Interceptors (from AOP) ● Classes are now independent of HTTP ● Simplified testing ● Annotations, AJAX, Spring, Portlets, etc... Nov 20, 2008 Web Development with Apache Struts 2 10
Workflow Nov 20, 2008 Web Development with Apache Struts 2 11
Components ● web.xml – Installs a Filter on /* ● struts.xml – Maps Action names – Defines the navigation flow ● Actions – Execute a task ● Views (JSP or others) – Render the UI Nov 20, 2008 Web Development with Apache Struts 2 12
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app ... > <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ... </web-app> Nov 20, 2008 Web Development with Apache Struts 2 13
A simple Action import com.opensymphony.xwork2.ActionSupport; public class MyAction extends ActionSupport { private final List<String> NBDTers = Arrays.asList(...); private String userName; private String message; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getMessage() { return message; } @Override public String execute() { message = userName; return NBDTers.contains(userName) ? "nbdt" : SUCCESS; } } Nov 20, 2008 Web Development with Apache Struts 2 14
struts.xml <struts> <package name="/" extends="struts-default"> <action name="MyAction" class="myexample.MyAction"> <result name="input">/index.jsp</result> <result name="success">/good.jsp</result> <result name="nbdt">/nbdt.jsp</result> </action> </package> </struts> Nov 20, 2008 Web Development with Apache Struts 2 15
A simple view JSP <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <html> <body> <h2>Welcome to JUG Lugano</h2> Hello, <s:property value="message" default="Guest" />, welcome to the first meeting of JUG Lugano! <s:form method="GET" action="MyAction.action"> Would you be so kind to tell me your name? <s:textfield name="userName" /> <s:submit value="Submit" /> </s:form> <s:actionerror/> <s:fielderror/> </body> </html> Nov 20, 2008 Web Development with Apache Struts 2 16
Interceptors ● Used to implement “common” behaviours – Validations – Multiple submit filters – Logging ● Pre-defined interceptors Nov 20, 2008 Web Development with Apache Struts 2 17
Formal validation ● Declarative, save tons of code <validators> <field name="userName"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>Your name is required.</message> </field-validator> </field> </validators> Nov 20, 2008 Web Development with Apache Struts 2 18
Interceptors ● Code that is invoked across Actions ● Many pre-defined interceptors – Parameter rename, cookie management, component behaviours (e.g. Checkboxes), background actions – Validation itself is an interceptor Nov 20, 2008 Web Development with Apache Struts 2 19
Custom interceptors public interface Interceptor extends Serializable { public void destroy(); public void init(); public String intercept (ActionInvocation inv) throws Exception; } Nov 20, 2008 Web Development with Apache Struts 2 20
Interceptors in struts.xml <struts> <package name="/" extends="struts-default"> <interceptors> <interceptor name="logger" class="..."/> </interceptors> <action name="MyAction" class="myexample.MyAction"> <interceptor-ref name="logger"/> <result name="success">/good.jsp</result> <result name="nbdt">/nbdt.jsp</result> <result name="input">/index.jsp</result> </action> </package> </struts> Nov 20, 2008 Web Development with Apache Struts 2 21
Conclusion ● Robust, Struts 1 heritage ● Keeps up with the latest standards (POJOs, AOP, annotations, Spring, ...) ● “Conservative” approach, but easy ● Relevant sites: – struts.apache.org – beans.seartipy.com/2008/08/04/struts- 2-plugin-for-netbeans-ide- nbstruts2support/ Nov 20, 2008 Web Development with Apache Struts 2 22

Web Development with Apache Struts 2

  • 1.
    Web Development with Apache Struts 2 Fabrizio Giudici Tidalwave sas, CEO NetBeans Dream Team Senior Java Architect, Blogger www.tidalwave.it bluemarine.tidalwave.it weblogs.java.net/blog/fabriziogiudici stoppingdown.net Nov 20, 2008 Web Development with Apache Struts 2 1
  • 2.
    Agenda ● Java Web Frameworks ● Struts basics ● Struts 2 ● A small code example ● Q&A Nov 20, 2008 Web Development with Apache Struts 2 2
  • 3.
    NetBeans 6.5 isout ● Get it while it's hot! www.netbeans.org – Faster! – Compile-on-save, multithreading Java debugger, visual deadlock indication – PHP support, JavaScript debugger and library manager, better Spring / Hibernate / JSF / JPA support – RESTful web services, SQL editor improvements, JavaFX, Groovy and Grails, Ruby and Rails improvements, GlassFish v3 ● Nov 20, 2008 Web Development with Apache Struts 2 3
  • 4.
    Java Web Frameworks ● Question: how many Java web frameworks are available? – 1? – 5? – 10? – Dozens? Nov 20, 2008 Web Development with Apache Struts 2 4
  • 5.
    Java Web Frameworks ● Answer: more than 50! – www.manageability.org/blog/stuff/how- many-java-web-frameworks ● Of course, those with a significant spread are not so many ● But choosing is difficult ● NIH, but also radically different approaches Nov 20, 2008 Web Development with Apache Struts 2 5
  • 6.
    My (subjective) take ● Wicket – You really want to be agile – You routinely live on the leading edge ● Tapestry – You like agile, but consolidated ● Struts – You are “conservative” and like it easy ● Java Server Faces – You love visual designers – You can survive to high complexity Nov 20, 2008 Web Development with Apache Struts 2 6
  • 7.
    JEE ● JEE Web components: – “Foundation”: Servlet, JSP, Filter – “High level”: JSF ● Foundation elements are enough, but you're going to write tons of code – Validation, flow control, etc... Nov 20, 2008 Web Development with Apache Struts 2 7
  • 8.
    Struts ● Struts 1 appeared in June 2001 – Apache License – Strictly based on MVC pattern – Supported declarative validation, flow control ● Struts 2 is the “merge” of Struts 1 + WebWork Nov 20, 2008 Web Development with Apache Struts 2 8
  • 9.
    MVC Nov 20, 2008 Web Development with Apache Struts 2 9
  • 10.
    Struts 2.x benefits ● Actions are POJOs ● Interceptors (from AOP) ● Classes are now independent of HTTP ● Simplified testing ● Annotations, AJAX, Spring, Portlets, etc... Nov 20, 2008 Web Development with Apache Struts 2 10
  • 11.
    Workflow Nov 20, 2008 Web Development with Apache Struts 2 11
  • 12.
    Components ● web.xml – Installs a Filter on /* ● struts.xml – Maps Action names – Defines the navigation flow ● Actions – Execute a task ● Views (JSP or others) – Render the UI Nov 20, 2008 Web Development with Apache Struts 2 12
  • 13.
    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app ... > <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ... </web-app> Nov 20, 2008 Web Development with Apache Struts 2 13
  • 14.
    A simple Action import com.opensymphony.xwork2.ActionSupport; public class MyAction extends ActionSupport { private final List<String> NBDTers = Arrays.asList(...); private String userName; private String message; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getMessage() { return message; } @Override public String execute() { message = userName; return NBDTers.contains(userName) ? "nbdt" : SUCCESS; } } Nov 20, 2008 Web Development with Apache Struts 2 14
  • 15.
    struts.xml <struts> <package name="/" extends="struts-default"> <action name="MyAction" class="myexample.MyAction"> <result name="input">/index.jsp</result> <result name="success">/good.jsp</result> <result name="nbdt">/nbdt.jsp</result> </action> </package> </struts> Nov 20, 2008 Web Development with Apache Struts 2 15
  • 16.
    A simple viewJSP <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <html> <body> <h2>Welcome to JUG Lugano</h2> Hello, <s:property value="message" default="Guest" />, welcome to the first meeting of JUG Lugano! <s:form method="GET" action="MyAction.action"> Would you be so kind to tell me your name? <s:textfield name="userName" /> <s:submit value="Submit" /> </s:form> <s:actionerror/> <s:fielderror/> </body> </html> Nov 20, 2008 Web Development with Apache Struts 2 16
  • 17.
    Interceptors ● Used to implement “common” behaviours – Validations – Multiple submit filters – Logging ● Pre-defined interceptors Nov 20, 2008 Web Development with Apache Struts 2 17
  • 18.
    Formal validation ● Declarative, save tons of code <validators> <field name="userName"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>Your name is required.</message> </field-validator> </field> </validators> Nov 20, 2008 Web Development with Apache Struts 2 18
  • 19.
    Interceptors ● Code that is invoked across Actions ● Many pre-defined interceptors – Parameter rename, cookie management, component behaviours (e.g. Checkboxes), background actions – Validation itself is an interceptor Nov 20, 2008 Web Development with Apache Struts 2 19
  • 20.
    Custom interceptors public interface Interceptor extends Serializable { public void destroy(); public void init(); public String intercept (ActionInvocation inv) throws Exception; } Nov 20, 2008 Web Development with Apache Struts 2 20
  • 21.
    Interceptors in struts.xml <struts> <package name="/" extends="struts-default"> <interceptors> <interceptor name="logger" class="..."/> </interceptors> <action name="MyAction" class="myexample.MyAction"> <interceptor-ref name="logger"/> <result name="success">/good.jsp</result> <result name="nbdt">/nbdt.jsp</result> <result name="input">/index.jsp</result> </action> </package> </struts> Nov 20, 2008 Web Development with Apache Struts 2 21
  • 22.
    Conclusion ● Robust, Struts 1 heritage ● Keeps up with the latest standards (POJOs, AOP, annotations, Spring, ...) ● “Conservative” approach, but easy ● Relevant sites: – struts.apache.org – beans.seartipy.com/2008/08/04/struts- 2-plugin-for-netbeans-ide- nbstruts2support/ Nov 20, 2008 Web Development with Apache Struts 2 22