你的位置:首页 > ASP.net教程

[ASP.net教程]spring的一个小例子(二)


        接上篇:http://www.cnblogs.com/xuejupo/p/5236448.html

        首先应该明白,一个web项目,web.

        然后下面来分析上篇博客中出现的web.

<??> <web-app ="http://java.sun.com/ ="http://www.w3.org/2001/   xsi:schemaLocation="http://java.sun.com/   version="2.5">   <!-- 区分项目名称,防止默认重名 -->    <context-param>      <param-name>webAppRootKey</param-name>      <param-value>maven.cainiao.root</param-value>    </context-param>      <!-- Spring的log4j监听器 -->    <listener>      <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>    </listener>      <!-- 字符集 过滤器 -->    <filter>      <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>      <url-pattern>/*</url-pattern>    </filter-mapping>      <!-- Spring view分发器 -->    <servlet>      <servlet-name>dispatcher_cainiao</servlet-name>      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>      <init-param>        <param-name>contextConfigLocation</param-name>        <param-value>/WEB-INF/dispatcher_cainiao.</param-value>      </init-param>      <load-on-startup>1</load-on-startup>    </servlet>  <servlet-mapping>      <servlet-name>dispatcher_cainiao</servlet-name>      <url-pattern>/</url-pattern>    </servlet-mapping>  </web-app> 

         首先是context-param参数,说context-param之前,应该有个概念:

         web.

         context-param属性在

           举个例子,我的web服务器是jboss,在context-param中配置参数

<context-param>      <param-name>webAppRootKey</param-name>      <param-value>maven.cainiao.root</param-value>    </context-param>

后,jboss在加载这个项目的时候这个项目的别名就是maven.cainiao.root。这时候,如果在jboss中有别的项目也叫这个名字,那么jboss就会报错。

      再比如说,如果要设定日志监听,就要在context-param中配置log4jConfigLocation参数,log监听器Log4jConfigListener会在加载的时候自动监听log4jConfigLocation参数对应的值下的文件;再比如,ContextLoaderListener监听器负责将contextConfigLocation参数路径下的

      当然,也可以自己做监听或者过滤器,然后在web.

      然后就是org.springframework.web.util.Log4jConfigListener,这是一个spring的log4j监听器。实际上我们不实用这个监听也是可以的,但是使用它有几个好处:

      首先如果不用他,那么log的配置文件log4j.properties必须写在classpath下,而用它的话,你就可以很方便得管理log4j.properties的位置了。

      其次,这个监听中有个方法会每隔60秒扫描log4j配置文件,这样修改log4j配置文件就可以不用重启服务了。

      再然后,字符过滤器CharacterEncodingFilter,可以看到filter-mapping中的url-pattern是/*,他负责将/*(也就是全部路径)下的所有请求,强制转换为UTF-8编码的形式,这样如果在编写页面的时候也用utf-8

编码,就可以防止乱码的产生了。

      最后就是跟我们打交道最多的servlet了。首先看servlet-mapping,这里有个url-pattern,这里匹配url里输入的,比如说上面的web.

      再来看分发器使用的

<??> <beans ="http://www.springframework.org/schema/beans"     ="http://www.springframework.org/schema/aop"     ="http://www.springframework.org/schema/context"     ="http://www.springframework.org/schema/mvc"     ="http://www.springframework.org/schema/tx"     ="http://www.w3.org/2001/     xsi:schemaLocation="http://www.springframework.org/schema/aop      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd      http://www.springframework.org/schema/beans      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd      http://www.springframework.org/schema/context      http://www.springframework.org/schema/context/spring-context-3.0.xsd      http://www.springframework.org/schema/mvc      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd      http://www.springframework.org/schema/tx      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">      <mvc:annotation-driven />   <!-- <mvc:default-servlet-handler/> -->  <context:component-scan base-package="controller" />      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">     <property name="prefix" value="/views/" />     <property name="suffix" value=".jsp" />     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />   </bean> </beans> 

          首先,mvc:annotation-driven是一种简写模式,表示自动加载DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。context:component-scan是spring中的自动扫描机制,负责扫描包以下所有类中包含的所有spring注解。

然后,就是注册一个bean了:InternalResourceViewResolver,视图解析类,就是将servlet中的返回解析到prefix对应参数文件夹下的suffix对应的后缀文件。

       他需要配合控制类使用:

package controller;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.cainiaojava.beans.User;/** * DispatcherController:* @author xuejupo jpxue@travelsky.com * * create in 2016-3-1 下午3:35:13 *  */@Controller@RequestMapping("demo")public class DispatcherController {  @RequestMapping(method=RequestMethod.GET)    public String printWelcome(ModelMap model) {     User user = new User();    user.setInfo("哈哈,我是唯一的用户!");    user.setUserName("我是老大!");    user.setPasswd("不告诉你!");    model.addAttribute("str0121", "我去,成功了呀!!!");     model.addAttribute("info","当前用户信息为:");    model.addAttribute("user", user);    System.out.println("index.jsp");    return "index";  } }

@Controller表示这是一个控制器,@RequestMapping("demo")表示他接收后缀为demo的url(比如http://localhost:8080/test/demo),@RequestMapping(method=RequestMethod.GET)表示请求方式是get的话进这个方法,ModelMap是spring内置的ui控制类,可以将值传到前端。 return "index",和前边说的suffix参数的值,合组成index.jsp,所以这个servlet会将请求返回到页面index.jsp中。

    总结一下:

     首先加载web.

       当我们请求http://localhost:8080/test/demo的时候,首先根据http://localhost:8080/test找到这个项目,然后根据/demo,在servlet-mapping中的url-pattern中查找对应的项,找到一个dispatcher_cainiao,然后根据注解@RequestMapping("demo")找到文件DispatcherController,然后进入相应的方法处理,最后返回的时候根据return值index和配置文件中的InternalResourceViewResolver视图管理,找到jsp文件/views/index.jsp,最后就是渲染jsp文件了。

      ps:

       首先,web项目的唯一入口是web.

     欢迎转载,但请标明出处:http://www.cnblogs.com/xuejupo/p/5252009.html,  也欢迎跟我讨论。