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

一个基于注解的简单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;
@Controller
public 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.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
			">
	<!-- 把标记了@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/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值