SpringMVC基础知识

SpringMVC是一个表示层框架,搭建真实环境

SpringMVC的使用方法:注解和配置。(注解为主

SpringMVC是Spring3.x的一个模块,其实就是用MVC提供的表示层框架。

SpringMVC对视图组件没有必然要求,不一定要使用jsp,struts1,struts2规定了只能用jsp。

SpringMVC的映射器对象,相当于struts1 的ModuleConfig

SpringMVC的转向:可以自动的封装结果数据。相当于struts1的ActionForward.

 

SpringMVC优点:

使用简单,学习成本低

容易写出性能高的程序

灵活性好

结构清晰

 

编码效率:jsp+servlet—> struts1à  SpringMVCàstruts2(越来越高)

执行效率:jsp+servlet—> struts1à  SpringMVCàstruts2(越来越低)

 

Struts1:编码效率低,执行效率高,配置量大,结构清晰

Struts2:编码效率高,运行效率低,需要维护ognl

 

表示层框架:接收用户请求,封装请求数据,将结果转发到对应的jsp页面。

 

SpringMVC的(开发)环境搭建:

1、      创建web项目

2、      导入jar包(dist下的所有jar包)基本的jar:org.springframework.aop-3.0.5.RELEASE.jar :与Aop 编程相关的包

org.springframework.beans-3.0.5.RELEASE.jar :提供了简捷操作bean 的接口

org.springframework.context-3.0.5.RELEASE.jar :构建在beans 包基础上,用来处理资源文件及国际化。

org.springframework.core-3.0.5.RELEASE.jar :spring 核心包

org.springframework.web-3.0.5.RELEASE.jar :web 核心包,提供了web 层接口

org.springframework.web.servlet-3.0.5.RELEASE.jar :web 层的一个具体实现包,DispatcherServlet也位于此包中。

建议在搭建环境中导入spring3.0 的所有jar 包(所有jar 包位于dist 目录下)。

 

3、      编写配置文件,SpringMVC的中央控制器DispatcherServlet,和struts1配置ActionServlet一样。在web.xml中配置

<servlet>

//spmvc命名和springMVC的主配置文件名相关

< servlet-name>spmvc</servlet-name>

<servlet-class>

org.springframework.web.servlet.DispatcherServlet

</servlet-class>

<load-on-startup>1</load-on-startup>

<servlet>

 

<servlet-mapping>

< servlet-name>spmvc</servlet-name>

< url-pattern >*.do</url-pattern>

</servlet-mapping>

 

4、      配置SpringMVC的主配置文件:spmvc-servlet.xml servlet-name 作为前缀,文件放在WEB-INF下

从springmvc到struts2使用的tomcat版本至少是6.0及以上。

spmvc-servlet.xm文件中的配置信息

<beans>

     <bean id = "simpleUrlHandlerMapping"

      class ="org.springframework.web.servlet.

handler. SimpleUrlHandlerMapping">

         <property name ="mappings">

             <props>

               <prop key ="/login.do">loginControl</prop>

             </props>

         </property>

     </bean>

     <bean id ="loginControl" 

 class ="com.asm.spmvclogin"/>

    

     <bean id="viewResolver"  class="org.springframework.web.servlet.view.

InternalResourceViewResolver">           

     <property name="prefix" value="/WEB-INF/page/" />           

     <property name="suffix" value=".jsp" />

     </bean> 

    

 </beans>

 

SpringMVC的流程:

1、Tomcat一启动,读取web.xml,

2、根据web.xml的配置创建DispatchServlet对象,

3、执行该Servlet对象执行init()方法,读取整个springmvc的配置文件(spmvc-servlet.xml)。

4、一读取主配置文件spmvc-servlet.xml创建WebFactory(web 工厂),

5、在web工厂中创建以下几个对象:

创建分派器(也叫映射器)对象SimpleUrlHandlerMapping:将请求交给对应的Action,分派器有个属性 mappings,是一个props,key和value都是String类型

创建处理请求的Action对象

创建视图定位器对象InternalResourceViewResolver:给转向信息加上前缀和后缀

 

通过配置方式登录示例:

1、发现*.do请求,交给DispatcherServlet处理

2、截取请求路径,截取结果包含.do(/login.do)

3、到web工厂中找到分派器,把请求交给分派器

4、分派器到分派器对象的mappings属性的props配置中找key(/login.do)对应的value.(loginControl)

5、根据value(loginControl)取出id标识为loginControl的Action对象。(实现了Controller的接口的类标识)

6、该Action类实现了handleRequest()方法(handleRequest是接口中的方法)

handleRequest()方法中:

从request中拿到请求参数,创建业务层对象,调用业务对象的方法。

//封装转向信息

ModelAndView mav2= new ModelAndView("failure");

mav2.addObject("username", username); //封装结果信息

mav2.addObject("password", password);

return mav2;

ModelAndView:封装转向信息,也封装结果数据。

ModelAndView中有个map ,

mavl.addObject(“username”,username);// key是String类型,value是Object类型。

7、DispatcherServlet的作用:

1、      从ModelAndView中拿出存储的数据,放到request内置对象中(key作为属性名,value作为属性值)

2、      从ModelAndView中拿到转向字符串,找到视图定位器,加上前缀和后缀,找到确定的转向页面

8、结果显示:

在加上前缀和后缀指定位置的failure.jsp页面中:使用EL表达式直接输出登录失败的用户名和密码:${username}, ${password}

使用注解SpringMVC(annocation)完成登录:

在web.xml中的配置

<servlet>

//命名和主配置文件名相关,主配置文件名为:spring-servlet.xml

< 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>

</servlet-mapping>

//配置监听器,在该监听器中创建BeanFactory

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

<!-- 指定Spring ,Bean的配置文件所在目录(业务层对象在这个bean中通过IOC创建)。默认配置在WEB-INF目录下 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/applicationContext.xml

</param-value>

</context-param>

</web-app>

 

Tomcat一启动:

1、      先创建Listener监听器对象

2、      一创建监听器对象对application的状态监听,创建Application对象时,调用监听器的contextInitialized()方法

3、      在contextInitialized()方法中通过application内置对象拿到初始化参数信息创建BeanFactory(BeanFactory:处理业务)

4、      创建DispatcherServlet对象,调用init()方法,读取springmvc主配置文件信息 spring-servlet.xml

5、      根据springmvc的主配置文件spring-servlet.xml

创建webFactory(web 工厂:处理请求)

6、    创建视图定位器对象;

创建分派器对象(分派器也叫映射器)

分派器自动扫描项目,到指定的包下找Action类(Action类有被@Controller注解标识),自动创建Action对象。

 

7、   在Action类中找@Resource(name=”loginService”):一创建Action对象,就自动到BeanFactory中找到bean中id为loginService的对象,自动注入业务层对象。

 

Spring-servlet.xml(springMVC主配置文件中的信息)

<!-- 启用spring mvc 注解 -->

<context:annotation-config />

 

<!-- 设置使用注解的类所在的jar包 -->

<context:component-scan base-package= "com.asm"> </context:component-scan>

 

<!-- 完成请求和注解POJO的映射 -->

<bean class="org.springframework.web.servlet.mvc.

annotation.AnnotationMethodHandlerAdapter" />

 

<!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->

<bean class="org.springframework.web.servlet.view.

InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/page/" />

<property name="suffix" value=".jsp" />

</bean>

 

 

@Controller:注解标识,标识这个类就是Action(用在类上)

@RequestMapping("/login.do")  // 请求url地址映射,类似Struts的action-mapping(用在方法上)

 

@Resource(name=”loginService”):一创建Action对象,就自动到BeanFactory中找到bean中id为loginService对象,自动注入业务层对象。(用在属性上)

 

@RequestParam(value="username")String name:一般用于当表单的请求参数名和方法中形参不一致时,将指定的请求参数赋值给方法中的形参

可以简写为:@RequestParam("username")(用在参数上)

 

SpringMVC注解方式登录示例:

1、    *.do请求,交给DispatcherServlet处理

2、    截取请求路径,/login.do

3、    到web工厂中找到分派器,把请求交给分派器

4、   分派器找到Action类(@Controller标识的类),根据注解@requestMapping找到对应的方法

5、   找到对应方法后,收集表单数据:

如果方法的形参名字和表单中参数名一样,会自动设定

如果不一样就通过注解设定@RequestParam(value="username")String name//把表单中参数名为username的参数值设到此方法中的name参数中。

需要传送数据的时候,在方法中也要写上request参数,就会自动注入request内置对象

然后再 调用request.setAttribute();方法,设定属性名和属性值

6、    返回字符串,success

到WebFactory中拿到视图解析器,加上前缀和后缀,完成转向。

7、    在jsp页面中通过EL表达式输出存在request中的属性值

${username}

SpringMVC对Action类没有要求,通过注解将请求映射到方法上面。返回值可以为String,也可以为ModelAndView.不能无返回值。

 

知识点解析:

表单中获取的参数类型都是String类型

当前方法中的形参age为int类型,SpringMVC完成自动转换。

return new ModelAndView(“success”);//默认为转发,需要用到视图解析器加上前缀和后缀

如果需要重定向(不需要使用视图解析器):

return new ModelAndView(new  RedirectView (“./index.jsp”));// 重定向的第一种方法

return new ModelAndView(“redirect: ../index.jsp”));//重定向的第二种方法

 

引入ActionForm User收集表单数据

表单bean,不需要继承任何的类,和普通的bean一样属性私有构造方法公有。

pubic String testLogin3(User user){}

1、创建User对象

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwffj.html