We will
required to set the home page as minimal configuration in web.xml otherwise we
can remove the WEB-INF itself.
So
web.xml entry:
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
Other
configurations which were in web.xml earlier are put in configuration java
file:
DeploymentDescripterConfig.java:
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import
org.springframework.web.WebApplicationInitializer;
import
org.springframework.web.context.ContextLoaderListener;
import
org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.context.support.GenericWebApplicationContext;
import
org.springframework.web.servlet.DispatcherServlet;
public class DeploymentDescripterConfig implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext
rootContext = new
AnnotationConfigWebApplicationContext();
rootContext.scan("com.spring.package.*");
servletContext.addListener(new
ContextLoaderListener(rootContext));
ServletRegistration.Dynamic appServlet =
servletContext.addServlet("dispatcher", new DispatcherServlet(new GenericWebApplicationContext()));
appServlet.setLoadOnStartup(1);
appServlet.addMapping("*.htm");
}
}
We also removed application-servlet.xml
configuration, So its alternate java configuration file :
WebConfig.java:
import
org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import
org.springframework.context.annotation.Configuration;
import
org.springframework.web.servlet.config.annotation.EnableWebMvc;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@EnableWebMvc
@Configuration
@ComponentScan("com.spring.package.*")
public class WebConfig extends WebMvcConfigurerAdapter{
/**
* ViewResolver
configuration required to work with resource-based views.
*/
@Bean
public InternalResourceViewResolver
internalResourceViewResolver() {
InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
internalResourceViewResolver.setPrefix("/WEB-INF/jsp/");
internalResourceViewResolver.setSuffix(".jsp");
internalResourceViewResolver.setOrder(0);
return internalResourceViewResolver;
}
}
Declaring our bean definitions:
UserConfig.java
import org.springframework.context.annotation.Bean;
import
org.springframework.context.annotation.ComponentScan;
import
org.springframework.context.annotation.Configuration;
import com.spring.package.domain.User;
@Configuration
@ComponentScan("com.spring.package.*")
public class UserConfig {
@Bean
public User userA() {
User user = new User();
user.setName("userA");
return user;
}
@Bean
public User userB() {
User user = new User();
user.setName("userB");
return user;
}
}
Create the controller:
UserListController.java
:
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import
org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import
org.springframework.validation.BindingResult;
import
org.springframework.web.bind.annotation.ModelAttribute;
import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.spring.package.domain.User;
@Controller
public class UserListController {
private List<User> userList = new ArrayList<User>();
@RequestMapping(value="/User.htm",method=RequestMethod.GET)
public String showForm(ModelMap model){
User user = new User();
model.addAttribute("user", user);
return "User";
}
@RequestMapping(value="/ShowUsers.htm",method=RequestMethod.POST)
public String showUsers(ModelMap model, @ModelAttribute("user") User user, BindingResult
result ){
if(!result.hasErrors()){
userList.add(user);
}else{
System.out.println("User has not been added to list.");;
}
model.addAttribute("Users", userList);
return "ShowUsers";
}
}
Domain User class:
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Index.jsp
containing:
<jsp:forward
page="/User.htm"></jsp:forward>
User.jsp
containing:
<form:form method="POST"
commandName="user" action="ShowUsers.htm">
<table>
<tr><td>Enter
your name : </td><td> <form:input path="name" /><br/></td></tr>
<tr><td>Age : </td><td> <form:input path="age" /><br/></td></tr>
<tr><td colspan="2"><input type="submit" value="show
user"></div></td></tr>
</table>
</form:form>
showUsers.jsp
containing :
<body style="color: green;">
The following are the
user is logged in :<br>
<ul>
<c:forEach items="${Users}" var="user">
<li>Name : <c:out value="${user.name}" />; Age : <c:out value="${user.age}"/>
</c:forEach>
</ul>
</body>
And
we are good to go. Bye bye xml.
We
can also add test class to the above sample application:
UserConfigTest.java :
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
import org.junit.runner.RunWith;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.beans.factory.annotation.Qualifier;
import
org.springframework.test.context.ContextConfiguration;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import
org.springframework.test.context.web.WebAppConfiguration;
import
com.spring.export.configuration.UserConfig;
import com.spring.export.domain.User;
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration // defaults to "file:src/main/webapp"
@ContextConfiguration(classes={UserConfig.class})
public class UserConfigTest{
@Autowired
@Qualifier("userA")
private User user = null;
/**
* Tests message.
*/
@Test
public void testMessage() {
assertNotNull("Constructor message instance is null.", user);
String msg = user.getName();
assertNotNull("Message is null.", msg);
String
expectedMessage = "userA";
assertEquals("Message should be '" +
expectedMessage + "'.", expectedMessage, msg);
System.out.println("message='{}'"+ msg);
}
}
No comments:
Post a Comment