SpringMVC简介

SpringMVC简介

SpringMVC初认识

SpringMVC也称Spring Web MVC,是View层的框架。
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等。


SpringMVC的优点

  • SpringMVC是完全基于mvc构架的,而不像struts等都是变种或者不是完全基于mvc系统的框架。
  • 和tapestry一样,它是一个纯正的servlet系统,这也是它和tapestry相比struts所具有的优势。



SpringMVC学习前言

SpringMVC的环境配置

<!--中央调度器-->
<servlet>
	<!--servlet-name自行命名-->
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--指定springMVC配置文件的位置及文件名,param-value中键入自己配置文件的具体位置-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:xxx.xml</param-value>
    </init-param>
    <!--值>0,服务器启动时创建当前servlet,越小优先级越高,越先创建-->
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
	<!--与上方servlet中的srvlet-name同名-->
    <servlet-name>springmvc</servlet-name>
    <!--对于<url-pattern/>,不能写为/*,最好也不要写为/,建议写为*.do 的形式。下面的<url-pattern/>注意事项-->
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

<!--注册处理器,注册自己编写的Controller类-->
<bean id="/myController.do" class="handler.MyController"/>

MyController类:

public class MyController implements Controller {
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModelAndView mv = new ModelAndView();
		mv.addObject("welcome", "Hello SpringMVC World!");
		mv.setViewName("/WEB-INF/welcome.jsp");
		return mv;
	}
}

welcome.jsp

<body>
	${welcome};
</body>

<url-pattern/>注意事项

<url-pattern/>中不要用/*,会拦截动态页面请求,访问jsp页面就会出现异常404。
最好不要用/,因为会拦截静态资源。但是必要情况下,我们需要使用/时,解决静态资源无法访问的方法如下:

  1. 在web.xml中配置
    <servlet-mapping>
    	<!--tomcat.config.webxml定义的,专门处理静态资源-->
        <servlet-name>default</servlet-name>
        <!--允许访问.jpg的静态资源-->
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
    
  2. 在SpringMVC的.xml配置文件中添加mvc标签:
    <mvc:default-servlet-handler/>
    
  3. 使用<mvc:resources/>。
    例:
    <mvc:resources location="/img/" mapping="/img/**"/>
    
    mvc中resources spring3.0.4版本添加的专门处理静态资源的问题。

路径问题

路径:
  1. 不以/开头:参考路径:当前访问路径 最后一个/前的路径(资源名称前的路径)。
  2. 以/开头
    1. 前台路径:参照路径:服务器的根 http:localhost:8080/
    2. 后台路径:当前应用的根(项目的根):WebROOT的路径
双test情况:

当我们在注册处理器时,id中添加一个test,如下:

<bean id="/test/myController.do" class="handler.MyController"/>

同时将index界面改为:

<body>
	<a href="test/login.do">提交表单信息</a>
</body>
public class MyController implements Controller {
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		return new ModelAndView("/index.jsp");
	}
}

当我们点击两次index中的表单提交按钮后,访问的路径会变成这样:
在这里插入图片描述
我们发现地址栏中多出了一个test,并且抛出了404异常。

分析原因:

这是因为超链接的herf 属性值为无斜杠的相对路径,所以其参照路径为当前的访问路径。在第一次提交时的“ 当前访问路径” 为localhost/ , 所以相对于它的访问路径即为loclhost/test/login.do。在此访问路径下再次点击超级链接后,此时的“当前访问路径”已经发生变化,变为了localhost/test/。其所访问路径就变为了 localhost/test/test/login.do,而这个资源是没有定义的,所以会报404 错误。

解决方法:
  1. 使用/开头的请求路径:
    <body>
    	<a href="${pageContext.request.ContextPath}/test/login.do">提交表单信息</a>
    </body>
    
  2. basePath(有浏览器兼容问题,不推荐)
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPost() + path + "/";
    %>
    <html>
    	<head>
    		<base href="<%=basePath%>"/>
    		<title>index page</title>
    	</head>
    	<body>
    		<a href="test/login.do">提交表单信息</a>
    	</body>
    </html>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值