SpringMVC

SpringMVC

参考网站how2java教程


一,springmvc入门

###1,导入jar包###

2,配置web.xml###

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>
    <servlet-name>springmvc</servlet-name>
    <!-- DispatcherServlet就是一个Servlet,也是对请求进行转发的Servlet。在这里就是把所有的请求交给Servlet处理,而DispatcherServlet的工作就是把请求进行分发(把请求交给具体的Controller)--> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class>
     <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern> <!--会拦截URL中带“/”的请求。 --> 
</servlet-mapping>

</web-app>

DispatcherServlet的作用:

1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
4、通过ViewResolver解析逻辑视图名到具体视图实现;
5、本地化解析;
6、渲染具体的视图等;
7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。

3,配置springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="simpleUrlHandlerMapping" 
          class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
          <property name="mappinng">
            <props>
                <prop key="/index">indexController</prop><!-- 访问的路径为/index时候,映射交给id为indexController的bean去处理。 -->
            </props>
          </property>
    </bean>
    <!-- id=indexController的bean配置为类:IndexController -->
    <bean id="indexController" class="controller.IndexController"></bean>
</beans>

4,控制类IndexController

springmvc通过ModelAndView对象把视图(view)和模型(数据:Model)结合起来

package controller;

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 IndexController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
	ModelAndView mav = new ModelAndView("index.jsp");
	mav.addObject("message", "Hello Spring MVC");
	return mav;
}
}

springmvc通过ModelAndView对象把视图(view)和模型(数据:Model)结合起来

ModelAndView mav = new ModelAndView("index.jsp");
mav.addObject("message", "Hello Spring MVC");

index.jsp代表视图
模型代表message,内容是Hello Spring MVC

5,创建index.jsp

在WebContent目录下创建index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8" isELIgnored="false"%>
    
    <h1>${message}</h1>

6,测试

输入 http://localhost:8080/项目名/index

结果:此处输入图片的描述

7,原理图

springmvc

二,视图定位

作用:1,不是所有的视图都会使用jsp来做,还可以是JSF,html 等其他的方式。
用这样的手段,如果要把视图从index.jsp改为index.html,就不需要修改代码,而仅仅需要修改配置文件即可。
2,另一个便利之处在于,如果要批量修改视图文件所处于的位置,按照以前的办法,也需要对每个类逐一修改,工作量大,容易出错。 而使用这种方式,维护成本就小多了。

1,web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>
    <servlet-name>springmvc</servlet-name>
    <!-- DispatcherServlet就是一个Servlet,也是对请求进行转发的Servlet。在这里就是把所有的请求交给Servlet处理,而DispatcherServlet的工作就是把请求进行分发(把请求交给具体的Controller)--> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class>
     <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern> <!--会拦截URL中带“/”的请求。 --> 
</servlet-mapping>

</web-app>

2,springmvc-servlet.xml

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--作用是把视图约定在 /WEB-INF/page/*.jsp 这个位置 -->
    <bean id="viewResolver" 
       class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <!-- 前缀:ModelAndView mav = new ModelAndView("index")中的index文件放到WEB-INF/page目录下 -->
        <property name="prefix" value="/WEB-INF/page/"/>
        <!-- 后缀:index文件格式为jsp -->
        <property name="suffix" value=".jsp"/>
</bean>

    <bean id="simpleUrlHandlerMapping" 
       class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mapping">
            <props>
                <prop key="/index">indexController</props>
            </props>
        </property>      
    </bean>
    <bean id="indexController" class="controller.IndexController"></bean>
</beans>

3,IndexController

 package controller;

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 IndexController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
	ModelAndView mav = new ModelAndView("index");//视图定位就是把index.jsp改为index
	mav.addObject("message", "Hello Spring MVC");
	return mav;
}
}

4,index.jsp

把index.jsp移动到WEB-INF下的新建目录page

三,注解方式

1,IndexController

package controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller//表示该类是一个控制器
public class IndexController {
@RequestMapping("/index")//表示路径/index会映射到该方法上
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    ModelAndView mav = new ModelAndView("index");
    mav.addObject("message", "Hello Spring MVC");
    return mav;
}
}

2,springmvc-servlet.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"
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-3.0.xsd">
 
<context:component-scan base-package="controller" /><!-- 表示从包controller下扫描有@Controller注解的类-->
<bean id="irViewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/page/" />
    <property name="suffix" value=".jsp" />
</bean>
</beans>

3,测试

打开页面:http://127.0.0.1:8080/springmvc/index

此处输入图片的描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章