SpringMVC第一天

2017-07-20  本文已影响0人  原来蜗牛不是牛

介绍一下MVC

  1. MVC就是一个设计模式,最简单的web界面开发,我们直接写一个jsp页面就完事了,但是现在将web端分成了三层,全名是Model View Controller,是模型(model)—视图(view)—控制器(controller)的缩写,目的是为了系统的框架,分层更加清晰,可扩展性更强,降低系统的耦合度。
    MVC既然是一个设计模式,所以它既可以适用于C/S应用也可以适用于B/S应用,下面这张图介绍了在B/S模式下的应用
    MVC
    MVC的执行步骤:

MVC各部分的作用:

什么是SpringMVC

在Spring框架中的位置
![]{{1)49V(VOTG~`7YTFFN)T.png](https://img.haomeiwen.com/i3905877/4a4bad044b17fb74.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
SpringMVC是Spring框架的一个模块,我们可以从Spring的整体结构中看出来,是属于表现层的框架,是基于MVC的WEB框架

SpringMVC工作原理图

工作原理图

中央控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU。
处理器映射器(HandlerMapping):根据URL去查找处理器
处理器(Handler):(需要程序员去写代码处理逻辑的)
处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器,类比笔记本的适配器(适配器模式的应用)
视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对应的页面

开发步骤方式一(根据工作原理图开发,基于配置文件)

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!-- 配置spring自带的过滤器 -->
  <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>
  <!-- 1.配置中央控制器 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>
</web-app>
<!-- 2.配置处理器映射器,按照bean的名称来查找 -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

通过action对象的name属性来查找

<!-- 3.配置处理器适配器 -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" ></bean>
<!-- 4.配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" ></bean>
<!-- 5.配置Action,按名称查找 -->
    <bean name="/test.action" class="com.chenx.action.TestAction" ></bean>
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class TestAction implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("index.jsp");
        return mav;
    }
}

开发步骤方式二(基于配置文件)

<!-- 2.配置适配器映射器 -->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
        <property name="mappings">
            <props>
                <prop key="/test.action">testAction</prop>
            </props>
        </property>
    </bean>
<!-- 3.配置适配器控制器 -->
    <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" ></bean>
<!-- 5.创建action对象,通过id查找 -->
    <bean id="testAction" class="com.chenx.action.TestAction" ></bean>
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.HttpRequestHandler;
public class TestAction implements HttpRequestHandler {

    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.getRequestDispatcher("index.jsp").forward(request, response);
    }
}

开发步骤方式三(基于注解)--推荐

<!-- 2.配置适配器映射器  3.配置适配器控制器-->
    <mvc:annotation-driven></mvc:annotation-driven>
<!-- 4.配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" ></bean>
<!-- 5.添加注解扫描 -->
    <context:component-scan base-package="com.chenx.action"></context:component-scan>
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.chenx.model.User;
@Controller
/*@RequestMapping("/test")*/
public class TestAction {
    
    @RequestMapping("/test.action")
    protected ModelAndView testA(HttpServletRequest request,HttpServletResponse response){
        ModelAndView mav = new ModelAndView();
        String uname = request.getParameter("username");
        String upwd = request.getParameter("pwd");
        System.out.println(uname+"\t"+upwd);
        List<User> users = new ArrayList<>();
        User user1 = new User("陈枭", "aaaaaaaaa", 34);
        User user2 = new User("陈其", "bbbbbbbb", 45);
        User user3 = new User("王维虹", "ccccccc", 13);
        User user4 = new User("徐俊", "ddddddddd", 35);
        users.add(user1);
        users.add(user2);
        users.add(user3);
        users.add(user4);
        mav.addObject("users", users);
        mav.setViewName("show.jsp");
        return mav;
    }
}

工作中路径名这些定义好就不要改,因为是提供给其他同事的接口,牵一发动全身

<body>
<div>
    <form action="test.action" method="post">
        <div>用户名:<input type="text" name="username" /></div>
        <div> 密码:<input type="password" name="pwd" /></div>
        <div><input type="submit" value="提交"></div>
    </form>
    </div>
</body>

show.jsp(maven默认创建servlet的版本为2.3,记得开起使用EL表达式)

<body>
    <div>
        <table>
            <thead>
                <tr>
                    <th>姓名</th>
                    <th>密码</th>
                    <th>年龄</th>
                </tr>

            </thead>
            <tbody>
            <c:forEach items="${users }" var="u">
                <tr>
                    <td>${u.name }</td>
                    <td>${u.pwd }</td>
                    <td>${u.age }</td>
                </tr>
            </c:forEach>
            </tbody>
        </table>
    </div>
</body>

总结

开发思路:

  1. 中央控制器(拦截器)
  2. 处理器映射器(找action)
  3. 处理器适配器(执行action)
  4. 视图解析器
  5. 开发action
  6. 开发View(JSP)
  7. 开发Model和数据库交互
上一篇下一篇

猜你喜欢

热点阅读