用Spring注解的方式实现对某个网页的访问

本案例的目标是加强对@Controller   @RequestMapping  @Resource  @Service 的感性认识,能过知道这几个注解是怎么用的,以及spring和springmvc的整合。

首先看一下本案例的总图:

上面的beans.xml的代码如下:它主要是对service层进行包扫描。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:mvc="http://www.springframework.org/schema/mvc"
 5     xmlns:context="http://www.springframework.org/schema/context"
 6     xsi:schemaLocation="http://www.springframework.org/schema/mvc
 7                         http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
 8                         http://www.springframework.org/schema/beans
 9                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
10                         http://www.springframework.org/schema/context
11                           http://www.springframework.org/schema/context/spring-context-3.0.xsd">
12                           
13     <!-- 对所有的service进行包扫描 -->
14     <context:component-scan base-package="com.qls.service"/>
15 </beans>

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:context="http://www.springframework.org/schema/context"
    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进行包扫描 -->
    <context:component-scan base-package="com.qls.controller"/>
    
    <!-- 内部资源视图解析器 -->
    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
  
</beans>

web.xml的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <!-- 以下是整合spring和springmvc 首先spring的配置,其次springmvc的配置-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:beans.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    <!-- spring的配置 -->
    
    <!-- springmvc的配置: -->
 <!-- 配置DispatcherServlet这个类 -->
 <servlet>
     <servlet-name>ouyangfeng</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <!-- 设置初始变量,指定类路径 -->
     <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:springmvc-servlet.xml</param-value>
     </init-param>
     
 </servlet>
 <servlet-mapping>
     <servlet-name>ouyangfeng</servlet-name>
     <url-pattern>*.do</url-pattern>
 </servlet-mapping>
</web-app>

ShowAllMemberController类代码如下:

 1 package com.qls.controller;
 2 
 3 import java.util.List;
 4 import java.util.Map;
 5 
 6 import javax.annotation.Resource;
 7 
 8 import org.springframework.stereotype.Controller;
 9 import org.springframework.web.bind.annotation.RequestMapping;
10 
11 import com.qls.domain.Student;
12 import com.qls.service.ShowAllMemberService;
13 
14 @Controller
15 /**
16  * @Controller这个注解声明这个类是一个控制器Controller.
17  * 但前提必须是在配置文件中进行包扫描。即:
18  * <context:component-scan base-package="com.qls.controller">
19  * 其中base-package中的com.qls.controller是ShowAllMemberController这个类所在的包。
20  */
21 @RequestMapping("/ouyangfeng")
22 /**
23  * 对这个类ShowAllMemberController进行映射。
24  * 其实这句话相当于配置文件中的
25  * <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
26 " name="ouyangfeng">
27  * </bean>
28  * 如果不在类上面写上这句话:
29  * @RequestMapping("/ouyangfeng");则其默认以类名进行映射的.即@RequestMapping("/showAllMemberController");
30  */
31 public class ShowAllMemberController {
32     @Resource
33     ShowAllMemberService showAllMemberService;
34     //这个RequestMapping()之所以写成.do的形式是因为在web.xml中配置DispatcherServlet这个类时写成.do的形式。
35     @RequestMapping("/listAll.do")
36     public String listAll(Map<String,Object> model){
37         List<Student> listAll = ShowAllMemberService.listAll();
38         model.put("sixi", listAll);
39         return "showAllMember";//这是个逻辑名。
40     }
41 }

ShowAllMemberService类的代码如下:

 1 package com.qls.service;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 
 8 import org.springframework.stereotype.Service;
 9 
10 import com.qls.domain.Student;
11 
12 @Service
13 /**
14  * @Service这个注解说明这个类是Service层的,这个层是处理一些业务逻辑的。
15  * 前提条件必须也要在配置文件进行配置:包扫描
16  * 即:<context:component-scan base-package="com.qls.service">
17  * 对service进行包扫描一般是放在beans.xml中。不和springmvc-servlet.xml放在一块写。
18  */
19 public class ShowAllMemberService {
20     //把map集合中放入10条数据:
21     private Integer id=0;
22     private static Map<Integer,Student> map=new HashMap<Integer, Student>();
23     //利用静态代码块把map中添加十条数据:
24     static{
25         for (int i = 0; i < 10; i++) {
26             Student student = new Student();
27             student.setId(i);
28             student.setName("tony"+i);
29             student.setId(20+i);
30             map.put(i, student);//这句话很重要,不要遗忘了。
31         }
32     }
33     //获取所有的记录:
34     public static List<Student> listAll(){
35         //把map集合放入ArrayList中。
36         return new ArrayList<Student>(map.values());
37     }
38 }

showAllMember.jsp的代码如下:

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
 3 <%
 4 String path = request.getContextPath();
 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6 %>
 7 
 8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 9 <html>
10   <head>
11     <base href="<%=basePath%>">
12     
13     <title>My JSP 'showAllMember.jsp' starting page</title>
14     
15     <meta http-equiv="pragma" content="no-cache">
16     <meta http-equiv="cache-control" content="no-cache">
17     <meta http-equiv="expires" content="0">    
18     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
19     <meta http-equiv="description" content="This is my page">
20     <!--
21     <link rel="stylesheet" type="text/css" href="styles.css">
22     -->
23 
24   </head>
25   
26   <body>&nbsp; 
27     This is my show all member page. <br>
28     显示所有的人员:<br>
29      <table border="1">
30         <tr>
31             <td>序号</td>
32             <td>姓名</td>
33             <td>年龄</td>
34         </tr>
35         <c:forEach items="${sixi}" var="s">
36             <tr>
37             <td>${s.id+1}</td>
38             <td>${s.name}</td>
39             <td>${s.age}</td>
40         </tr>
41         </c:forEach>
42         
43     </table>
44   </body>
45 </html>

总结:1.通过上面的例子我们可以知道,访问一个web项目最重要的就是Controller。上面的Controller类通过注解@Resource调用了Service层的方法。

由此我们可以知道单独把Service层提取出来,是为了避免Controller(控制器层)显得过于多。不便以后维护。

2.@RequestMapping 翻译成中文就是请求映射,相当于配置文件中BeanNameUrlHandlerMapping.没有其他作用了。

@Controller.  @Service 只要对其进行包扫描spring 容器会自然把相应的类看成Controller 和Service,这个不需要程序员担心。

3.在整合Spring和springmvc是只需在web.xml文件中加上以下代码前提是你已经配置好了DispatchServlet这个类了。

1 <!-- 以下是整合spring和springmvc 首先spring的配置,其次springmvc的配置-->
2     <context-param>
3         <param-name>contextConfigLocation</param-name>
4         <param-value>classpath:beans.xml</param-value>
5     </context-param>
6     <listener>
7         <listener-class>org.springframework.web.context.ContextLoaderListener
8         </listener-class>
9     </listener>

特别是这个ContextLoaderListener这个类不能遗忘了。

 

posted @ 2017-04-05 17:35  技术让世界更精彩  阅读(560)  评论(0编辑  收藏  举报