【spring】spring MVC入门

来源:互联网 发布:淘宝二手相机靠谱吗 编辑:程序博客网 时间:2024/06/02 08:14
【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...


原创粉丝点击