2.1 视图技术简介
通常像spring mvc 这样的web框架都会有相应的定位视图技术,spring提供了视图解析器来解析ModelAndView模型数据到特定的视图上,spring提供了ViewResolver和View两个特别重要的接口,ViewResolver提供了从视图名称到实际视图的映射,View处理请求的准备的工作,并将该请求提交给某种具体的视图解析器。
2.2 开发环境
开发工具:myeclipse8.6.1
数据库:mysql5.5.23
服务器: tomcat6.0.37
框架版本: spring3.2.2
2.3 案例开发步骤
步骤一:在myeclipse8.6中新建web工程springmvc02,拷贝如下包到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>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:configs/mymvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
================================================================
知识讲解:<init-param>是用来配置springmvc核心配置文件的位置(如果我们不想让它在默认路径下的话),这时候,它就可以放到项目的src目录下,如图所示:
这时候就不用放到web-inf路径下了。那么,有同学会问了:<param-name>contextConfigLocation</param-name>这个里面的contextConfigLocation可以不可以随便乱写,当然不可以啦。前面提到过DispatcherServlet还与spring 的IOC容器完全集成在一起,从而可以更好地使用spring 的其它功能。这时就用到spring的依赖注入功能:根据contextConfigLocation把路径注入到DispatcherServlet中以供解析。我们可以从它的源码里面找到依赖注入的蛛丝马迹,如下图所示:
DispatcherServlet继承自FrameworkServlet,继续打开FrameworkServlet的源码,可以找到真相:
在上面还可以找到定义【private String contextConfigLocation;】,这是不是我们spring里面学的典型的依赖注入?!
对字符乱码处理的讲解:<filter>到<filter-mapping>的这一段都是为了处理post请求的中文乱码问题的。对于get请求,建议大家用字符串转码的方式,因为这种情况不是很多,
当然我们也可以编写过滤器的方式集中解决。字符串转码的方式:
userName=new String(userName.getBytes("iso-8859-1"),"utf-8");
步骤三:建立Login.jsp,如下所示:
=========================Login.jsp===================================
<body>
<divid="show">
<formaction="login.do"method="post">
<tableborder="1px"cellpadding="0">
<tr><td>请输入用户名:</td>
<td><inputtype="text"name="userName"/></td></tr>
<tr><td>请输入密码:</td>
<td><inputtype="password"name="passWord"/></td></tr>
<tr><tdcolspan="2">
<inputtype="submit"value="提交"/></td></tr>
</table>
</form>
</div>
</body>
=====================================================================
步骤四:在核心配置文件mymvc.xml里面完善如下配置
================================mymvc.xml==========================
<beans>
<beanid="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<propertyname="mappings">
<props>
<propkey="/login.do">loginControl</prop>
</props>
</property>
</bean>
<bean id="resourceView" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix"value="/pages/"></property>
<propertyname="suffix"value=".jsp"></property>
</bean>
<bean id="loginControl" class="com.wx.controls.LoginControl"></bean>
</beans>
====================================================================
知识讲解:【<beanid="resourceView">】这段是配置一个视图解析器,有上面好处呢?跟第一案例相比,它提供了一个视图定位的功能。例如我们控制器里面返回的是”index”,那么它能自动定位到/pages/index.jsp,也就是说自动加上了前缀和后缀。Prefix表示前缀,suffix表示后缀。
步骤五:在com.wx.controls包下面编写控制器LoginControl.java,如下:
==========================LoginControl.java==========================
public class LoginControlimplements Controller {
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponseresponse) throws Exception {
String userName=request.getParameter("userName");
ModelAndView mav = new ModelAndView("ShowUser");
mav.addObject("userStr", userName);
return mav;
}
}
==================================================================
步骤六:在webroot目录下建立目录pages,然后在里面建立ShowUser.jsp
================================ShowUser.jsp=======================
<body>
<h1>欢迎您:${requestScope.userStr}</h1>
</body>
==================================================================
步骤七: 启动tomcat,发布项目,在地址栏输入 http://localhost:8080/springmvc02/Login.jsp 进行测试,得到结果:
联系作者