SpringMVC環境搭建

1.通過配置的形式搭建(瞭解)
1.1創建項目並導包
  • web項目, 包:
  • spring相關
  • springmvc相關: spring-webmvc.jar
1.2編寫後端控制器
public class DemoController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
        // 準備要返回的結果對象
        // Model代表request作用域
        // View代表要跳轉的頁面
        ModelAndView mv = new ModelAndView();
        // 向作用域存放數據: demo
        mv.addObject("demo", "Hello SpringMVC!");
        // 跳轉到一個頁面: index.jsp
        mv.setViewName("index.jsp");
        // 返回結果
        return mv;
    }
}
1.3web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <!--不能配/*, 要配置/, 放行jsp-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
1.4 編寫springMVC配置文件
默認有要求, 必須放在WEB-INF目錄下, 名稱必須叫<servlet-name>-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置後端控制器 - 程序員提供的類-->
    <bean name="/demo, /bjsxt" class="com.bjsxt.controller.DemoController" />
    <!--處理器適配器: 幫助前端控制器去調用後端控制器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
    <!--處理器映射器: 幫助後端控制器映射客戶的訪問路徑, 類似於url-pattern-->
    <!--使用後端控制器的名稱作爲訪問的路徑-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
    <!--視圖解析器: 定位顯示頁面的-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
</beans>
1.5 訪問流程

       當客戶端發起請求後, 首先, 被前端控制器(DispatcherServlet)接收, 前端控制器會先解析訪問路徑, 接着, 通過處理器映射器進行比對, 定位到需要調用的後端控制器, 接下來, 前端控制器會通過處理器適配器去調用後端控制器中的handleRequest方法, handleRequest方法會返回ModelAndView對象, 由視圖解析器解析要響應的頁面, 將頁面響應到客戶端, 到此爲止, 用戶就看到訪問的頁面了.

1.6 存在的問題
a) 麻煩, 還不如servlet簡單;
b) 後端控制器存在嚴重的問題, 必須實現接口;
c) springMVC配置文件的問題
2.通過註解的形式搭建(掌握)
2.1創建項目並導包(跟之前一樣)
2.2編寫後端控制器(不用實現任何接口)
  • 控制器方法需要遵循特定的簽名規範:
  • public * 方法名(…)
    一般情況下, 方法簽名如下:public String 方法名(…). 其中返回類型String, 表示要跳轉的頁面, 相當於ModelAndView.setViewName(string).
@Controller
public class DemoController {

    @RequestMapping({"/demo1", "/bjsxt"})
    public String demo1() {
        System.out.println("DemoController.demo1");
        return "index.jsp";
    }
}
2.3配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
2.4配置SpringMVC配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans.xsd
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context.xsd
                    http://www.springframework.org/schema/mvc
                    http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--註解掃描-->
    <context:component-scan base-package="com.bjsxt.controller" />
    <!--註解驅動-->
    <mvc:annotation-driven />
</beans>
2.5視圖解析器和靜態資源映射
<!--配置自定義視圖解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>
<!--靜態資源映射-->
<mvc:resources mapping="/static/**" location="/static/" />
3.作用域
3.1request作用域
@RequestMapping("/test")
public String demo2(HttpServletRequest req) {
    System.out.println("DemoController.demo2");
    req.setAttribute("demo", "HttpRequest");
    return "demo";
}
@RequestMapping("/test")
public String demo2(Model model) {
    System.out.println("DemoController.demo2");
    model.addAttribute("demo", "Model");
    return "demo";
}
@RequestMapping("/test")
public String demo2(Map<String, Object> map) {
    System.out.println("DemoController.demo2");
    map.put("demo", "Map");
    return "demo";
}
session作用域
@RequestMapping("/test")
public String demo2(HttpServletRequest req) {
    System.out.println("DemoController.demo2");
    req.getSession().setAttribute("demo", "request --> session");
    return "demo";
}
@RequestMapping("/test")
public String demo2(HttpSession session) {
    System.out.println("DemoController.demo2");
    session.setAttribute("demo", "HttpSession");
    return "demo";
}
application作用域(不能直接傳遞ServletContext作爲參數)
@RequestMapping("/test")
public String demo2(HttpServletRequest req) {
    System.out.println("DemoController.demo2");
    req.getServletContext().setAttribute("demo", "request --> application");
    return "demo";
}
@RequestMapping("/test")
public String demo2(HttpSession session) {
    System.out.println("DemoController.demo2");
    session.getServletContext().setAttribute("demo", "session --> application");
    return "demo";
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章