• 用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这个类不能遗忘了。

  • 相关阅读:
    Ubuntu 图形界面和终端切换
    docker 启动失败
    Windows 压缩文件到 Linux中解压文件名乱码
    PHP注释标记整理
    docker常用命令
    caffe初体验
    css中的单位
    js动态添加div
    Pycharm 2019 添加 docker 解释器
    常用的方法整理
  • 原文地址:https://www.cnblogs.com/1540340840qls/p/6669767.html
Copyright © 2020-2023  润新知