SpringMVC4
jar:原有Spring的jar再加上
Spring-context-support:支持UI模板,邮件服务,缓存cache
Spring-webmvc:对mvc的实现
基本步骤:
1.创建class实现Controllor接口
2.创建ModelAndView对象,向这个对象添加信息
3.ModelAndView.setViewName();
4.在WEB-INF下创建folder,folder放jsp文件
5.setViewName填/WEN-INF/....
6.注册Controller:src 下 springmvc.xml(任意)
7.xml添加bean的约束
<?
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:context
=
"http://www.springframework.org/schema/context"
xsi:schemaLocation
=
"
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"
>
8.注册Controllor:
<!-- 限制mvc处理的请求为.do,必须斜杠开头 -->
<
bean
id
=
"/my.do"
class
=
"handlers.MyController"
>
</
bean
>
9.注册中央调度器:web.xml中注册,它是一个servlet
<
servlet
>
<
servlet-name
>
mvc
</
servlet-name
>
<
servlet-class
>
org.springframework.web.servlet.DispatcherServlet
</
servlet-class
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>
mvc
</
servlet-name
>
<
url-pattern
>
*.do
</
url-pattern
>
</
servlet-mapping
>
不能配置/*
跳转到的JSP页面中用${message}可以显示Model.addObject()方法添加的数据
//${requestScope.message}也能输出
运行出FileNotFoundException:
Could not open ServletContext resource [/WEB-INF/mvc-servlet.xml]
因为默认到到WEB-INF下找servlet-name-servlet.xml配置文件;
所以把配置文件改名并且放到WEB-INF下
程序可以运行
问题:文件名和文件位置固定(只能放在WEB-INF下的servlet-name-servlet.xml),不好
解决:DispatcherServlet加载的SpringMVC配置文件,修改DispatcherServlret的属性(在父类中)
修改contextConfigLocation属性,不是在<context-param>(ServletContext)里修改而是在servlet的<init-param>。
<
init-param
>
<
param-name
>
contextConfigLocation
</
param-name
>
<
param-value
>
classpath:springmvc.xml
</
param-value
>
</
init-param
>
重新启动,成功。
问题:servlet是在
初次访问(访问的时候还要先初始化个servlet)才由容器创建,使响应速度变慢
解决 : <servlet>的load-on-startup标签:
<
load-on-startup
>
1
</
load-on-startup
> ---多个servlet的load-on-startup越小越优先,大于0的整数菜有意义
问题mv.setViewName();里面资源的地址太长
mv.setViewName有另一种写法 :视图解析器:相当于拼凑url
1.创建bean(不用id)内部视图解析器,有两个属性:前缀和后缀:
<
bean
class
=
"org.springframework.web.servlet.view.InternalResourceViewResolver"
>
<
property
name
=
"prefix"
value
=
"/WEB-INF/anyfolder/"
/>
<
property
name
=
"suffix"
value
=
".jsp"
/>
</
bean
>
直接运行程序,成功
在这里
mv
.setViewName(
"welcome"
);
welcome为逻辑视图名,拼接后为物理视图名