本文尤爲枯燥,請同步觀看:【SpringMVC】項目具體請求流程
目錄
1.概念
2.搭建一個簡單的javaweb項目
1).新建一個動態web項目
2).導入springMVC所需要的jar包
3).配置DispatcherServlet
3.5).這裏插入一點內容:
4).配置處理器適配器SimpleControllerHandlerAdapter
5).編寫處理器Handler
6).配置處理器handler(即配置自己新建的處理器的類)
7).配置處理器映射器BeanNameUrlHandlerMapping
8).編寫jsp視圖View
9).配置視圖View解析器
10).運行項目
11).可能會遇到的bug及解決之道
1.概念
什麼是MVC?
MVC 模式代表 Model-View-Controller(模型-視圖-控制器) 模式。這種模式用於應用程序的分層開發。
2.搭建一個簡單的javaweb項目
1).新建一個動態web項目
(以本項目爲例)整個項目下來,主要有這四個文件:
①編寫處理器文件LoginAction.java
②web配置文件web.xml
③配置處理器、適配器、映射器等配置信息spring-servlet.xml
④視圖View文件helloppp.jsp
2).導入springMVC所需要的jar包
可以右擊src文件夾,構建路徑,在“庫”中添加外部jar引用這些包;
也可以直接複製這些jar包,粘貼在WEB-INF的lib文件夾下
3).配置DispatcherServlet
在web.xml文件下配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>mvcdemo</display-name>
<!-- 初始化servlet,用於響應客戶端請求 -->
<servlet>
<!-- 命名 -->
<servlet-name>mvcfy</servlet-name>
<!-- 配置DispatcherServlet -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 初始化servlet某些值 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value><!-- 用於指定spring-servlet.xml配置文件路徑 -->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- servlet映射 -->
<servlet-mapping>
<!-- 因爲是映射,所以要映射上面servlet初始化時的name -->
<servlet-name>mvcfy</servlet-name><!-- 與上面一致 -->
<url-pattern>*.action</url-pattern><!-- 與路徑有關 -->
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.5).這裏插入一點內容:
spring-servlet.xml文件(已包含4、6、7、9步驟的配置信息):
<?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:p="http://www.springframework.org/schema/p"
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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 註解驅動配置
<mvc:annotation-driven/> -->
<!-- 配置controller掃描(未)
<context:component-scan base-package="com.springMVC.*.controller"/> -->
<!-- 配置處理器映射器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- 配置處理器Control適配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- 配置處理器 -->
<bean name="/loginAction.action" class="com.fy.mvcdemo.handler.LoginAction"></bean><!-- 訪問地址 -->
<!-- 配置視圖View解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 視圖的目錄 -->
<property name="prefix" value="/view/"></property><!-- value="/"代表根目錄 -->
<!-- 視圖的後綴 -->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
4).配置處理器適配器SimpleControllerHandlerAdapter
在spring-servlet.xml文件下配置:
<!-- 配置處理器Control適配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
5).編寫處理器Handler
處理器LoginAction.java文件:
package com.fy.mvcdemo.handler;
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 LoginAction implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
// TODO 自動生成的方法存根
ModelAndView mav = new ModelAndView();
mav.addObject("message","你好,熟知宇某!");//映射到視圖文件的${message}
mav.setViewName("helloppp");//要視圖helloppp.jsp限定名匹配
return mav;
}
}
6).配置處理器handler(即配置自己新建的處理器的類)
在spring-servlet.xml文件下配置:
<!-- 配置處理器Handler:LoginAction.java -->
<bean name="/loginAction.action" class="com.fy.mvcdemo.handler.LoginAction"></bean><!-- 訪問地址 -->
7).配置處理器映射器BeanNameUrlHandlerMapping
在spring-servlet.xml文件下配置:
<!-- 配置處理器映射器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
8).編寫jsp視圖View
視圖文件helloppp.jsp(爲什麼起一個這麼尬的名字,因爲這樣可用於驗證第五步驟的處理器中的setViewName與之是否要一致,答案:是的,要一致)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
登陸成功:${message}<!-- message被映射到處理器Handler,即LoginAction.java文件 -->
</body>
</html>
9).配置視圖View解析器
在spring-servlet.xml文件下配置:
<!-- 配置視圖View解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 視圖文件helloppp.jsp的目錄 -->
<property name="prefix" value="/view/"></property><!-- value="/"代表根目錄 -->
<!-- 視圖的後綴 -->
<property name="suffix" value=".jsp"></property>
</bean>
10).運行項目
11).可能會遇到的bug及解決之道
舉個栗子:
xx類無法加載:java.lang.ClassNotFoundException: org.springframework.web. servlet.DispatcherServle:
ClassNotFound****DispatcherServle這裏的意思是找不到DispatcherServle類
①檢查是否正確引入jar包了;
②在jar包文件下,找是否存在這個類,有可能是jar包版本太低;
③找到是哪個文件調用了這個類,檢查名字是否寫錯了;
這裏的錯,是類的名字沒寫對。你知道哪裏沒寫對嗎?
這個類是在web.xml調用:
<!-- 配置DispatcherServlet -->
<servlet-class>org.springframework.web.servlet.DispatcherServle</servlet-class>
你看看,就會豁然開朗!