【spring】spring MVC入门

【spring】spring MVC入门

spring mvc框架是一个web服务端开发框架
基于spring mvc框架进行开发,能够让我们脱离对底层代码实现的开发
让我们更加的专注于业务逻辑代码的开发,大大提高web服务开发的效率

spring mvc总体上分为三块:
controller模块:这个模块主要是获取用户请求,进行判断处理,然后返回数据
model模块:业务逻辑模块,包括业务数据的存储等操作和业务逻辑的操作
view模块:视图模块,主要是完成页面设计

interceptor模块:拦截器模块,这个模块可以进行对请求与响应的简单处理

DispatcherServlet
用户发送url请求,都会由 dispatcherServlet 进行处理,由它来进行选择相对应的 controller 进行处理
在servlet-mapping 中定义了,所有的.do结尾的请求均会由 dispatcherServlet 处理

// 配置文件 web.xml 
<servlet>
      <servlet-name >dispatcherServlet</ servlet-name>
      <servlet-class >
            org.springframework.web.servlet.DispatcherServlet
      </servlet-class >
      <init-param >
             <param-name> contextConfigLocation</param-name >
             <param-value> /WEB-INF/mymvc.xml</param-value >
      </init-param >
      <load-on-startup >1</ load-on-startup>
  </servlet >
  <servlet-mapping >
      <servlet-name >dispatcherServlet</ servlet-name>
      <url-pattern >*.do</ url-pattern>
  </servlet-mapping >

在spring mvc中,需要实现 controller 接口,因为 DispatcherServlet 会选择合适的controller来进行请求的处理
controller 接收到请求后,会调用handleRequest 方法进行处理,因此,我们需要实现该方法

public class HelloController implements Controller{
   
    private String view;

    @Override
    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1)
            throws Exception {
        String hi = arg0.getParameter("test");
                // 返回一个 ModelAndView 对象,该对象包含了view页面路径信息和model数据等
                // 这个 ModelAndView 对象的解析将会由 spring mvc 中viewResolver进行解析处理
        return new ModelAndView(view, "test" , hi);
    }
   
    public void setView(String view) {
        this.view = view;
    }
}

要实现web服务,则还需要在 mymvc.xml 配置文件中定义好需要使用的bean

spring mvc 有相关的视图解析类
例子中用的解析类为viewResolver ,其对应是spring的 InternalResourceViewResolver 类
解析结果为:是在 /views/ 目录下的后缀名为 .jsp 的jsp文件
解析完成后会由 InternalResourceViewResolver  进行页面的渲染

<bean id= "viewResolver"
             class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
             <property name="prefix" value="/views/"></ property>
             <property name="suffix" value=".jsp"></ property>
            
       </bean>
<!-- 拦截器,能够在controller等执行前后进行一些操作
      本例中,主要是在controller执行前后进行日志的打印 -->
       <bean id= "loggingInterceptor"
             class="com.ming.sns.spring.LoggingInterceptor" >
       </bean>
<!-- dispatcherServlet是根据handlerMapping实例进行判断选择合适的controller
      本例中使用的 handlerMapping对象为spring中的ControllerClassNameHandlerMapping类
      该类的使用需要controller类的定义符合命名规范,如hello*的请求会寻找helloController进行处理 -->
       <bean id= "controllerClassNameHandlerMapping"
             class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
       <!-- 在handlerMapping中引用拦截器,则实现拦截处理的功能 -->
             <property name="interceptors" >
                   <list>
                         <ref bean="loggingInterceptor" />
                   </list>
             </property>        
       </bean>
      <!-- 定义controller处理bean -->
       <bean name="helloController"
             class="com.ming.sns.spring.HelloController" >
             <property name="view" value="hello"></ property>
            
       </bean>

// 拦截器的实现类
public class LoggingInterceptor extends HandlerInterceptorAdapter{
    private Logger logger = Logger.getLogger( this.getClass().getName());
   
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler) throws Exception {
        // TODO Auto-generated method stub
        logger.info(handler.getClass().getName() + " job start...");
        return true ;
    }
   
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler, ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub
        logger.info(handler.getClass().getName() + " job over...");
        //super.postHandle(request, response, handler, modelAndView);
    }
   
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
            Object handler, Exception ex) throws Exception {
        // TODO Auto-generated method stub
        logger.info(handler.getClass().getName() + " view render over...");
        //super.afterCompletion(request, response, handler, ex);
    }
}
http://localhost:8080/myspring/hello.do?test=helloworld
输入地址后页面会显示 helloworld

控制台会输出
2012-10-06 14:44:31,087 INFO [com.ming.sns.spring.LoggingInterceptor] - com.ming.sns.spring.HelloController job start...
2012-10-06 14:44:31,087 INFO [com.ming.sns.spring.LoggingInterceptor] - com.ming.sns.spring.HelloController job over...
2012-10-06 14:44:31,087 INFO [com.ming.sns.spring.LoggingInterceptor] - com.ming.sns.spring.HelloController view render over...


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值