back to top

Web – Un esempio completo – Guida Java Spring

Vediamo ora un esempio di web application; più precisamente vediamo come implementare un controller e delle jsp che permettano di aggiungere un libro ad una collezione di libri.

Prima di tutto, nel nostro web.xml, configuriamo il WebApplicationContext e mappiamo la DispatcherServlet:

<!-- SPRING -->
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:applicationContext.xml</param-value>
</context-param>

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- MVC -->
<servlet>
  <servlet-name>spring-mvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>spring-mvc</servlet-name>
  <url-pattern>/action/*</url-pattern>
</servlet-mapping>

Fatto questo creiamo la nostra classe Book:

public class Book {

  @Size(min=1,message="Il campo nome non può essere vuoto")
  @Pattern(regexp="[A-Za-z0-9 _]+",message="Il campo nome può essere composto solo da lettere")
  private String nome;
    
  @NotNull
  @Size(min=1,message="Il campo autore non può essere vuoto")
  @Pattern(regexp="[A-Za-z ']+",message="Il campo autore può essere composto solo da lettere")
  private String autore;

  @DateTimeFormat(pattern="dd/MM/yyyy")
  @NotNull(message="Il campo Data di Uscita non può essere vuoto")
  private Date dataDiUscita;
    
  //getters and setters.................
  //..........
}

Come si può notare il nostro Book ha tre attributi:

  • nome del libro
  • autore
  • data di uscita

Vediamo però che, oltre alla definizione degli attributi, sono presenti anche delle annotations. Queste annotations fanno parte della JSR-303 e, se una implemtazione di queste API è presente nel classpath, Spring è in grado di validare il nostro model. Per abilitare la validazione basta solamente aggiungere le annotations agli attributi del nostro model e aggiungere l'annotazione @Valid accanto al paremetro di input del nostro controller:

@Controller
public class BookController {

  private List<Book> bookList;
    
  public BookController(){
    bookList = new ArrayList<Book>();
  }
    
  //Mostra la pagina di creazione 
  @RequestMapping(value = "/createBook", method = RequestMethod.GET)
  public String welcome(Model model) {
    model.addAttribute("book",new Book());
    return "/book/createBook";
  }
    
  //controlla se ci sono errori di validazione e in caso contrario aggiunge il libro alla lista
  @RequestMapping(value = "/create", method = RequestMethod.POST)
  public String create(@Valid Book book, BindingResult result) {
    if(result.hasErrors()){
      return "/book/createBook";
    }
    bookList.add(book);
    return "redirect:getview";
  }
    
  //mostra la lista dei libri
  @RequestMapping(value = "/getview")
  public String view(Model model) {
    model.addAttribute("bookList",bookList);
    return "/book/view";
  }
}

vediamo ora le due jsp:

1) WEB-INF/jsp/book/createBook.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!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=UTF-8">
<title>Aggiungi un libro</title>
</head>
<body>
<form:form commandName="book" method="post" action="create">
  <fieldset>
    <legend>Aggiungi un libro</legend>
    <p>
      <form:label for="nome" path="nome">Nome</form:label><br/>
      <form:input path="nome" /> <form:errors path="nome" />            
    </p>
    <p>   
      <form:label for="autore" path="autore">Autore</form:label><br/>
      <form:input path="autore" /> <form:errors path="autore" />
    </p>
    <p>
      <form:label for="dataDiUscita" path="dataDiUscita">Data di Creazione</form:label><br/>
      <form:input path="dataDiUscita" /> <form:errors path="dataDiUscita" />
    </p>
    <p>   
      <input type="submit" value="Crea Libro" />
    </p>
  </fieldset>
</form:form>
</body>
</html>

2) WEB-INF/jsp/book/view.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!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=UTF-8">
<title>Lista dei libri</title>
</head>
<body>
<p>
  <a href="createBook">Inserisci un altro libro</a>
</p>
<fieldset>
<legend>Libri inseriti</legend>
<c:forEach items="${bookList}" var="book">
  Nome: <c:out value="${book.nome}" /><br/><br/>
  Autore: <c:out value="${book.autore}" /><br/><br/>
  Anno: <c:out value="${book.dataDiUscita}" /><br/><br/>
  <hr/>
</c:forEach>
</fieldset>

</body>
</html>

Per finire vediamo il contenuto di WEB-INF/spring-mvc-servlet.xml:

<!-- ABILITO LE ANNOTATIONS -->
<mvc:annotation-driven  />

<!-- CONTROLLER -->
<bean class="it.mrwebmaster.mvc.BookController" scope="session"/>

<!-- VIEW RESOLVER -->
<bean id="viewResolver"  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
</bean>
PubblicitÃ