来源:http://blog.csdn.net/mistygod/article/details/5755873
1、首先谈谈Spring-mvc
在使用Spring-mvc之前,为一直使用的是struts,关于struts的介绍为前面也曾小结过,所以这里就不多说了。还是来谈谈Spring的mvc吧.
Web开发大家都知道Servlet,和大多数基于Java的MVC框架一样,SpringMVC将所有的请求都经过一个前端Servlet控制器--DispatchServlet.DispatchServlet的工作就是将一个客户端的request请求分发给不同的springMVC控制器(Controller),所谓控制器就是处理请求的spring组件。不管那么多了,既然DispatchServlet是一个前端控制器(Servlet),那么就要在Web.xml配置它才行:
[java] view plaincopy
- <servlet>
- <servlet-name>wiscom</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>wiscom</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
配置完DispatchServlet以后,我们就可以用它来控制所有的请求了.所有的以*.do结尾的请求都将会被拦截.下面我们就需要分解应用上下文了。首先在WEB_INF目录下创建一个wiscom-servlet.xml文件,根据上面的配置,DispatchServlet会载入wiscom-servlet.xml.
不过这里最好是将应用文件分解开来,将不同的配置文件对应于不同的应用层次。比如服务层的配置文件可以使用service-servlet.xml..
下面一步就需要配置上下文载入器了,这里我们使用的是Servlet的监听器实现的
[java] view plaincopy
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <!--指定相应的spring配置文件位置 默认路径/WEB-INF/applicationContext.xml -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- /WEB-INF/wiscom-servlet.xml
- /WEB-INF/applicationContext-*.xml
- </param-value>
- </context-param>
到这里spring-mvc的环境基本上已经完成了,下面我们需要思考一个问题,Spring的前端控制器是如何将请求分发到下面不同的Controller中去的以及Controller是如何显示相应的页面的??
带着上面的两个问题,我们继续走下去.创建一个Controller.这里有必要解释一下Controller.当请求到达DispatchServlet时,需要一些目录来指明请求应该被如何分配。此时处理器映射可以帮助DispatchServlet了解请求应该被分发到哪个Controller中。所以我们必须在wiscom-servlet.xml中配置相应的处理器映射(HandleMapping)
[xhtml] view plaincopy
- <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="mappings">
- <props>
- <prop key="/reg.do">regController</prop>
- <prop key="/register.do">registerController</prop>
- <prop key="/query.do">queryController</prop>
- <prop key="/handle.do">handleController</prop>
- </props>
- </property>
- </bean>
这里使用的处理器映射的实现类是SimpleUrlHandleMapping.除此之外还有三种处理器映射类:
BeanNameUrlHandleMapping--根据控制器的名字将控制器映射到URL;
ControllerClassNameHandleMapping--通过将控制器的类名作为URL的基础将控制器映射到URL
CommonsPathMapHandleMapping--使用元数据映射控制器
在配置完处理器映射以后我们就可以创建自己的Controller来实现相应的业务了.spring为开发者提供了许多控制器,对于初学者而言会觉得很难选择(包括我自己).但是所有的Controller都实现了同一个接口:
[c-sharp] view plaincopy
- public interface Controller {
- ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
- }
对于那么多种Controller到底该如何选择,这里就不讨论了,根据业务的不同需求而选用合适的Controller。这里主要常用的Controller是AbstractController和SimpleFormController.下面就给出一个简单的实例使用spring-mvc实现用户注册功能:
创建自己的Controller类,继承于SimpleFormController(用于表单提交)
[java] view plaincopy
- public class RegisterController extends SimpleFormController {
- private HandleUserDao handleUserDao;
- @Override
- protected ModelAndView onSubmit(Object command) throws Exception {
- RegisterUser r = (RegisterUser) command;
- handleUserDao.saveUser(r);
- return new ModelAndView(this.getSuccessView());
- }
- public void setHandleUserDao(HandleUserDao handleUserDao) {
- this.handleUserDao = handleUserDao;
- }
- }
解释一下:这里为将HandleUserDao直接注入到了Controller中,调用后台类实现用户注册功能.需要提及一下的是这里的ModelAndView对象.这里我们不免产生了疑惑, RegisterController是如何在实习业务功能后跳转到相应的页面中去的?
为了帮助springMVC了解使用哪一个JSP,我们需要在wiscom-servlet.xml中声明一个bean:一个视图解析器
[c-sharp] view plaincopy
- <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/show/"></property>
- <property name="suffix" value=".jsp"></property>
- </bean>
通过视图解析器DispatchServlet将请求导向/WEB-INF/show/xxx.jsp呈现给用户.
2、使用Spring-jdbc操作数据库:
2.1、使用JDBC模板(JdbcTemplate、NamedParameterTemplate、SimpleJdbcTemplate)
在操作数据库之前我们必须配置数据源
[xhtml] view plaincopy
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
- <property name="url" value="jdbc:oracle:thin:@172.18.33.234:1521:URP9208"/>
- <property name="username" value="usr_px"/>
- <property name="password" value="wiscom"/>
- <property name="initialSize" value="1"/><!-- 池启动时创建的连接数量 -->
- <property name="maxActive" value="10"/><!-- 配置数据库最大连接数 -->
- </bean>
这里我们使用的是jdbcTemplate类实现JDBC的CRUD操作.
JdbcTemplate
是core包的核心类。它替我们完成了资源的创建以及释放工作,从而简化了我们对JDBC的使用。它还可以帮助我们避免一些常见的错误,比如忘记关闭数据库连接。JdbcTemplate将完成JDBC核心处理流程,比如SQL语句的创建、执行,而把SQL语句的生成以及查询结果的提取工作留给我们的应用代码。它可以完成SQL查询、更新以及调用存储过程,可以对ResultSet
进行遍历并加以提取。它还可以捕获JDBC异常并将其转换成org.springframework.dao
包中定义的,通用的,信息更丰富的异常。
[java] view plaincopy
- public class HandleUserDaoImpl implements HandleUserDao {
- private JdbcTemplate jdbcTemplate;
- static String QUERY_ALL = " SELECT * FROM RegisterUser_hchen " ;
- public List<RegisterUser> queryUsers(String userName) {
- //String QUERY_NAME = "select * from RegisterUser_hchen where username like ‘%"+userName+"%‘" ;
- String QUERY_NAME =QUERY_ALL + " where username like ‘%"+userName+"%‘ ";
- @SuppressWarnings("unchecked")
- List<RegisterUser> list = jdbcTemplate.queryForList(QUERY_NAME);
- return list;
- }
- public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
- this.jdbcTemplate = jdbcTemplate;
- }
- }
上面简单的演示了一下使用jdbcTemplate操作数据库实现模糊查询的功能,这里我们将jdbctTemplate注入到实现类中
[xhtml] view plaincopy
- <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
- <property name="dataSource" ref="dataSource"></property>
- </bean>
- <bean id="handleUserDao" class="wiscom.dao.HandleUserDaoImpl">
- <property name="jdbcTemplate" ref="jdbcTemplate"></property>
- </bean>
同样我们使用Spring对jdbc的DAO支持类实现相应的CRUD操作,可以选择继承JdbcDaoSupport类,这里就不再解释了...下班啦~~