SpringMVC入门教程

[size=large]【Spring-MVC快速开始】[/size]
前言
准备筹划一个自己的个人网站,初步的架构设计采用SSH(Spring-MVC,Spring,Hibernate),在这里顺便记录一下设计和开发过程,以备参考。后续会陆续更新文档,如有任何问题,欢迎各位不吝指出,共同学习。
环境
[list]
[*]开发环境 版本
[*]eclipse 4.3.2
[*]maven 3.2.1
[*]Spring-MVC 3.2.3.RELEASE
[*]Spring Spring
[*]Hibernate 3.2.5
[/list]
[size=large]【Spring-MVC环境搭建】[/size]
pom.xml添加spring-mvc的依赖
<!--  Spring-MVC begin-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<!-- Spring-MVC end-->

WEB-INF目录下的文件web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.xbs.ready.ssh</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<servlet>
<servlet-name>springMVC</servlet-name>
<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>
</servlet-mapping>
</web-app>

WEB-INF目录下的文件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:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 使Spring支持自动检测组件,如注解的Controller -->
<context:component-scan base-package="com.xbs.ready.ssh"/>
<!--Spring3.1开始的注解 HandlerMapping -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--Spring3.1开始的注解 HandlerAdapter -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!--这个配置很关键,用以访问静态资源文件 -->
<mvc:default-servlet-handler/>
<!--视图解析器r -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/views/"
p:suffix=".html" />
</beans>

[size=medium]【Controller代码】[/size]

package com.xbs.ready.ssh.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
*
* @author xbs
*/
//路径当中的“/”可以省略
@Controller
@RequestMapping("/abc")
public class IndexController {

//路径当中的“/”可以省略
@RequestMapping("/index")
public String index() {
System.out.println("aaaaaa");
return "index";
}
}

html文件路径:.../webapp/views/index.html
访问
访问路径:http://localhost:8080/sshdemo/abc/index
根据访问路径,会访问IndexController内的index方法,该方法返回字符串“index”
根据字符串index,通过配置文件springMVC-servlet.xml中配置的视图解析器,找到视图的前缀(/views/)和后缀(.html), 那么最终的视图路径为:http://localhost:8080/sshdemo/views/index.html
至此,Http请求结束返回页面。
[size=large]【问题说明】[/size]
搭建Spring-MVC的环境非常简单,网上教程也很多,不过有些教程可能本身并没有经过验证,直接使用,会发现出现各种问题。因此十三哥在此列出一些问题和解决方案,以供参考。

[color=red][size=medium]问题1 把页面存放在/WEB-INF目录下[/size][/color]

网上有些帖子中,配置视图解析器时的配置如下:
<!-- ViewResolver -->  
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>

可以发现,这个配置把jsp页面放在了/WEB-INF/jsp目录下,这种配置编译时是发现不了的,直到服务启动,访问页面时才会发现出现404。这时,即使直接访问绝对路径,也会报404。究其原因,是因为WEB2.0把/WEB-INF/作为私有目录(也称安全目录),只有服务端可以访问,客户端不可访问,所以报404就很正常了。这个问题尤其容易被忽视,又不容易发现。

[color=red][size=medium]问题2 javax.servlet.ServletException: No adapter for handler[/size][/color]

HTTP Status 500 - No adapter for handler [com.xbs.ready.ssh.controller.IndexController@1d70a5cb]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler

--------------------------------------------------------------------------------

type Exception report

message No adapter for handler [com.xbs.ready.ssh.controller.IndexController@1d70a5cb]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: No adapter for handler [com.xbs.ready.ssh.controller.IndexController@1d70a5cb]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler
org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:1128)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:903)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

这个错误与所用的Spring-MVC的版本和配置有关,以后大家会经常发现由于版本所带来的各种问题。
在Spring-MVC 3.1之前的版本中,springMVC-servlet.xml应该使用以下的配置:
<!-- HandlerMapping -->  
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

<!-- HandlerAdapter -->

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
在Spring-MVC 3.1之后的版本中,springMVC-servlet.xml应该使用以下的配置:
<!--Spring3.1开始的注解 HandlerMapping -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--Spring3.1开始的注解 HandlerAdapter -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

[color=red]如果这个配置与版本不匹配的话,那么就会出现上述的错误。[/color]

[color=red][size=medium]问题3 对静态资源的访问出现404 (该问题解释转自:http://bbs.9ria.com/thread-242209-1-1.html)[/size][/color]

Spring-MVC访问静态资源可能会存在找不到资源的问题。
1、如果只配置拦截类似于*.do格式的url,则对静态资源的访问是没有问题的,如下:
<!-- SpringMVC核心分发器 -->
<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*:config/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 映射*.do的请求 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

2、如果配置拦截了所有的请求,如下:
<!-- SpringMVC核心分发器 -->
<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*:config/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 映射所有的请求 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

通过上面url-pattern的配置,所有URL请求都将被Spring MVC的DispatcherServlet截获。这样的配置,会造成html,js文件、css文件、图片文件等静态资源无法访问。因为对这些文件的请求,又将会被Spring MVC的DispatcherServlet截获,相当于一个循环请求。但是又因为没有对应的Controller(即使有也不行,会被截获,然后再循环请求),所以会报404。
[color=red]解决方法: 1.采用<mvc:default-servlet-handler />[/color]
在springMVC-servlet.xml中配置<mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。
一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:
<!-- default-servlet-name可以删掉 -->
<mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />
[color=red]2.采用<mvc:resources />[/color]
<mvc:default-servlet-handler />将静态资源的处理经由Spring MVC框架交回Web应用服务器处理。而<mvc:resources />更进一步,由Spring MVC框架自己处理静态资源,并添加一些有用的附加值功能。
首先,<mvc:resources />允许静态资源放在任何地方,如WEB-INF目录下、类路径下等,你甚至可以将JavaScript等静态文件打到JAR包中。通过location属性指定静态资源的位置,由于location属性是Resources类型,因此可以使用诸如"classpath:"等的资源前缀指定资源位置。传统Web容器的静态资源只能放在Web容器的根路径下,<mvc:resources />完全打破了这个限制。
其次,<mvc:resources />依据当前著名的Page Speed、YSlow等浏览器优化原则对静态资源提供优化。你可以通过cacheSeconds属性指定静态资源在浏览器端的缓存时间,一般可将该时间设置为一年,以充分利用浏览器端的缓存。在输出静态资源时,会根据配置设置好响应报文头的Expires 和 Cache-Control值。
在接收到静态资源的获取请求时,会检查请求头的Last-Modified值,如果静态资源没有发生变化,则直接返回303相应状态码,提示客户端使用浏览器缓存的数据,而非将静态资源的内容输出到客户端,以充分节省带宽,提高程序性能。
在springMVC-servlet中添加如下配置:
<mvc:resources location="/,classpath:/META-INF/publicResources/" mapping="/resources/**"/>
以上配置将Web根路径"/"及类路径下 /META-INF/publicResources/ 的目录映射为/resources路径。假设Web根路径下拥有images、js这两个资源目录,在images下面有bg.gif图片,在js下面有test.js文件,则可以通过 /resources/images/bg.gif 和 /resources/js/test.js 访问这二个静态资源。
假设WebRoot还拥有images/bg1.gif 及 js/test1.js,则也可以在网页中通过 /resources/images/bg1.gif 及 /resources/js/test1.js 进行引用。
也可以简单配置WEB-INF/springMVC-servlet.xml如下:
<!-- spring mvc对静态资源的访问 -->
<resources location="/image/" mapping="/image/**"/>
<resources location="/js/" mapping="/js/**"/>
<resources location="/style/" mapping="/style/**"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蛋白质是生物体中普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更新;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物中的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动中发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值