发表于: 2018-03-03 19:49:01

1 666


今日完成

1.学习springMVC常用注解标签详解

(1)@Controller

在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。

@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。那么要如何做Spring 才能认识它呢?这个时候就需要我们把这个控制器类交给Spring 来管理。有两种方式:

  (1)在SpringMVC 的配置文件中定义MyController 的bean 对象。

  (2)在SpringMVC 的配置文件中告诉Spring 该到哪里去找标记为@Controller 的Controller 控制器。

2、@RequestMapping

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

RequestMapping注解有六个属性,下面我们把她分成三类进行说明(下面有相应示例)。

1、 value, method;

value:     指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

method:  指定请求的method类型, GET、POST、PUT、DELETE等;

2、consumes,produces

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

3、params,headers

params: 指定request中必须包含某些参数值是,才让该方法处理。

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

3、@Resource和@Autowired

@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

1、共同点

两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

2、不同点

(1)@Autowired

@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

复制代码

public class TestServiceImpl {

    // 下面两种@Autowired只要使用一种即可

    @Autowired

    private UserDao userDao; // 用于字段上

    

    @Autowired

    public void setUserDao(UserDao userDao) { // 用于属性的方法上

        this.userDao = userDao;

    }

}

复制代码

@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:

public class TestServiceImpl {

    @Autowired

    @Qualifier("userDao")

    private UserDao userDao; 

}

(2)@Resource

@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

复制代码

public class TestServiceImpl {

    // 下面两种@Resource只要使用一种即可

    @Resource(name="userDao")

    private UserDao userDao; // 用于字段上

    

    @Resource(name="userDao")

    public void setUserDao(UserDao userDao) { // 用于属性的setter方法上

        this.userDao = userDao;

    }

}

复制代码

注:最好是将@Resource放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。

@Resource装配顺序:

①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。

2.学习web.xml中的配置

元素1:<icon>

含义

icon元素包含small-icon和large-icon两个子元素.用来指定web站台中小图标和大图标的路径.
<small-icon>/路径/smallicon.gif</small-icon>
small-icon元素应指向web站台中某个小图标的路径,大小为16 X 16 pixel,但是图象文件必须为GIF或JPEG格式,扩展名必须为:.gif或.jpg.

<large-icon>/路径/largeicon-jpg</large-icon>
large-icon元素应指向web站台中某个大图表路径,大小为32 X 32 pixel,但是图象文件必须为GIF或JPEG的格式,扩展名必须为; gif或jpg.

范例

<icon>
   <small-icon>/images/small.gif</small-icon>
   <large-icon>/images/large.gif</large-icon>
</icon>

元素2、3:<display-name>,<description>

含义

<display-name>应用名称</display-name>
定义应用的名称。

<description>应用描述</discription>
对应用做出描述。

范例

<display-name>test</display-name>

<description>测试应用V1.0</discription>

元素4:<context-param>

含义

context-param 元素用来设定web应用的环境参数(context),它包含两个子元素:
param-name和param-value.
<param-name>参数名称</param-name>
设定Context名称
<param-value>值</param-value>
设定Context名称的值

范例
<context-param>
   <param-name>param_name</param-name>
   <param-value>param_value</param-value>
</context-param>
此所设定的参数,在JSP网页中可以使用下列方法来取得:
${initParam.param_name}
若在Servlet可以使用下列方法来获得:
String param_name=getServletContext().getInitParamter("param_name");

元素5,6:<filter>,<filter-mapping>

含义

filter元素用来设定web应用的过滤器,它的两个主要子元素filter-name和filter-class用来定义Filter所对应的class

<filter-name>Filter的名称</filter-name>
定义Filter的名称
<filter-class>Filter的类名称</filter-class>
定义Filter的类名称

filter-mapping 元素的两个主要子元素filter-name和url-pattern.用来定义Filter所对应的URL.
<filter-name>Filter的名称</filter-name>
定义Filter的名称.
<url-pattern>URL</url-pattern>
Filter所对应的RUL.例如:<url-pattern>/Filter/*</url-pattern>

范例

<filter>
  <filter-name>Encoding</filter-name>
  <filter-class>ghjf.test.filter.SetCharacterEncodingFilter</filter-class>
  <init-param>
     <param-name>encoding</param-name>
     <param-value>GBK</param-value>
  </init-param>
</filter>

<filter-mapping>
   <filter-name>Encoding</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

元素7:<listener>

含义

listener元素用来定义Listener接口,它的主要子元素为<listener-class>
<listen-class>Listener的类名称</listener-class>
定义Listener的类名称
<listener>

范例

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

元素8、9:<servlet>、<servlet-mapping>

含义

servlet元素的两个主要子元素servlet-name和servlet-class用来定义servlet所对应的class

<servlet-name>servlet的名称</servlet-name>
定义servlet的名称
<servlet-class>servlet的类名称</servlet-class>
定义servlet的类名称

servlet-mapping元素包含两个子元素servlet-name和url-pattern.用来定义servlet所对应URL.
<servlet-name>Servlet的名称</servlet-name>
定义Servlet的名称.
<url-pattern>Servlet URL</url-pattern>
定义Servlet所对应的RUL.例如:<url-pattern>/Servlet/*</url-pattern>
</servlet-mapping>

范例

<servlet>
 <servlet-name>dwr-invoker</servlet-name>
 <display-name>DWR Servlet</display-name>
 <description>Direct Web Remoter Servlet</description>
 <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
 <init-param>
     <param-name>debug</param-name>
     <param-value>true</param-value>
 </init-param>
</servlet>

<servlet-mapping>
 <servlet-name>dwr-invoker</servlet-name>
 <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

元素10:<session-cofing>

含义

session-config包含一个子元素session-timeout.定义web应用中的session参数.
<session-timeout>分钟</session-timeout>
定义这个web站台所有session的有效期限.单位为分钟.

范例

<session-config>
   <session-timeout>30</session-timeout>
</session-config>

元素11:<mime-mapping>

含义

mime-mapping包含两个子元素extension和mime-type.定义某一个扩展名和某一MIME Type做对映.
<extension>扩展名名称</extension>
扩展名称
<mime-type>MIME格式</mime-type>
MIME格式.

范例

<mime-mapping>
   <extension>doc</extension>
   <mime-type>application/vnd.ms-word</mime-type>
</mime-mapping>
<mime-mapping>
   <extension>xls</extension>
   <mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
<mime-mapping>
   <extension>ppt</extesnion>
   <mime-type>application/vnd.ms-powerpoint</mime-type>
</mime-mapping>

元素12:<welcome-file-list>

含义

welcome-file-list包含一个子元素welcome-file.用来定义首页列单.
<welcome-file>用来指定首页文件名称</welcome-flie>
welcome-file用来指定首页文件名称.我们可以用<welcome-file>指定几个首页,而服务器会依照设定的顺序来找首页.

范例

<welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
  <welcome-file>index.htm</welcome-file>
</welcome-file-list>

元素13:<error-page>

含义

error-page元素包含三个子元素error-code,exception-type和location.将错误代码(Error Code)或异常(Exception)的种类对应到web应用资源路径.
<error-code>错误代码</error-code>
HTTP Error code,例如: 404、403
<exception-type>Exception</exception-type>
一个完整名称的Java异常类型
<location>/路径</location>
在web应用内的相关资源路径

范例

<error-page>
   <error-code>404</error-code>
   <location>/error404.jsp</location>
</error-page>
<error-page>
   <exception-type>java.lang.Exception</exception-type>
   <location>/exception.jsp</location>
</error-page>

元素14:<jsp-config>

含义

jsp-config元素主要用来设定JSP的相关配置,<jsp:config>包括<taglib>和<jsp-property-group>两个子元素.其中<taglib>元素
在JSP 1.2时就已经存在了;而<jsp-property-group>是JSP 2.0新增的元素.

<taglib>
taglib元素包含两个子元素taglib-uri和taglib-location.用来设定JSP网页用到的Tag Library路径.
<taglib-uri>URI</taglib-uri>
   taglib-uri定义TLD文件的URI,JSP网页的taglib指令可以经由这个URI存取到TLD文件.
<taglib-location>/WEB-INF/lib/xxx.tld</taglib-laction>
   TLD文件对应Web站台的存放位置.
</taglib>

<jsp-property-group>
jsp-property-group元素包含8个元素,分别为:
<description>Description</descrition>
此设定的说明

<display-name>Name</display-name>
此设定的名称

<url-pattern>URL</url-pattern>
设定值所影响的范围,如:/CH2 或者/*.jsp

<el-ignored>true|false</el-ignored>
若为true,表示不支持EL语法.

<scripting-invalid>true|false</scripting-invalid>
若为true表示不支持<%scription%>语法.

<page-encoding>encoding</page-encoding>
设定JSP网页的编码

<include-prelude>.jspf</include-prelude>
设置JSP网页的抬头,扩展名为.jspf

<include-coda>.jspf</include-coda>
设置JSP网页的结尾,扩展名为.jspf
</jsp-property-group>
</jsp-config>

范例

<jsp-config>
<taglib>
   <taglib-uri>Taglib</taglib-uri>
   <taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location>
</taglib>
<jsp-property-group>
   <description>
      Special property group for JSP Configuration JSP example.
   </description>
   <display-name>JSPConfiguration</display-name>
   <uri-pattern>/*</uri-pattern>
   <el-ignored>true</el-ignored>
   <page-encoding>GB2312</page-encoding>
   <scripting-inivalid>true</scripting-inivalid>
</jsp-property-group>
</jsp-config>

元素15:<resource-env-ref>

含义

resource-env-ref有两个子元素:
<resource-env-ref-name>资源名</resource-env-ref-name>  
资源的名称 相对于java:comp/env
<resource-env-ref-type>查找资源时返回的资源类名</resource-env-ref-type>
当web应用查找该资源的时候,返回的Java类名的全称

范例

 <resource-env-ref>  
  <resource-env-ref-name>jdbc/mssql</resource-env-ref-name>  
  <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>  
 </resource-env-ref> 

元素16:<resource-ref>

含义

resource-ref元素包括五个子元素description,res-ref-name,res-type,res-auth,res-sharing-scope.利用JNDI取得应用可利用资源.
<description>说明</description>
资源说明
<rec-ref-name>资源名称</rec-ref-name>
资源名称
<res-type>资源种类</res-type>
资源种类
<res-auth>Application|Container</res-auth>
资源由Application或Container来许可
<res-sharing-scope>Shareable|Unshareable</res-sharing-scope>
 资源是否可以共享.默认值为 Shareable

范例

<resource-ref>
   <description>JNDI JDBC DataSource</description>
   <res-ref-name>jdbc/data</res-ref-name>
   <res-type>javax.sql.DataSoruce</res-type>
   <res-auth>Container</res-auth>
</resource-ref>

写出第一个springMVC的demo

@Controller
@RequestMapping("/hello")
public class HelloController{

@RequestMapping(method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");

       return "hello";
   }

}

ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数: 
addAttribute(String key,Object value); 
在页面上可以通过el变量方式$key或者bboss的一系列数据展示标签获取并展示modelmap中的数据。 
modelmap本身不能设置页面跳转的url地址别名或者物理跳转地址,那么我们可以通过控制器方法的返回值来设置跳转url地址别名或者物理跳转地址。

web.xml

<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        id="WebApp_ID" version="3.0">
 <!-- SpringMVC的前端控制器 -->
 <servlet>
   <servlet-name>Hello</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <!-- 设置自己定义的控制器xml文件 -->
   <init-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>/WEB-INF/Hello-servlet.xml</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <!-- Spring MVC配置文件结束 -->

 <!-- 拦截设置 -->
 <servlet-mapping>
   <servlet-name>Hello</servlet-name>
   <!-- 由SpringMVC拦截所有请求 -->
   <url-pattern>/</url-pattern>
 </servlet-mapping>

</web-app>

-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
      xsi:schemaLocation="
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
       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">
   <!-- 把标记了@Controller注解的类转换为bean -->
   <context:component-scan base-package="main.mucfc" />
   <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
   <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
   <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
         p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>

</beans>

jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page language="java" contentType="text/html; charset=gb2312"
        pageEncoding="gb2312"%>
<!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=gb2312">
   <title>Insert title here</title>
</head>
<body>
Message:${message}
</body>
</html>

运行后报错

04-Mar-2018 02:57:40.512 警告 [http-nio-8080-exec-1] org.springframework.web.servlet.PageNotFound.noHandlerFound No mapping found for HTTP request with URI [/HelloWeb2/] in DispatcherServlet with name 'Hello'


查询了很久未能解决,可能原因:

明天计划

1.解决上述问题;

2.熟悉springMVC;

遇到问题

-------

收获

学习了springMVC的常用注解和web.xml中部分标签的意义




返回列表 返回列表
评论

    分享到