>Java >java지도 시간 >Spring MVC에 대한 간략한 소개

Spring MVC에 대한 간략한 소개

巴扎黑
巴扎黑원래의
2017-09-08 09:46:002552검색

Spring MVC는 SpringFrameWork의 후속 제품으로 Spring Web Flow에 통합되었습니다. 오늘은 Spring MVC HelloWorld 작성부터 시작하겠습니다. Spring MVC 환경을 설정하고 프로그램을 실행하는 방법을 살펴보겠습니다. 관심 있는 친구들은 함께 배울 수 있습니다

Spring MVC가 무엇인지

Spring MVC는 SpringFrameWork에 속합니다. 후속 제품이 Spring Web Flow에 통합되었습니다. Spring 프레임워크는 웹 애플리케이션 구축을 위한 모든 기능을 갖춘 MVC 모듈을 제공합니다. Spring의 플러그형 MVC 아키텍처를 사용하면 WEB 개발에 Spring을 사용할 때 Spring의 SpringMVC 프레임워크를 사용하거나 Struts1, Struts2 등과 같은 다른 MVC 개발 프레임워크를 통합하도록 선택할 수 있습니다.

오늘은 Spring MVC HelloWorld 작성부터 시작해 Spring MVC 환경을 설정하고 프로그램을 실행하는 방법을 살펴보겠습니다.

소프트웨어 매개변수

Eclipse: Mars.1 릴리스(4.5.1)
Tomcat: 8.0.36
JDK: 1.8.0_60
스프링 프레임워크: 4.0.4.RELEASE

새로운 프로젝트

 File-New-Other, Dynamic web project

를 선택합니다. 프로젝트가 빌드된 후 디렉터리 구조는 다음과 같습니다.

jar 패키지 가져오기

Spring m vc 프레임워크를 기반으로 개발하려면 다음 spring jar 패키지를 사용해야 합니다.


spring-aop-4.0.4.RELEASE.jar
spring-beans-4.0.4.RELEASE.jar
spring-context-4.0.4.RELEASE.jar
spring-core-4.0.4.RELEASE.jar
spring-expression-4.0.4.RELEASE.jar
spring-web-4.0.4.RELEASE.jar
spring-webmvc-4.0.4.RELEASE.jar
commons-logging-1.1.1.jar(用来打印log)

WEB-INF 디렉터리에 새 lib 폴더를 만들고 위의 jar 패키지를 그 안에 넣습니다.

구성 파일 및 작성 코드


web.xml(WEB-INF下)
 <?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"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  id="WebApp_ID" version="2.5">  
  <!-- 配置DispatchcerServlet -->
  <servlet>
   <servlet-name>springDispatcherServlet</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <!-- 配置Spring mvc下的配置文件的位置和名称 -->
   <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:springmvc.xml</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
   <servlet-name>springDispatcherServlet</servlet-name>
   <url-pattern>/</url-pattern>
  </servlet-mapping> 
 </web-app>

참고: 1. 12~15번째 줄은 spring mvc 구성 파일의 위치와 이름을 구성하는 데 사용됩니다. 여기서는 springmvc의 새로운 구성 파일입니다. xml이 생성됩니다

  2. 새로운 springmvc.xml을 생성하는 대신 기본 구성 파일 형식을 사용할 수도 있습니다. 기본 구성 파일 형식은 /WEB-INF/[servlet-name]-servlet.xml이며 이는 springDispatcherServlet-에 해당합니다. servlet.xml

3. 여기서 servlet-mapping은 차단 모드를 나타냅니다. 여기서는 html, js, jpg 등과 같은 정적 리소스를 포함한 모든 요청의 차단을 나타냅니다. 이때 정적 리소스에 액세스하면 404 오류가 보고됩니다. 해결 방법은 추후 소개하겠습니다


Springmvc.xml (scr 아래)

src 디렉터리에 새로운 springmvc.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"
  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-4.0.xsd
   http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
   <!-- 配置自动扫描的包 -->
   <context:component-scan base-package="com.jackie.springmvc"></context:component-scan>
   <!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name = "prefix" value="/WEB-INF/views/"></property>
    <property name = "suffix" value = ".jsp"></property>
   </bean>
 </beans>

참고: 1. Line12는 스프링 모니터링 범위를 나타냅니다. com.jackie에 있습니다. 15-18행은 컨트롤러의 핸들러 구조를 실제 물리적 뷰로 구문 분석하는 뷰 파서를 추가합니다. 자세한 내용은 아래를 참조하세요. .


HelloWorld.java(com.jackie.springmvc.handlers下)
 package com.jackie.springmvc.handlers;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 @Controller
 public class HelloWorld {
  /**
  * 1. 使用RequestMapping注解来映射请求的URL
  * 2. 返回值会通过视图解析器解析为实际的物理视图, 对于InternalResourceViewResolver视图解析器,会做如下解析
  * 通过prefix+returnVal+suffix 这样的方式得到实际的物理视图,然后会转发操作
  * "/WEB-INF/views/success.jsp"
  * @return
  */
  @RequestMapping("/helloworld")
  public String hello(){
   System.out.println("hello world");
   return "result";
  }
 }


참고:

1. 먼저 클래스 앞에 "Controller" 주석을 추가하여 hello()

메소드가 여기에 작성됩니다. 2. hello 메소드 위에는 요청 경로를 일치시키는 데 사용되는 @RequestMapping이 있습니다. 예를 들어 여기서 일치하는 요청 경로는 "http://localhost:8080/springTest/springmvc/helloworld"입니다. tomcat 서비스가 시작되면 브라우저에 이 URL을 입력하세요. 이때 중단 지점이 이 메서드에 있으면 이 메서드로 점프합니다.

  3. 반환된 문자열은 위 springmvc.xml의 line15-18과 일치하며 springmvc.xml에 선언되어 있으며 둘 사이에 끼워져 있습니다. 여기에서 이 메서드를 실행한 후 요청된 리소스 경로 "/WEB-INF/views/success.jsp"를 얻을 수 있습니다. 이 Success.jsp에서는 새 인덱스를 생성해야 합니다(WebContent 아래)

새로운 Success.jsp, 여기에 index.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>
 <a href="helloworld" rel="external nofollow" >hello world</a>
 </body>
 </html>

index.jsp에 액세스하면 페이지에 하이퍼링크가 표시됩니다. 하이퍼링크를 클릭하세요. 체인 뒤의 주소 URL에서 "http://localhost:8080/springTest/index.jsp"에서 "http://localhost:8080/springTest/helloworld"로 이동하고 이 URL 요청은 HelloWorld에 hello 메소드를 입력합니다. 메소드의 "/helloworld"와 일치합니다.

  success.jsp (WEB-INF/views 아래)

 이 페이지는 요청 성공 후 해당 페이지로 사용됩니다


<%@ 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>
 <h4>Success Page</h4>
 </body>
 </html>

이 시점에서 HelloWorld 기반 프로그램 개발이 완료되었습니다. 종속성 jar 패키지, 구성 파일, 컨트롤러 코드 작성 및 디스플레이 페이지 작성 등을 포함한 Spring mvc 프레임워크

除此以外,再介绍下整个配置过程中遇到的一些小问题:

1. tomcat服务器的添加

  从前面的介绍可以看出,我们的程序是通过浏览器发请求来获取想要的页面,那么这里就免不了要有一个web服务器,这里就是tomcat。

  首先你需要下载个tomcat,然后在eclipse->windows->preference->servers中绑定这个tomcat服务器;

  其次你需要在你新建的spring mvc项目中添加tomcat的支持,否则在新建的jsp文件中会提示报错“The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path”

  右键项目->build path->configure build path->add library->server runtime, 选择你的tomcat即可

  有了tomcat服务器,你就可以在index.jsp上右键run on server,选择你的tomcat服务器,这样就可以启动tomcat服务,帮助你完成网页的请求和响应操作。 

2. spring mvc如何访问静态资源

  关于使用spring mvc处理静态资源,比如html(发现之前的springmvc.xml中16244cc5c17ada7705a50328620bea5adde4123f2ed5a21d0bae333af89830f9定义为jsp结尾就可以成功跳转,但是如果改为html并在web-inf下面新建了html文件后,并将suffix这里的".jsp"改为".html",无法跳转到想要的html页面,并且给出404错误,同时console给出错误信息为:No mapping found for HTTP request with URI [/springTest/WEB-INF/views/result.html] in DispatcherServlet)

  最后发现是需要让spring明确要处理静态资源,原来的web.xml中只有 


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

  其匹配的都是controller中类似@RequestMapping("/springmvc/helloworld")这样的注解配置的请求,而对于类似html/css/jpg等资源的访问就会得不到,所以需要在web.xml中加入以下类型的支持 


<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.css</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.gif</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.jpg</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.js</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.html</url-pattern>
 </servlet-mapping>

  这样就可以保证spring 能够拦截并处理静态资源 

  这里将HelloWorld.java中的hello方法改为:


@RequestMapping("/helloworld")
 public String hello(){
  System.out.println("hello world");
  return "Jackie";
}

Springmvc.xml改为:


class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name = "prefix" value="/WEB-INF/views/"></property>
   <property name = "suffix" value = ".jpg"></property>
</bean>

위 내용은 Spring MVC에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.