HzhJava框架搭建四:一个基于注解的spring程序

来源:互联网 发布:卷皮和淘宝哪个更好 编辑:程序博客网 时间:2024/06/06 15:22

一个基于注解的简单spring程序

        在“HzhJava框架搭建三”中简单的介绍了基于配置的spring程序,是为了了解spring演变过程,更了的理解spring的原理和使用方式。注解是为了简化配置而产生的一种简单的写法,我们可以简单的把注解理解成是一种“更为方便的配置”。从原理上将,注解和配置其实并没有什么不同,都是向spring的IOC容器中注入依赖,也就是把我们需要spring帮助管理的类和方法注入到IOC中,配置和注解就是spring提供了依赖注入的两种方式,我们用spring提供的方式来告诉那些依赖是要注入的即可。

        先让我们来看一下程序的整个目录结构,红色方框里的内容是我们这次添加的,其它的是在“HzhJava框架搭建二”中准备的内容。


Food.java文件

<span style="font-size:12px;">package com.sprmvc.bean;public class Food {private String favoriteFruit;public String getFavoriteFruit() {return favoriteFruit;}public void setFavoriteFruit(String favoriteFruit) {this.favoriteFruit = favoriteFruit;}}</span>
FoodController.java文件

<span style="font-size:12px;">package com.sprmvc.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import com.sprmvc.bean.Food;@Controllerpublic class FoodController {@RequestMapping(value="/food-page")public ModelAndView foodPage() {return new ModelAndView("food-form", "food", new Food());}@RequestMapping(value="/food-result")public ModelAndView processFuits(Food food) {ModelAndView modelAndView = new ModelAndView("food-result");modelAndView.addObject("food", food);return modelAndView;}}</span>
food-from.jsp文件

<span style="font-size:12px;"><%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%><!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>Fruit page</title></head><body><h1>Fruit page</h1><form:form method="POST" commandName="food" action="food-result.html"><table>    <tr>        <td>Apple </td>        <td><form:checkbox path="favoriteFruit" value="apple" /></td>    </tr>    <tr>        <td>Orange </td>        <td><form:checkbox path="favoriteFruit" value="orange" /></td>    </tr>    <tr>        <td>Banana </td>        <td><form:checkbox path="favoriteFruit" value="banana" /></td>    </tr>    <tr>        <td colspan="2">            <input type="submit" value="Submit"/>        </td>    </tr></table>  </form:form><br/><a href="${pageContext.request.contextPath}/">Main page</a></body></html></span>

food-result.jsp文件

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!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>Food result page</title></head><body><h1>Food result page</h1>You prefer:<br/><c:forEach var="fruit" items="${food.favoriteFruit}">${fruit}<br/></c:forEach><a href="${pageContext.request.contextPath}/">Main page</a></body></html>

index.jsp文件

<span style="font-size:12px;"><%@ page language="java" pageEncoding="UTF-8"%> <html><head><title>第一个JSP程序</title></head><body><h1>Home page</h1><p>This is Home page.</p><p><a href="food-page">Food page</a> <br /></p></body></html></span>
以上是程序运行相关代码,大部分代码相信都很容易看懂,这里我就简单的介绍下spring注解用到的三个关键字

@Controller:类级别上的注解,标注了@Controller后,借助<context:component-scan>,框架能自动识别到这是一个Controller,并注入到IOC中;

@RequestMapping:可以出现在类级别上,也可以出现在方法体上,用来实现方法体和Url请求的绑定;

下面是运行程序的配置文件(基于注解也是需要有基础配置的,只是不在需要配置具体的每个类和方法,而是指定使用spring的<context:component-scan>方法),每个文件的功能和“HzhJava框架配置三”中一样,就不在重复说明来了。

1、web.xml文本配置

<span style="font-size:12px;"><?xml version="1.0" encoding="UTF-8"?><web-app  id="WebApp_ID" version="3.0"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_3_0.xsd">        <!-- SpringMVC的前端控制器 -->     <!-- 当DispatcherServlet载入后,它将从一个XML文件中载入Spring的应用上下文,该XML文件的名字取决于<servlet-name> -->     <!-- 这里DispatcherServlet将试图从一个叫做springmvc-servlet.xml的文件中载入应用上下文,其默认位于WEB-INF目录下 -->     <!-- 所以ContextLoaderListener参数值也可写成<param-value>classpath:applicationContext-*.xml</param-value> -->     <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>             <!-- 使用ContextLoaderListener配置时,需要告诉它Spring配置文件的位置 -->     <!-- 如果没有指定,上下文载入器会在/WEB-INF/applicationContext.xml中找Spring配置文件 -->     <!-- 我们可以通过在Servlet上下文中设置contextConfigLocation参数,来为上下文载入器指定一个或多个Spring配置文件 -->     <!-- 注意:contextConfigLocation参数是一个用逗号分隔的路径列表,其路径是相对于Web系统的根路径的 -->     <context-param>         <param-name>contextConfigLocation</param-name>       <!--   <param-value>/WEB-INF/springmvc-servlet.xml</param-value> -->        <param-value>/WEB-INF/springmvc-servlet.xml, /WEB-INF/applicationContext-*.xml</param-value>     </context-param>              <!-- 配置上下文载入器 -->     <!-- 上下文载入器载入除DispatcherServlet载入的配置文件之外的其它上下文配置文件 -->     <!-- 最常用的上下文载入器是一个Servlet监听器,其名称为ContextLoaderListener -->     <listener>         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>     </listener>            <welcome-file-list>         <welcome-file>index.jsp</welcome-file>     </welcome-file-list>     </web-app></span>
2、springmvc-servlet.xml配置

<span style="font-size:12px;"><?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><!-- 把标记了@Controller注解的类转换为bean --><mvc:annotation-driven /><!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <context:component-scan base-package="com.sprmvc.controller" />         <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />  </beans></span>
3、applicationContent-view.xml配置

<span style="font-size:12px;"><?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: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/tx        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">            <!-- 【配置视图解析器】 -->     <!-- InternalResourceViewResolver会在ModelAndView返回的视图名前加上prefix指定的前缀,再在最后加上suffix指定的后缀 -->     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">         <property name="prefix" value="/WEB-INF/pages/"/>         <property name="suffix" value=".jsp"/>     </bean> </beans></span>
配置好上述文件后,启动服务器,在浏览器的地址栏里输入localhost:8080/HzhJava/


0 0