spring mvc搭建(菜鸟心得)
本次主要了解一下spring mvc搭建,如有错误,还望告知。
一个web项目在启动时,会去读取web.xml文件,web.xml简单配置如下:
1.web.xml
配置时首先要配置servlet,因为所有的请求控制都是由DispatcherServlet(spring-webmvc-3.2.0.M1.jar)来进行转发的。如果配置文件少的话可以直接在servlet中通过
<init-param>
<param-name>contextConfigLocation</param-name><param-value>相应文件路径</param-value>
</init-param>
这种方式来配置。
如果不用这种方式的话,首先要定义listener来监听context,从而通过context-param来读取里面的xml文件,配置如下:
在这个配置中会拦截所有以.do结尾的请求。
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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"> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext-ibatis.xml /WEB-INF/spring-servlet.xml </param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置spring核心servlet --> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> <!-- url配置为/,不带文件后缀,会造成其它静态文件(js,css等)不能访问。如配为*.do,则不影响静态文件的访问 --> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
2.得到请求以后,要根据相应的映射来进行转发,来调用相应的DAO操作数据库获取数据,并返回数据结果,相应的配置文件如下(spring-servlet.xml):
helloWorld.do的请求,会去找相应的action,下面为helloWorldAction,会调用action中的handleRequest方法。
<?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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="helloWorld.do">helloWorldAction</prop> </props> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass"> <value>org.springframework.web.servlet.view.InternalResourceView</value> </property> <property name="prefix"> <value>/WEB-INF/JSP/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <bean id="helloWorldActionDAO" class="com.gc.action.HelloWorldActionDAO"> <property name="userDAO"> <ref bean="userDAO"/> </property> </bean> <bean id="helloWorldAction" class="com.gc.action.HelloWorldAction"> <property name="helloWorld"> <value>HelloWorld</value> </property> <property name="viewPage"> <value>index</value> </property> <property name="helloWorldActionDAO"> <ref bean="helloWorldActionDAO"/> </property> </bean> </beans>
3.HelloWorldAction
package com.gc.action; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class HelloWorldAction implements Controller{
private String helloWorld; private String viewPage; private HelloWorldActionDAO helloWorldActionDAO; @Override public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { // TODO Auto-generated method stub //调用相应的DAO,里显示数据(用于ibatis的测试)
//helloWorldActionDAO.display(); Map model = new HashMap(); model.put("helloWorld", getHelloWorld()); return new ModelAndView(getViewPage(),model); } public String getViewPage() { return viewPage; } public void setViewPage(String viewPage) { this.viewPage = viewPage; } public String getHelloWorld() { return helloWorld; } public void setHelloWorld(String helloWorld) { this.helloWorld = helloWorld; } public HelloWorldActionDAO getHelloWorldActionDAO() { return helloWorldActionDAO; } public void setHelloWorldActionDAO(HelloWorldActionDAO helloWorldActionDAO) { this.helloWorldActionDAO = helloWorldActionDAO; } }
4.这样在相应的页面上就能显示数据了,index.jsp
<%@page contentType="text/html;charset=GBK"%> <html> <% String str = (String)request.getAttribute("helloWorld");%> <body> <h1><%=str%></h1> </body> </html>
大概的流程如上,在上面的操作中都是基于spring的DI来进行数据的注入。