12.1 springmvc核心流程图及讲解
知识讲解:DispatcherServlet(前端控制器)
1.应用了“Front Controller”模式 – 是所有 Spring MVC 请求的中枢。
2.继承了HttpServlet,是一个Servlet,由WebApplicationContext加载
3.如果不作其它配置,会加载默认组件
HandlerMapping(映射处理器)
1.将web请求映射到正确的处理器(handler)上, 通常是一个 Controller
2.不需用自定义处理器映射–已经内置了很多处理器映射策略
3.在处理器映射中通过配置拦截器(包括处理器执行前、执行后、或者执行前后运行拦截器)将使其功能更强大
Controller (后端控制器)
1.负责处理请求
2.内部参数继承 HttpServlet
handleRequest(HttpServletRequest,HttpServletResponse)
3.返回一个 ModelAndView对象
4.所有实现都是线程安全的
5.基本不用自己实现接口 – 已经提供了很多实用的实现类
ModelAndView 对象
1.封装了用来渲染页面的 model和view
2.Model 用 java.util.Map实现的
3.添加对象,可以不需用名字:
addObject(String, Object) – 用显式名字添加
addObject(Object) – 用默认名添加 (惯例优先)
4.View 用 String 或View 对象表示
5.类似 Struts的Action
Interceptors(拦截器)
1.在请求前后添加其它功能
2.包括拦截器方法 – preHandle and postHandle
3.包括回调方法 – afterCompletetion
4.可以通过 HandlerMapping 和一系列Controller关联上
ViewResolver(视图解析器)
1.从一个逻辑视图名映射到一个视图对象
2.可以排序, 所以能链在一起
3.对JSP用户,通常实现
InternalResourceViewResolver:
<beanid="internalResourceViewResolver" …
<propertyname="prefix" value="/WEB-INF/jsp/" />
<propertyname="suffix" value=".jsp" />
</bean>
4.其它ViewResolver实现
(1)VelocityViewResolver – 针对Velocity templates设计的
(2)FreeMarkerViewResolver– 针对FreeMarker templates设计的
(3)ResourceBundleViewResolver 映射关系在一个 properties 文件,支持国际化
(4)XmlViewResolver – 映射关系在XML文件
View(视图)
1.支持的几种视图模板技术:
InternalResourceView (JSP)
JstlView (JSP + JSTL)
VelocityView (Velocity)
FreeMarkerView (FreeMarker)
TilesView (Tiles)
TilesJstlView (Tiles + JSTL)
2.还支持渲染下列视图
Excel files
PDF files
XSLT results
Jasper Reports
12.2 开发环境
开发工具:myeclipse8.6.1
数据库:mysql5.5.23
服务器: tomcat6.0.37
框架版本: spring3.2.2
12.3 结合jdbc,tomcat数据源对学生数据进行增删改查的管理
步骤一:在myeclipse8.6中新建web工程springmvczh01,拷贝如下包到lib目下:
步骤二:编写web.xml 配置文件,代码如下:
=================================web.xml========================
<?xmlversion="1.0" encoding="UTF-8"?>
<web-appversion="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 配置spring的字符集过滤 -->
<filter>
<filter-name>encode</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encode</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.php</url-pattern>
</servlet-mapping>
</web-app>
================================================================
步骤三:在mysql里面建立数据库,插入测试数据
=========================studentdb.sql==============================
/*
SQLyog Community v11.01 (32bit)
MySQL - 5.5.23: Database - schooldb
*********************************************************************
*/
CREATE DATABASE if not exists studentdb DEFAULT CHARACTER SET utf8;
USE studentdb;
DROP TABLE IF EXISTS users;
CREATE TABLE users
(
userId INT PRIMARY KEY AUTO_INCREMENT,
userName VARCHAR(20) NOT NULL,
PASSWORD VARCHAR(20) NOT NULL
)AUTO_INCREMENT=100
;
INSERT INTOusers(userName,PASSWORD) VALUES('jack','123');
INSERT INTOusers(userName,PASSWORD) VALUES('麻子','123');
DROP TABLE IF EXISTS Student;
CREATE TABLE Student
(
stuId INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR(2),
age INT,
email VARCHAR(20),
address VARCHAR(100)
);
INSERT INTO Student VALUES(9527,'周星星','男',32,'zxx@qq.com','学生宿舍');
INSERT INTO Student VALUES(110,'刘德华','男',35,'ldh@qq.com','香港');
INSERT INTO Student VALUES(111,'范冰冰','女',29,'fbb@qq.com','大陆');
INSERT INTO Student VALUES(112,'容嬷嬷','女',39,'rmm@qq.com','大陆');
INSERT INTO Student VALUES(911,'本拉登','男',59,'bld@qq.com','阿富汗坎大哈');
INSERT INTO Student VALUES(1939,'希特勒','男',65,'xtl@qq.com','德国柏林');
INSERT INTO Student VALUES(9999,'黑山老妖','妖',99,'hsly@qq.com','黑山老林');
INSERT INTO Student VALUES(999,'东方不败','男',66,'dfbb@qq.com','黑木崖');
=====================================================================
步骤四:在tomcat里面配置数据源:
====================================================================
1.在tomcat的conf目录下找到context.xml,添加如下配置,请自行修改用户名和密码
<Resourcename="ds_mysql5.x"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/studentdb"
username="root"
password="admin"
initialSize="1"
maxActive="20"
maxIdle="10"
maxWait="10000"/>
2.将mysql驱动包mysql-connector-java-5.1.26-bin.jar拷贝到tomcat的lib目录==================================================================
步骤五:在核心配置文件springmvc-servlet.xml里面编写如下配置
======================== springmvc-servlet.xml=======================
<beans>
<bean id="resourceView"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix"value=".jsp"></property>
</bean>
<bean id="simpleUrlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/Login.php">userControl</prop>
<prop key="/quit.php">userControl</prop>
<prop key="/QueryStu.php">queryAllStuControl</prop>
<prop key="/AddControl.php">stuOptControl</prop>
<prop key="/DeleteControl.php">stuOptControl</prop>
<prop key="/QueryOne.php">stuOptControl</prop>
<prop key="/DoModify.php">stuOptControl</prop>
</props>
</property>
</bean>
<bean id="userControl" class="com.stu.controls.UserControl">
<property name="methodNameResolver"ref="springMethodNameResolver">
</property>
</bean>
<bean id="queryAllStuControl" class="com.stu.controls.QueryStuControl">
<property name="methodNameResolver"ref="springMethodNameResolver">
</property>
</bean>
<bean id="stuOptControl" class="com.stu.controls.StudentOptControl">
<property name="methodNameResolver"ref="springMethodNameResolver">
</property>
</bean>
<bean id="springMethodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
<prop key="/Login.php">login</prop>
<prop key="/quit.php">quit</prop>
<prop key="/QueryStu.php">queryAllStu</prop>
<prop key="/AddControl.php">doAdd</prop>
<prop key="/DeleteControl.php">doDelete</prop>
<prop key="/QueryOne.php">doQueryOne</prop>
<prop key="/DoModify.php">doModify</prop>
</props>
</property>
</bean>
</beans>
====================================================================
步骤六:其它代码不一一列出,只给出截图参考,需要的朋友请联系作者wx5040257@126.com :
==================================================================
步骤七: 启动tomcat,发布项目,在地址栏输入 http://localhost:8080/springmvczh01/ 进行测试,参考运行界面如下: