moonorongo
3/25/2015 - 12:53 AM

Pasos para hacer una web app, con Maven, Spring y LogBack, ver archivo webApp.text

Pasos para hacer una web app, con Maven, Spring y LogBack, ver archivo webApp.text



<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">
  <display-name>Archetype Created Web Application</display-name>
  
	<servlet>
		<servlet-name>mvc-dispatcher</servlet-name>
		<servlet-class>
                        org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
 
	<servlet-mapping>
		<servlet-name>mvc-dispatcher</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
 
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
	</context-param>
 
	<listener>
		<listener-class>
                   org.springframework.web.context.ContextLoaderListener
        </listener-class>
	</listener>  
  
<!--   
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_5.dtd" >  
 -->  
  
</web-app>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mscifu</groupId>
  <artifactId>webApp</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>webApp Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
		<jdk.version>1.7</jdk.version>
		<spring.version>4.1.1.RELEASE</spring.version>
		<jstl.version>1.2</jstl.version>
		<junit.version>4.11</junit.version>
		<logback.version>1.0.13</logback.version>
		<jcl-over-slf4j.version>1.7.5</jcl-over-slf4j.version>
	</properties>
	  
  <dependencies>
		<!-- Unit Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
		</dependency>
 
		<!-- Spring Core -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
			<exclusions>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
 
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${jcl-over-slf4j.version}</version>
		</dependency>
 
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>${logback.version}</version>
		</dependency>
 
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
 
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
 
		<!-- jstl -->
		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>jstl</artifactId>
		    <version>${jstl.version}</version>
		</dependency>

  </dependencies>
  <build>
    <finalName>webApp</finalName>
		<plugins>
		    <!-- Eclipse project -->
		  <plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-eclipse-plugin</artifactId>
			<version>2.9</version>
			<configuration>
			        <!-- Always download and attach dependencies source code -->
				<downloadSources>true</downloadSources>
				<downloadJavadocs>false</downloadJavadocs>
				<!-- Avoid type mvn eclipse:eclipse -Dwtpversion=2.0 -->
				<wtpversion>2.0</wtpversion>
			</configuration>
		  </plugin>
 
		  <!-- Set JDK Compiler Level -->
		  <plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>2.3.2</version>
			<configuration>
				<source>${jdk.version}</source>
				<target>${jdk.version}</target>
			</configuration>
		  </plugin>
 
		  <!-- For Maven Tomcat Plugin -->
		  <plugin>
			<groupId>org.apache.tomcat.maven</groupId>
			<artifactId>tomcat7-maven-plugin</artifactId>
			<version>2.2</version>
			<configuration>
				<path>/CounterWebApp</path>
			</configuration>
		  </plugin>
 		</plugins>    
  </build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
	    <layout class="ch.qos.logback.classic.PatternLayout">
 
		<Pattern>
			%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
		</Pattern>
 
	    </layout>
	</appender>
 
	<logger name="com.mscifu.controller" level="debug"
		additivity="false">
		<appender-ref ref="STDOUT" />
	</logger>
 
	<root level="error">
		<appender-ref ref="STDOUT" />
	</root>
 
</configuration>
<html>
<body>
<h1>Maven + Spring MVC Web Project Example</h1>
 
<h3>Message : ${message}</h3>
<h3>Counter : ${counter}</h3>	
</body>
</html>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd">
 
	<context:component-scan base-package="com.mscifu.controller" />
 
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix">
			<value>/WEB-INF/pages/</value>
		</property>
		<property name="suffix">
			<value>.jsp</value>
		</property>
	</bean>
 
</beans>
package com.mscifu.controller;

import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
@Controller
public class BaseController {
 
	private static int counter = 0;
	private static final String VIEW_INDEX = "index";
	private final static org.slf4j.Logger logger = LoggerFactory.getLogger(BaseController.class);
 
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String welcome(ModelMap model) {
 
		model.addAttribute("message", "Welcome");
		model.addAttribute("counter", ++counter);
		logger.debug("[welcome] counter : {}", counter);
 
		// Spring uses InternalResourceViewResolver and return back index.jsp
		return VIEW_INDEX;
 
	}
 
	@RequestMapping(value = "/{name}", method = RequestMethod.GET)
	public String welcomeName(@PathVariable String name, ModelMap model) {
 
		model.addAttribute("message", "Welcome " + name);
		model.addAttribute("counter", ++counter);
		logger.debug("[welcomeName] counter : {}", counter);
		return VIEW_INDEX;
 
	}
 
}
1. Creamos el proyecto con maven en una carpeta cualquiera:

La sintaxis es: 
$ mvn archetype:generate -DgroupId={project-packaging} 
	-DartifactId={project-name} 
	-DarchetypeArtifactId=maven-archetype-webapp 
	-DinteractiveMode=false
	
POR EJEMPLO:
mvn archetype:generate -DgroupId=com.mscifu -DartifactId=webApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=falseo

esto crea un proyecto, con un group (supongo que es el packagin??? no se) com.mscifu, la app se llamara webApp, la llamaremos con http://localhost:8080/webApp 


2. Nos metemos dentro de la carpeta webApp (o el nombre q le hayanmos dado) y escribimos:
  mvn eclipse:eclipse -Dwtpversion=2.0
  
  
3. Importamos el proyecto en Eclipse.

4. Agregamos las dependencias en el pom (ver pom.xml)
   Nota: como ya agregamos el wtp-eclipse-plugin, cuando ejecutemos mvn eclipse:eclipse no sera necesario agregar -Dwtpversion
   
5. agregamos las carpetas java/com/mscifu/controller dentro de main   

6. agregamos el BaseController dentro (ver BaseController.java)

7. Dentro de WEB-INF agregamos mvc-dispatcher-servlet.xml

8. modificamos web.xml para que quede como el archivo que adjuntamos (reemplazar lo que esta comentado por lo que va en este archivo)

9. crear una carpeta pages, dentro de WEB-inf, copiar el index.jsp adjunto

10. Crear el archivo de configuracion de LogBack y ponerlo dentro de la carpeta resources (o en algun lugar que este en el classpath)


11. hacemos mvn eclipse:eclipse y todo deberia quedar andando, falta agregar una lib si aparece el siguiente error:

The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

To fix the problem, right click on project -> Properties -> Java Build Path -> Add Library...-> Server Runtime -> Apache Tomcat -> Finish.

12. TAMBIEN  puede aparecer "Java compiler level does not match the version of the installed Java project facet"

    modificar en las propiedades del proyecto "Project Faces" ir a dondo dice Java y cambiar el combo version a 1.6 o lo que tengamos.

MAS INFO: 
http://www.mkyong.com/maven/how-to-create-a-web-application-project-with-maven/

y tambien

http://www.programcreek.com/2014/02/spring-mvc-helloworld-using-maven-in-eclipse/