之前用过struts2,学习了spring mvc之后,发现还是比struts2方便一些。
首先,web.xml配置
<filter>
<filter-name>springUtf8Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>springUtf8Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
也可以配置url-pattern为 / ,这需要在spring配置中添加<mvc:resources mapping="/resources/**" location="/resources/"/>,这个据说只在3.05版本之后支持。
然后是spring mvc配置文件:dispatcher-servlet.xml , 这个名称中的 dispatcher要和web.xml中DispatcherServlet的名称相同
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/jsp/" p:suffix=".jsp">
</bean>
</beans>
然后是spring主配置文件:
启用注解
<context:annotation-config />
<context:component-scan base-package="com.sivalabs"></context:component-scan>
<mvc:annotation-driven />
配置place holder,用来读取application configuration
<context:property-placeholder location="/WEB-INF/config.properties"/>
数据源、sessionfactory、事务管理器,其中的
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.url}"
p:username="${jdbc.username}"
p:password="${jdbc.password}">
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
</props>
</property>
<property name="packagesToScan" value="com.sivalabs"></property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory">
</bean>
<!-- annotate transactional method -->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
配置message,默认放置在classpath
<!-- resource message -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="Messages"></bean>
Cotroller的写法:
@Controller
public class ContactsControllers {
private ContactsDAO contactsDAO;
@Autowired
public void setContactsDAO(ContactsDAO contactsDAO) {
this.contactsDAO = contactsDAO;
}
@Autowired
private ContactFormValidator validator;
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(
dateFormat, true));
}
@RequestMapping("/viewAllContacts")
public ModelAndView getAllContacts() {
ModelAndView mav = new ModelAndView("showContacts");
List contacts = contactsDAO.getAllContacts();
mav.addObject("SEARCH_CONTACTS_RESULTS_KEY", contacts);
return mav;
}
@RequestMapping(value = "/saveContact", method = RequestMethod.GET)
public ModelAndView newuserForm() {
ModelAndView mav = new ModelAndView("newContact");
Contact contact = new Contact();
mav.getModelMap().put("newContact", contact);
return mav;
}
@RequestMapping(value = "/saveContact", method = RequestMethod.POST)
public String create(@ModelAttribute("newContact") Contact contact,
BindingResult result, SessionStatus status) {
validator.validate(contact, result);
if (result.hasErrors()) {
return "newContact";
}
contactsDAO.save(contact);
status.setComplete();
return "redirect:viewAllContacts.do";
}
@RequestMapping(value = "/updateContact", method = RequestMethod.GET)
public ModelAndView edit(@RequestParam("id") Integer id) {
ModelAndView mav = new ModelAndView("editContact");
Contact contact = contactsDAO.getById(id);
mav.addObject("editContact", contact);
return mav;
}
}
view中使用spring mvc标签form<form:form action="saveContact.do" method="post" commandName="newContact"> <!-- form goes here --> </form>