Struts Examples
1. Develop Struts First Application
Step-1 :Build Liabrary pathBulid Liabrary
Step-2 :Add the Library in the Deployment Assembly
Add the Library in the Deployment Assembly
Step-3 :Entry in Web.xml
Web.xml
<?xml version="1.0" encoding="windows-1252"?> <web-app xmlns:xsi="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_S.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> <display-name>Basic Struts 2 Project Setup</display-name> <filter> <filter-name>Struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>Struts2</filter-name> <filter-pattern>/*</filter-pattern> </filter-mapping> </web-app>
Step-4 :HelloAction DTO class
HelloAction DTO class
package com.nuc.actions;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {
private String message="This is Default Message!";
public HelloAction() {
super();
}
public String execute() {
this.setMessage("Hello World - Struts 2");
return SUCCESS;
}
public void setMessage(String message) {
this.message=message;
}
public String getMessage() {
return message;
}
}
Step-5 :Hello.jsp file
Hello.jsp file
<!DOCTYPE html PUBLIC " -//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>hello</title> </head> <body> <h1><s:property value="message" /></h1> </body> </html>
Step-6 :Struts.xml file
Struts.xml file
<?xml version="1.-0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation //DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default" extends="struts-default"> <action name="HelloWorld" class="cm.nuc.actions.HelloAction" method="execute"> <result name="success">/hello.jsp</result> </action> </package> </struts>
Step-7 :Output at Web Browser
Output
Step-8 :Login Page Demo File
Login Page
Step-9 :Login.jsp File
Login.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%page ContentType="text/html:character-windows-1252"% > <%taglib url="/struts-tags" prefix="s"% > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>Login JSP</title> </head> <body> <s:form action="Login"> <s:textfield name="userid" label="User Name" /> <s:password name="password" label="Password" /> <s:submit value="Login" /> </s:form> </body> </html>
Step-10 :LoginAction class file
Step-10 :LoginAction class file
package com.nuc.actions;
import...;
public classLoginAction extends ActionSupport {
private String userid;
private String password;
public LoginAction() {
super();
}
public String checkLogin() {
String action="error";
if(this.getUserid().equalsIgnoreCase
(this.getPassword())) {
action="success";
}
return action;
}
public void setUserid(String userid) {
this.userid=userid;
}
public String getUserid() {
return userid;
}
public void setPassword(String password) {
this.password=password;
}
public String getPassword() {
return password;
}
}
Step-11 :Entry Welcome.jsp File
Welcome.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> < %@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> < %@taglib url="/struts-tags" prefix="s"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252" /> <title>Welcome</title> </head> <body> welcome<s:property value="userid" /> </body> </html>
Step-12 :Error.jsp File
Error.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> < %@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252" /> <title>Welcome</title> </head> <body> Invalid Userid and Password ! </body> </html>
Step-13 :Struts.xml new entry
Struts.xml with new entry
<?xml verion="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-Apache Software Foundation//
DTD Struts Configuration 2.0
//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
<action
name="Login"
class="com.nuc.actions.LoginAction"
method="checkLogin">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</struts>
2. Bootstrap in Struts
Login.jspLogin.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
contentType="text/html; charset=windows-1252"%>
< %@taglib url="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<title>Login JSP</title>
</head>
<body>
<s:form action="Login">
<s:textfield name="userid" Label="User Name" />
<s:textfield name="password" Label="Password" />
<s:submit value="Login" action="LogincheckLogin" />
<s:submit value="Add" action="Logincheckadd" />
<s:submit value="Delete" action="Logindelete" />
</s:form>
</body>
</html>
LoginAction class file
LoginAction class file
package com.nuc.actions;
import com.opensympony.xwrok2.ActionSupport;
public classLoginAction extends ActionSupport {
private String userid;
private String password;
private String message;
public LoginAction() {
super();
}
public String checkLogin() {
String action="error";
if(this.getUserid().equalsIgnoreCase(this.getPassword())){
action="success";
this.setMessage("Inside CheckLogin Action");
}
return action;
}
public String changePassword() {
this.setMessage("Inside changePassword Action");
return "success";
}
public String add() {
this.setMessage("Inside add Action");
}
public String delete() {
this.setMessage("Inside Delete Action");
return "success";
}
}
Struts.xml
Struts.xml
<?xml verion="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-Apache Software Foundation// DTD Struts Configuration 2.0 //EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default" extends="struts-default"> <action name="HelloWorld" class="com.nuc.actions.HelloAction" method="execute"> <result name="success">/hello.jsp</result> </action> <action name="Login" class="com.nuc.actions.LoginAction" method="(1)"> <result name="success">/welcome.jsp</result> <result name="error">/error.jsp</result> </action> <action name="Register" class="com.nuc.actions.Register" method="execute"> <result name="success">/register_Result.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts>
3. To enable the IOC in Struts
LoginAction class fileLoginAction class file
package com.nuc.actions;
import com.opensympony.xwrok2.ActionContext;
import com.opensympony.xwrok2.ActionSupport;
import java.util.Map;
import org.apache.struts.interceptor.SessionAware;
public classLoginAction
extends ActionSupport implements SessionAware{
private String userid;
private String password;
private Map<String,Object> _session;
public LoginAction(){
super();
}
public String checkLogin(){
String action="error";
if(this.getUserid().equalsIgnoreCase(this.getPassword())){
_session.put("userid",getUserid());
action="success";
}
return action;
}
public void setUserid(String userid){
this.userid=userid;
}
public String getUserid(){
return userid;
}
public void setPassword(String password){
this.password=password;
}
public String getPassword(){
return password;
}
public void setSession(Map<String,Object> map){
this._session=map;
}
public Map<String,Object> getSession(){
return _session;
}
}
4.Interceptor
Entry in Alias.jsp fileAlias.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
contentType="text/html; charset=windows-1252"%>
< %@page language="java" pageEncoding="ISO-8859-1"%>
< %@taglib url="/struts-tags" prefix="s"%>
<html>
<head>
<title><s:text name="app.title"/></title>
</head>
<body>
<table align="center" width="300">
<tr>
<td colspan="2"><s:actionerror/></td;>
</tr>
<tr>
<td colspan="2" align="center">
Enter Login ID and Password</td;>
</tr>
<tr>
<td align="center">
<s:form action="aliasing" method="post">
<s:textfield name="uname" key="app.loginid"/>
<s:password name="pwd" key="app.password"/>
<s:submit value="Enter"/>
</s:form>
</td>
</tr>
</body>
</html>
Entry in AliasAction.java file
AliasAction.java file
package com.nuc.actions;
import com.opensympony.xwrok2.ActionSupport;
public class AliasAction extends ActionSupport{
private String loginid;
private String password;
public String getLogin(){
return loginid;
}
public void setLoginid(String loginid){
this.loginid=loginid;
}
public void setPassword(String password){
this.password=password;
}
public String getPassword(){
return password;
}
public String execute() throws Exception{
System.out.println("Login Id:"+getLoginid());
System.out.println("Password:"+getPassword());
if(loginid.equals(Password)){
return success;
}
else{
this.addActionError(getText("app.invalid"));
return ERROR;
}
}
}
Entry in Struts.xml file
Struts.xml file
<?xml verion="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-Apache Software Foundation//
DTD Struts Configuration 2.0
//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default">
<action
name="aliasing"
class="com.nuc.actions.AliasAction">
<param name="aliases">#('username':'loginid',
'pwd':'password')</param>
<interceptor-ref name="alias"/>
<interceptor-ref name="basicStack"/>
<result name="success">/success.jsp</result>
<result name="error">/alias.jsp</result>
<result name="input">/alias.jsp</result>
</action>
</package>
</struts>
Entry in Application Resources property file
Application Resources property file
app.title=struts 2 Interceptors app.welcome=Implementing Struts 2 Interceptors app.username=User Name app.loginid=Login ID app.password=password app.rollno=Roll No. app.name=Name app.course=Course app.city=City app.success=Success app.username.blank=User Name is Required app.passwor.blank=Name is Required app.rollno.blank=Roll No. is Required app.invalid=Invalid User Name or Password app.invalid.password.length=Password length must be 6 ir 8
Entry in Struts property file
Struts property file
struts.custom.i18n.resources=ApplicationResources struts.devMode=true
5. Execute and Wait in Interceptor
Entry in Index.jsp fileIndex.jsp file
Entry of Execute method in LoginAction class file
Entry of Execute method in LoginAction class file
Entry Wait.jsp file
Entry Wait.jsp file
Entry Struts.xml file
Struts.xml file
<?xml verion="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-Apache Software Foundation// DTD Struts Configuration 2.0 //EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default" extends="struts-default"> <action name="longAction" class="com.nuc.actions.LongAction"> <interceptor-refn name="completeStack"/> <interceptor-ref name="execAndWait"> <param name="delay"> 2000</param> <param name="delaySleepInterval"> 50</param> </interceptor-ref> <result name="wait">/wait.jsp</result> <result name="success">/success.jsp</result> </action> </package> </struts>
6.Exception Handling in Struts
Entry in Login.jsp fileLogin.jsp file
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
< %@page contentType="text/html" charset="windows-1252"%>
< %@taglib url="/struts-tags" prefix="s"%>
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html"
charset="windows-1252"/>
<title>Login JSP</title>
</head>
<body>
<s:form action="Login">
<s:textfield name="userid" label="User Name" />
<s:password name="password" label="Password" />
<s:submit value="Login" />
</s:form>
</body>
</html>
Entry in LoginAction class file
LoginAction.java file
package com.nuc.action;
import com.opensympony.xwrok2.ActionSupport;
public class LongAction implements ActionSupport {
private String userid;
private String password;
public LoginAction(){
super();
}
public String checkLogin() throws Exception {
String action="error";
if(this.getUserid().equalsIgnoreCase(this.getPassword())) {
throws new Exception();
}
return action;
}
}
Entry in Struts.xml file
Struts.xml file
<?xml verion="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-Apache Software Foundation// DTD Struts Configuration 2.0 //EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default" extends="struts-default"> <global-exception-mapping> <exception-mapping exception="java.lang.Exception"result="exception"/> <action name="Login" class="com.nuc.actions.LoginAction" method="checkLogin"> <interceptor-refn name="exception"/> <interceptor-ref name="basicStack"/> <result name="success">/welcome.jsp</result> <result name="error">/error.jsp</result> <result name="exception">/exception.jsp</result> </action> </package> </struts>
Entry in Exception.jsp file
Exception.jsp file
<%@ page language="java" pageEncoding="ISO--8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN "> <html> <head><title>Exception....</title> <link rel="stylesheet"href="mystyle.css" type="textcss"/> </head> <body> <div align="center"> <br> server is busy, Try after some time </div> </body> </html>
Entry in MyInterceptor class file
MyInterceptor class file
package com.nuc.interceptor;
import....;
public class MyInterceptors extends AbstractInterceptors {
private List<String> pageList=new ArrayList<String>();
public MyInterceptors()
{
super;
pageList.add("111");
pageList.add("222");
pageList.add("333");
}
public String intercept(ActionInvocation actionInvocation)
throws Exception
{
ActionContext ac=actionInvocation.getInvocationContext();
String pageId=(String)ac.getContext().getParameters.get("pageid");
if(pageList.contains(pageId))
return actionInvocation.invoke();
else
return "noaccess";
}
}
Entry in Struts.xml file
Struts.xml file
<package name="default" extends="struts-default"> <global-exception-mappings> <exception-mapping exception="java.lang.Exception" result="exception"/> </global-exception-mappings> <interceptors> <interceptor name="MyInterceptors" class="com.nuc.MyInteceptors"/> <interceptor-stack name="defaultLoginstack"> <interceptor-ref name="MyInterceptor"/> <interceptor-ref name="Servlet-Config"/> <interceptor-ref name="params"/> <interceptor-ref name="login"/> <interceptor-ref name="prepare"/> <interceptor-ref name="chain"/> <interceptor-ref name="model-driven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="static-params"/> <interceptor-ref name="params"/> <interceptor-ref name="conversionError"/> <interceptor-ref name="validationr"/> <interceptor-ref name="workflow"/> </interceptor-stack> </interceptors> <default-inteceptors-ref name="defaultLoginStack">
7. Validation Using XML Meta-Data
Entry in AddEmployee.jsp fileAddEmployee.jsp file
<%@ page language="java" contentType="text/html;charset=UTF-8" %> <@taglib prefix="s" uri="/struts-tags"> <html> <head> <title>Using Field Validation-Adding New Employee</title> <link rel="stylesheet" href="mystyle.css" type="text/css" /> </head> <body> <h3>Using Field Validators</h3> <b>Enter new employee details:</b> <s:form action="addEmployee"> <s:textfield label="Employee ID" name="empid"/> <s:password label="Password" name="password"/> <s:password label="Re-Password" name="password1"/> <s:textfield label="Employee Name" name="empname"/> <s:textfield label="Date of Joining" name="doj"/> <s:textfield label="Age" name="age"/> <s:textfield label="City" name="doj"/> <s:textfield label="Email" name="email"/> <s:submit value="Add Employee"/> </s:form> <br> <br> <s:a href="index.jsp">Home</s:a> </body> </html>
Entry in AddEmployeeAction class file
AddEmployeeAction class file
package com.nuc.actions;
import com.opensymphony.xwork2.ActionSupport;
import java.sql.Date;
public class AddEmployeeAction extends ActionSupport
{
private String empid;
private String password;
private String password1;
private String empname;
private String doj;
private Integer age;
private String city;
private String email;
public Integer getAge()
{
return age;
}
public void setAge(Integer age)
{
this.age=age;
}
public Integer getCity()
{
return age;
}
public void setCity(Integer age)
{
this.city=city;
Entry in AddEmployeeActionValidation.xml file
AddEmployeeActionValidation.xmlfile
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-
//OpenSymphony Group//XWork Validator 1.0//EN"
http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="empid">
<field-validator type="requiredString">
<message>Employee ID is required</message>
</field-validator>
<field-validator type="regex">
<param name="expression">
<![CDATA[([k][o][g][0-9][0-9][0-9])]]>
</param>
<message>Valid Employee ID required e.g kog101</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>Password field is empty</message>
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">4</param>
<param name="trim">true</param>
<message>Enter password 4-10 characters long</message>
<field-validator>
</field>
<field name="password1">
<field-validator type="fieldexpresion">
<param name="expression">
(password==password1)
</param>
<message>Password and Reenter Password must be same</message>
</field-validator>
</field>
<field name="empname">
<field-validator type="requiredstring">
<message>Employee Name is required</message>
</field-validator>
</field>
<field name="doj">
<field-validator type="date">
<param name="min">01/01/2006</param>
<param name="max">01/01/2008</param>
<message>Enter a date between $(min) and $(max)</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">18</param>
<param name="max">45</param>
<message>Enter between 18 and 45.</message>
</field-validation>
</field>
<action name="addEmployee"
class="com.nuc.actions.AddEmployeeAction">
<result name="success">employee.jsp</result>
<result name="input">addemployee.jsp</result>
</action>
8. Validation Using Programmatic
Entry in LoginAction class fileLoginAction class file
package com.nuc.actions;
import com.opensymphony.xwork2.ActionSupport;
public class LoginActon extends ActionSupport
{
private String userid;
private String password;
public LoginAction()
{
super();
}
public String checkLogin()
{
String action="errorr";
if(this.getUserid().equalsIgnoreCase
(this.getPassword()))
{
action="success";
}
return action;
}
public void validate()
//Override the Validate method
it comes from Validateable interface,
//which is implemented by ActionSupportclass
{
if(getUserid().length==0)
addFieldError("userid"."User Name is required");
if(getPassword().length==0)
addFieldError("password","Password is required");
}
}
Make different Language property files
property files
#Resources for parameter 'com.kogent.ResourceBundle' #Project Strutsi18nApp app.title=Struts 2 Internationalisation app.username=Benurzer Name app.password=Kennwort app.success_login=Willkommen !Du hast erfolgreich angemeldet. app.username.blank=Benutzer-Namewird angefordert
DE Language property files
DE property files
app.password.blank=Kennwort wird angefordert app.invalid=Unzulassiger Benutzer-Name oder Kennwort app.submit=LOGON logout=Logout app.welcome.note=< p align="justify">Struts 2 liefert eine Eigen Schaft ,die netZanwendung fur globalen Verbra uc </p>
FR Language property files
FR property files
#Resources for parameter 'com.kogent.ResourceBundle' #Project Strutsi18nApp app.title=Struts 2 Internationalisation app.username=Nomd'utilisateur app.password=Mot de passe app.success_login=Bievenue! Vous avez enrte avec succes. app.username.blank=Le nom d'utilisateur est exige app.password.blank=Le mot de passe exige app.invalid=Nom ou mot de passe inadmissible d'utilisateur app.submit=Ouverture logout=Deconnexion app.welcome.note=Les Struts 2 fournit un dispositi fqui permetla demande de web d'utilisation</p>
Entry in Struts property files
Struts property files
struts.custom.i18n.resources=ApplicationResources struts.devMode=true
Entry in Login.jsp files
Login.jsp files
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN" "http://wwww3orgZTR/html4/loose.dtd> <%@ page contentType="text/html;charset=windows-1252"%> <%@ taglib uri="//struts-tags" prefix ="s"%> <html> <head> <meta http-equiv="Content-Type" content="text/html";charset=windows-1252"/> <title><s:text name="app.title"/><title> </head> <body> <h1><s:text name="app.title"/></h1> <s:form action="Login"> <s:textfield name="userid" key="app.username"/> <s:password name="passwoord" key="app.password"/> <s:submit value="Login"/> </s:form> </body> </html>
Steps to configure Language
Steps to configure Language
Step-1
Step-2![]()
Step-3![]()
Control Tags <s:if><s:iterator>
Entry in LoginAction class fileLoginAction.java file
package com.nuc.actions;
import com.opensymphony.xwork2.ActionSupport;
import controlstags.Emp;
import java.util.ArrayList;
import java.util.List;
public class LoginAction extends ActionSupport
{
private String userid;
private String password;
private List empList=new ArrayList();
public LoginAction()
{
super();
}
public String checkLogin()
{
String action="error";
if(this.getUserid().equalsIgnoreCase(this.getPassword()))
{
empList.add(new Emp(1001,"Ram",10000.00f));
empList.add(new Emp(1002,"Shyam",20000.00f));
empList.add(new Emp(1003,"Sohan",30000.00f));
empList.add(new Emp(1004,"Mohan",40000.00f));
this.setEmpList(empList);
action="success";
}
return action;
}
}
Entry in Welcome.jsp files
Entry in Welcome.jsp files
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Welcomes:<s:property value="userid"/>
<br>
Emp List
<br>
<s:iterator value ="empList" var="st" status="row">
<s:set name="ename" value="name"/>
<s:if test="%(#ename==''Ram)">
<s:property value="empno"/>
<s:property value="name"/> <s:property/>
</s:if>
<br>
</s:iterator>
</body>