1. 程式人生 > >Spring MVC初學

Spring MVC初學

http .get msg comment 運行 視圖解析 javax public 請求

創建工程

打開IntelliJ IDEA 新建一個project,選擇spring MVC,然後點擊next

技術分享

給project隨便起一個名字,點擊finish

技術分享

創建完成的project目錄如下

技術分享

首先打開web/WEB-INF目錄下的web.xml文件,如下,把url-pattern的值改為/,用於攔截請求(url-pattern為 / ,說明攔截所有請求,網上有說配置為/*的,我這樣配置會出錯),並交由Spring MVC的後臺控制器來處理。這一項配置是必須的。

<?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_3_1.xsd"
         version="3.1">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

編寫Controller與jsp頁面

MVC框架有model、view、controller三部分組成。model一般為一些基本的Java Bean,view用於進行相應的頁面顯示,controller用於處理網站的請求。

在項目的src目錄創建一個包用於存放controller

技術分享

在新建的包中,創建一個HelloController類
添加以下代碼

@Controller
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public class HelloController {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String printHello(ModelMap model) {
        model.addAttribute("msg", "Spring MVC Hello World");
        model.addAttribute("name", "yuntao");
        return "hello";
    }
}

解釋下上邊代碼的意思

1.@Controller註解:采用註解的方式定義該類為處理請求的Controller類;
2.@RequestMapping解:用於定義一個請求映射,value為請求的url,method用以指定該請求類型,一般為get和post,代碼中要調用printHello方法,即可訪問 hello/hello
3.return “hello”:處理完該請求後返回的頁面,此請求返回 hello.jsp頁面。

接下來刪除web目錄下的index.jsp,在web/WEB-INF中創建一個views目錄,然後創建一個hello.jsp文件

技術分享

把下邊代碼貼入hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>${msg}</title>
</head>
<body>
<h1>${msg}</h1>
<span>${name}</span>
</body>
</html>

配置xxx-servlet.xml

完成上邊的步驟之後,在web.xml同級目錄下有個dispatcher-servlet.xml的配置文件,他的前綴dispatcher對應上邊web.xml中配置的servlet(名稱可修改),節選web.xml如下

<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>

打開dispatcher-servlet.xml是空的,我們需要添加一些配置
首先要指定下controller所在的包,這樣spring mvc會掃描其中的註解

<context:component-scan base-package="com.yuntao.hello"/>
<!--ViewResolver 視圖解析器-->
<!--用於支持Servlet、JSP視圖解析-->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
</bean>

還需要配置下邊兩項,靜態資源訪問,開啟註解。

<!-- 靜態資源(js、image等)的訪問 -->
<mvc:default-servlet-handler/>

<!-- 開啟註解 -->
<mvc:annotation-driven/>

最後配置完成如下

<?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.yuntao.hello"/>

    <!-- 靜態資源(js、image等)的訪問 -->
    <mvc:default-servlet-handler/>

    <!-- 開啟註解 -->
    <mvc:annotation-driven/>

    <!--ViewResolver 視圖解析器-->
    <!--用於支持Servlet、JSP視圖解析-->
    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

配置Tomcat

上述代碼寫好了之後,還需要一個web服務,這裏使用tomcat8.去http://tomcat.apache.org/下載一個適合自己系統的tomcat,解壓。終端執行./startup.sh,windows執行startup.bat

技術分享

然後打開IDEA,選擇run->edit configurations,如圖

技術分享

配置tomcat所在目錄,如下

技術分享

技術分享

然後點擊run,運行

技術分享

打開瀏覽器訪問http://localhost:8080/hello/hello

技術分享

問題

NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config

使用spring mvc進行開發,使用tomcat容器,通過url映射尋找view的時候,會報錯NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config,如果隨便去找個jstl包過來放入web-inf/lib會報錯,正確的下載地址在這裏,下載jakarta-taglibs-standard-1.1.2.zip這個包,解壓縮後將standard和jstl兩個包放入lib下即可

No mapping found for HTTP request with URI [/] in DispatcherServlet with name

 <servlet-mapping>
     <servlet-name>dispatcher</servlet-name>
     <url-pattern>/</url-pattern>
 </servlet-mapping>

網上有人說url-pattern寫的是/*,一開始寫成這樣報這個錯誤

其次沒有開啟靜態資源訪問,也會報錯,添加

<!-- 靜態資源(js、image等)的訪問 -->
2.<mvc:default-servlet-handler/>

Spring MVC初學