SpringMVC傻瓜式教程搭建
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">使用的工具:JDK8+TOMCAT7.0+SPRING3.0、SPRING4.0</span>
任務:1.入門級搭建SpringMVC
2.分別使用xml檔案配置beanname查詢和annotation方式查詢Controller控制元件
一、xml方式
步驟1.
Eclipse建立web 工程:
目錄結構如下:
2.配置匯入所需jar包:spring和依賴包:
3.配置web.xml檔案:
4.配置spring-servlet.xml配置檔案:<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>springMVC1</display-name> <!-- 配置spring核心servlet --> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <!-- 不帶檔案字尾,會造成其它靜態檔案(js,css等)不能訪問。如配為*.do,則不影響靜態檔案的訪問 --> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>hello.jsp</welcome-file> </welcome-file-list> </web-app>
注意:1.名字為[springname]-servlet.xml,檔案位置在WEB-INF下。
2。不然要在web.xml中配置檔案位置。比如位置為在src/下的resources/spring.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" 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-3.0.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-3.0.xsd"> <!-- 啟動註解驅動的Spring MVC功能,註冊請求url和註解POJO類方法的對映 --> <!-- <mvc:annotation-driven /> --> <!-- 啟動包掃描功能,以便註冊帶有@Controller、@Service、@repository、@Component等註解的類成為spring的bean --> <!-- <context:component-scan base-package="com.ben.rest" /> --> <!-- 對模型檢視名稱的解析,在請求時模型檢視名稱新增前後綴 --> <!-- 配置HandlerMapping,根據beanname查詢對應的Controller,這個配置可以省略 --> <bean class="org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping"/> <!-- 配置Controller --> <bean name="hello.do" class="com.ben.controllers.HelloController"/> <!--配置檢視解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="prefix" value="/view/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
5.Controller類:
package com.ben.controllers;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class HelloController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(
HttpServletRequest request, HttpServletResponse response) throws Exception {
String hello = request.getParameter("hello");
System.out.println("--------:"+hello);
ModelAndView mav = new ModelAndView("index");//指定要反回的頁面,在spring-servlet中檢視解析器中配置字尾,不用新增.jsp字尾
mav.addObject("helloworld","hello "+hello);//引數是attributeName 和attributeObject,在index頁面中獲取helloworld的attribute
return mav;
}
}
7.jsp頁面:
hello.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="hello.do" method="post">
hello<input type="text" name="hello"/>
<input type="submit" value="submit"/>
</form>
</body>
</html>
hello.do是HelloController的URI,在web.xml中有配置,servlet處理.do請求index.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>${helloworld}</h1>
</body>
</html>
8.部署到tomcat,啟動輸入:loclhost.8080/SpringMVC1填寫內容,正常跳轉:
二、annotation方式 :只需要改動兩個位置:
1.spring-servlet.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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-3.0.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-3.0.xsd">
<!-- 啟動註解驅動的Spring MVC功能,註冊請求url和註解POJO類方法的對映 -->
<mvc:annotation-driven/>
<!-- 啟動包掃描功能,以便註冊帶有@Controller、@Service、@repository、@Component等註解的類成為spring的bean -->
<context:component-scan base-package="com.ben.controllers" />
<!-- 對模型檢視名稱的解析,在請求時模型檢視名稱新增前後綴 -->
<!--配置檢視解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/view/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
2.
package com.ben.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 這個工程是第一個Springmvc註解工程,用於入門,配置檔案以後直接複製
*
*
*/
@Controller
public class HelloController {
@RequestMapping(value="/hello.do")
public String hello(String userName, Model model) {
System.out.println(userName);
model.addAttribute("helloworld", "hello" + userName);
return "index";
}
}
3.啟動,輸入文字內容,跳轉,但是出現異常===============================
原因:spring3.0不能很好支援JDK8,
Java 8編譯器編譯過的程式碼生成的.class檔案需要在Java 8或以上的Java虛擬機器上執行。由於Spring對反射機制和ASM、CGLIB等位元組碼操作函式庫的重度使用,必須確保這些函式庫能理解Java 8生成的新class檔案。因此Spring將ASM、CGLIB等函式庫通過jar jar(https://code.google.com/p/jarjar/)嵌入Spring框架中,這樣Spring就可以同時支援Java6、7和8的位元組碼程式碼而不會觸發執行時錯誤。
Spring框架本身是由Java 8編譯器編譯的,編譯時使用的是生成Java 6位元組碼的編譯命令選項。因此你可以Java6、7或者8來編譯執行Spring 4.x的應用。
將spring jar包換成4.0問題解決