(1)新建Spring項目 (2)添加所需要的jar包 spring的5+2: spring-core.jar spring.beans.jar spring-context.jar spring-expression.jar spring-aop.jar spring-web.jar spring ...
(1)新建Spring項目
(2)添加所需要的jar包
spring的5+2:
- spring-core.jar
- spring.beans.jar
- spring-context.jar
- spring-expression.jar
- spring-aop.jar
- spring-web.jar
- spring-webmvc.jar
(這2個jar包是spring mvc的)
web應用的2個:
- servlet.jar
- jsp.jar
這2個包的名字五花八門,總之就是servlet一個、jsp一個。
可以到tomcat的lib下複製,也可以下載Java EE的壓縮包。
可以在Project Structure中添加包,這種方式在部署時容易出現lib複製不全的問題,
解決方式參考:https://www.cnblogs.com/chy18883701161/p/12240317.html
也可以在WEB-INF下新建文件夾lib,把jar包複製到此文件夾,然後對lib點擊右鍵->Add as Library。
web應用的lib要建在WEB-INF下,只有建在WEB-INF下,部署時才會複製。
(3)新建包com.chy,model,包下新建實體類User
package com.chy.model; public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
(4)新建包com.chy.controller,包下新建類UserController,只需實現Controller介面
package com.chy.controller; import com.chy.model.User; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class UserController implements Controller { @Override public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception { //視圖可以在構造器中指定,也可以先使用空參構造器,在調用setter方法設置 ModelAndView mav = new ModelAndView("/WEB-INF/jsp/user_info.jsp"); User user = new User(); user.setUsername("chy"); user.setPassword("abcd"); //向視圖傳遞數據 mav.addObject("user", user); return mav; } }
註意實現的是 org.springframework.web.servlet.mvc.Controller ,不要導錯了。
(5)WEB-INF下新建文件夾jsp,jsp文件夾下新建文件user_info.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> 用戶名:${user.username} <br /> 密碼:${user.password} </body> </html>
使用controller傳過來的數據,實質是通過model的getter方法獲取屬性值。
(6)在src下新建springmvc的配置文件springmvc-config.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 class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <!-- 配置處理器的適配器--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!--配置視圖解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" /> <!--配置要使用的控制器,name的值需要加/ --> <bean name="/userController" class="com.chy.controller.UserController" /> </beans>
(7)在web.xml中用DispatcherServlet攔截所有HTTP請求
<?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"> <!--配置DispatcherServlet--> <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:springmvc-config.xml</param-value> </init-param> <!-- 1表示web容器(比如tomcat)啟動時就初始化此servlet --> <load-on-startup>1</load-on-startup> </servlet> <!--攔截所有HTTP請求--> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
如果未指定springmvc配置文件的路徑,預設會去WEB-INF下找名為DispatcherServlet-servlet.xml的文件,
所以也可以在WEB-INF下新建DispatcherServlet-servlet.xml,在裡面寫springmvc的配置。
如果未指定Servlet的載入時機,會在需要時才載入(初始化)此Servlet。
測試
部署項目,訪問controller:
http://localhost:8080/springmvc_war_exploded/userController
顯示:
用戶名:chy
密碼:abcd
視圖名的拼接
上面的demo中,我們在controller中寫的是完整的視圖名:
ModelAndView mav = new ModelAndView("/WEB-INF/jsp/user_info.jsp");
每次設置視圖名時都寫一長串,很麻煩,可以拼接視圖名:
ModelAndView mav = new ModelAndView("user_info");
<!--配置視圖解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--首碼--> <property name="prefix" value="/WEB-INF/jsp/" /> <!--尾碼--> <property name="suffix" value=".jsp" /> </bean>