You are on page 1of 2

JSTL

• Erbjuder ett sätt att ytterligare separera presentation från logik genom att
minimera användningen av scriptlets. Består av fyra delbibliotek
– Core Tag Library (core)
Föreläsning 7 • Stöd för villkor, slingor, uttrycksevaluering, inmatning och utmatning.
– Formatting/Internationalization Tag Library (fmt)
• För att hantera datumformat, konverteringar etc.
– Database Tag Library (sql)
• Taggar för att accessa databaser, bör dock ej användas i en driftsatt
JSTL lösning, dataaccessen bör istället ske i JavaBeans eller i EJB:er
– XML Tag Library (xml)
EJB 3.0 • XML stöd
• I JSP 2.0 finns även stöd för EL (Expression Language) så att man kan skriva
<p> Your total, including shipping is ${total+shipping} </p>
• I JSTL (kan adderas till JSP 1.2) måste man istället skriva:
<p> Your total, including shipping is <c:out var="${total+shipping"/></p>

Scriptlet JSTL
<html> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<head> <html>
<title>Count to 10 in JSP scriptlet</title> <head>
</head> <title>Count to 10 Example (using JSTL)</title>
<body>
</head>
<% for(int i=1;i<=10;i++) {%>
<body>
<%=i%><br/>
<c:forEach var="i" begin="1" end="10" step="1">
<% } %>
</body> <c:out value="${i}" /> <br />
</html> </c:forEach>
</body>
</html>

Exempel Problem med EJB 2.1


<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> • The current EJB model requires you to create several component interfaces
<html><head><title>If with Body</title></head><body> and implement several unnecessary callback methods.
• The component interfaces require implementation of EJBObject or
<c:if test="${pageContext.request.method=='POST'}"> EJBLocalObject and handling of many unnecessary exceptions.
<c:if test="${param.guess=='Java'}">You guessed it! <br /> <br /> <br /> • The EJB deployment descriptor is complex and error prone.
</c:if> • The container-managed persistence, being based on the EJB model, is overly
<c:if test="${param.guess!='Java'}">You are wrong <br /> <br /> <br /> complex to develop and manage. Several basic features are missing--such as a
</c:if> standard way to define a primary key using a database sequence. The EJBQL
</c:if> <form method="post">Guess what computer language I am thinking of? syntax is very limited.
• EJB components are not truly object-oriented, as they have restrictions for
<input type="text" name="guess" /> using inheritance and polymorphism.
<input type="submit" value="Try!" /> • Developers cannot test EJB modules outside an EJB container and debugging
<br/> an EJB inside the container is a nightmare.
</form> • Looking up and invoking an EJB is a complex task. Detailed knowledge of
JNDI is required for even the most basic use of an EJB in your application.
</body>
</html>

1
Lösningar i EJB 3.0 EJB 3.0
• Removing need for unnecessary interfaces • Har inget HomeInterface och kräver inte
and implementation of callback methods RemoteInterface
• Using metadata annotations instead of • Ingen deployment descriptor
deployment descriptors • ”Annotations”
• Using regular Java classes as EJBs and – Erbjuder en möjlighet att definiera egenskaper
regular business interfaces for EJBs för klasser och metoder, börjar med ”@”. Är en
del av J2SE5.0. Redan över 50 st definierade...

EJB 3.0 Exempel


• EJB
import javax.ejb.Stateless;
• Klassnivå @Stateless
– @Stateless, Stateful, MessageDriven, Entity public class HelloWorldBean implements HelloWorld {
– @Remote public void sayHello(String name){
• Alla EJB:er är lokala per default.
System.out.println("Hello "+name +" from your first EJB 3.0
– @Resource(name="jdbc/db", resourceType="javax.sql.DataSource") component ...");
• Fältnivå }
– @Id
}
• För att markera primärnyckel
– @Transient • Interface
• Endast för entitetsbönor, fält markerade ska inte vara persistenta. import javax.ejb.Remote;
• Metodnivå @Remote
– @BusinessMethod public interface HelloWorld {
• Om RemoteInteface saknas skapas ett sådant med samtliga publika metoder från EJB- public void sayHello(String name);
klassen. Om man använder denna ”annotation” skapas ett remoteinterface med endast
markerade metoder i RemoteInterfacet }
– @Remove • Klient
• EJB:n ska raderas efter metoden har anropats (Cart checkout). @EJB HelloWorld bean;

Exempel

@Entity
@Table(name=”spelare")
@NamedQuery(name="findAll",queryString="SELECT OBJECT(p)
FROM spelare p");
public class Player implements java.io.Serializable
{
int id;
@Id
@Column(name = "ID", primaryKey = true, nullable = false)
public String getId()
{
return id;
}
}

You might also like