• 用Spring MVC开发简单的Web应用程序


    1 工具与环境

        借助Eclipse4.3 + Maven3.0.3构建Java Web应用程序。使用Maven内置的servlet 容器jetty,不需手工集成Web服务器到Eclipse。还帮我们自动创建Java EE规范定义的Java Web应用程序的有效目录结构,如:WEB-INF/classes目录等,方便省心。当然Maven还有其他优秀的功能,这里不会详细介绍。pom.xml的内容可见第6小节。

        接下来将介绍如果使用Spring MVC开发简单的Web应用程序,就从创建配置文件开始。

    2 创建配置文件

    2.1 配置前端控制器DispatchServlet

        在web.xml中,定义一个类型为DispatcherServlet的Servlet。这是Spring MVC的核心Servlet类,它负责接受Web请求,并将它们分发到相应的处理程序中去。代码如下:

    Xml代码  收藏代码
    1. <servlet>  
    2.         <servlet-name>dispatcherServlet</servlet-name>  
    3.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    4.         <!-- 初始化参数 :确定spring-servlet。xml文件路径 -->  
    5.         <init-param>  
    6.             <param-name>contextConfigLocation</param-name>  
    7.             <param-value>/WEB-INF/spring-servlet.xml</param-value>  
    8.         </init-param>  
    9.         <load-on-startup>1</load-on-startup>  
    10.     </servlet>  
    11.     <!-- 拦截所有以 /mvc/开始的请求 -->  
    12.     <servlet-mapping>  
    13.         <servlet-name>dispatcherServlet</servlet-name>  
    14.         <url-pattern>/mvc/*</url-pattern>  
    15.     </servlet-mapping>  

    2.2 配置spring-servlet.xml文件路径

        Spring-servlet.xml是一个标准的Spring Bean配置文件,内容如上一节。

    3 创建Spring MVC控制器

        Controller接口是Spring MVC中所有控制器类的基本接口。通过实现这个接口,你可以创建自己的控制器。代码如下:

    Java代码  收藏代码
    1. package org.mahz.springmvc;  
    2. import java.util.HashMap;  
    3. import java.util.Map;  
    4. import javax.servlet.http.HttpServletRequest;  
    5. import javax.servlet.http.HttpServletResponse;  
    6. import org.springframework.web.servlet.ModelAndView;  
    7. import org.springframework.web.servlet.mvc.Controller;  
    8.   
    9. public class IndexAction implements Controller {  
    10.     private String username;  
    11.     private String viewPage;  
    12.     @Override  
    13.     public ModelAndView handleRequest(HttpServletRequest request,  
    14.             HttpServletResponse response) throws Exception {  
    15.         Map<String, String> model = new HashMap<String, String>();  
    16.         model.put("username", getUsername());  
    17.         return new ModelAndView(getViewPage(), model);  
    18.     }  
    19.     public String getUsername() {  
    20.         return username;  
    21.     }  
    22.     public void setUsername(String username) {  
    23.         this.username = username;  
    24.     }  
    25.     public String getViewPage() {  
    26.         return viewPage;  
    27.     }  
    28.     public void setViewPage(String viewPage) {  
    29.         this.viewPage = viewPage;  
    30.     }  
    31. }  

           在handleRequest()方法中,可以随意地处理Web请求,就像在Servlet中一样。最后必须返回一个ModelAndView对象,其中包含视图名称或者视图对象,以及一些模型属性。

        创建好控制器类后,必须在Web应用程序上下文中声明它的实例。由于这是表现层组件,所以应该在spring-servlet.xml中声明它。代码如下:

    Java代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >  
    2. <beans>  
    3.     <!-- 定义映射 -->  
    4.     <bean id="urlMapping"  
    5.         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
    6.         <property name="mappings">  
    7.             <props>  
    8.                 <prop key="index">indexAction</prop>  
    9.             </props>  
    10.         </property>  
    11.     </bean>  
    12.     <!-- 定义视图 -->  
    13.     <bean id="viewResolver"  
    14.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    15.         <property name="viewClass">  
    16.             <value>org.springframework.web.servlet.view.InternalResourceView</value>  
    17.         </property>  
    18.     </bean>  
    19.     <!-- 定义控制器 -->  
    20.     <bean id="indexAction" class="org.mahz.springmvc.IndexAction">  
    21.         <property name="username">  
    22.             <value>刘平</value>  
    23.         </property>  
    24.         <property name="viewPage">  
    25.             <value>/index.jsp</value>  
    26.         </property>  
    27.     </bean>  
    28. </beans>    

    4 创建JSP视图

        在webapp目录下创建index.jsp文件,内容如下:

    Jsp代码  收藏代码
    1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
    2.     pageEncoding="UTF-8"%>  
    3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    4. <html>  
    5. <head>  
    6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    7. <title>Insert title here</title>  
    8. </head>  
    9.  <% String str = (String)request.getAttribute("username"); %>    
    10. <body>  
    11. <H1><%=str%>,欢迎你!</H1>  
    12. </body>  
    13. </html>  

    5 部署Web应用程序

        在Maven使用jetty:run部署Web应用程序。

        在浏览器中输入链接:http://localhost:8080/springmvc/mvc/index

    6 pom.xml

        pom.xml文件中,包括项目的基本系统、Spring MVC所需要的依赖信息、项目的编译插件和jetty插件信息。内容如下:

    Xml代码  收藏代码
    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
    3.     <modelVersion>4.0.0</modelVersion>  
    4.     <groupId>org.huazhen</groupId>  
    5.     <artifactId>springmvc</artifactId>  
    6.     <version>0.0.1-SNAPSHOT</version>  
    7.     <packaging>war</packaging>  
    8.     <name>springmvc</name>  
    9.     <!-- 属性配置 -->  
    10.     <properties>  
    11.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
    12.         <junit.version>4.10</junit.version>  
    13.         <spring.version>2.5.6</spring.version>  
    14.     </properties>  
    15.     <!-- 依赖配置 -->  
    16.     <dependencies>  
    17.         <!-- servlet -->  
    18.         <dependency>  
    19.             <groupId>javax.servlet</groupId>  
    20.             <artifactId>servlet-api</artifactId>  
    21.             <version>2.5</version>  
    22.         </dependency>  
    23.         <!-- junit -->  
    24.         <dependency>  
    25.             <groupId>junit</groupId>  
    26.             <artifactId>junit</artifactId>  
    27.             <version>${junit.version}</version>  
    28.             <scope>test</scope>  
    29.         </dependency>  
    30.         <!-- Freemarker -->  
    31.         <dependency>  
    32.             <groupId>org.freemarker</groupId>  
    33.             <artifactId>freemarker</artifactId>  
    34.             <version>2.3.18</version>  
    35.         </dependency>  
    36.         <!-- spring -->  
    37.         <dependency>  
    38.             <groupId>org.springframework</groupId>  
    39.             <artifactId>spring-tx</artifactId>  
    40.             <version>${spring.version}</version>  
    41.         </dependency>  
    42.         <dependency>  
    43.             <groupId>org.springframework</groupId>  
    44.             <artifactId>spring-aop</artifactId>  
    45.             <version>${spring.version}</version>  
    46.         </dependency>  
    47.         <dependency>  
    48.             <groupId>org.springframework</groupId>  
    49.             <artifactId>spring-webmvc</artifactId>  
    50.             <version>${spring.version}</version>  
    51.         </dependency>  
    52.         <dependency>  
    53.             <groupId>commons-logging</groupId>  
    54.             <artifactId>commons-logging</artifactId>  
    55.             <version>1.1.1</version>  
    56.         </dependency>  
    57.     </dependencies>  
    58.     <build>  
    59.         <finalName>springmvc</finalName>  
    60.         <plugins>  
    61.             <plugin>  
    62.                 <groupId>org.apache.maven.plugins</groupId>  
    63.                 <artifactId>maven-compiler-plugin</artifactId>  
    64.                 <version>2.5.1</version>  
    65.                 <configuration>  
    66.                     <source>1.6</source>  
    67.                     <target>1.6</target>  
    68.                 </configuration>  
    69.             </plugin>  
    70.             <plugin>  
    71.                 <groupId>org.mortbay.jetty</groupId>  
    72.                 <artifactId>maven-jetty-plugin</artifactId>  
    73.                 <version>6.1.26</version>  
    74.                 <configuration>  
    75.                     <scanIntervalSeconds>10</scanIntervalSeconds>  
    76.                     <stopKey>foo</stopKey>  
    77.                     <stopPort>9999</stopPort>  
    78.                 </configuration>  
    79.                 <executions>  
    80.                     <execution>  
    81.                         <id>start-jetty</id>  
    82.                         <phase>pre-integration-test</phase>  
    83.                         <goals>  
    84.                             <goal>run</goal>  
    85.                         </goals>  
    86.                         <configuration>  
    87.                             <scanIntervalSeconds>0</scanIntervalSeconds>  
    88.                             <daemon>true</daemon>  
    89.                         </configuration>  
    90.                     </execution>  
    91.                     <execution>  
    92.                         <id>stop-jetty</id>  
    93.                         <phase>post-integration-test</phase>  
    94.                         <goals>  
    95.                             <goal>stop</goal>  
    96.                         </goals>  
    97.                     </execution>  
    98.                 </executions>  
    99.             </plugin>  
    100.         </plugins>  
    101.     </build>  
    102. </project>  
  • 相关阅读:
    记一次x87 FPU寄存器栈溢出
    从Unit Bezier的实现学习两种经典数值求解算法
    OI Memory 后记(1):IOI2021 漫谈
    Solution -「BZOJ #3786」星系探索
    Solution -「UOJ #46」玄学
    Solution -「多校联训」神
    Solution -「多校联训」自动机
    Solution -「多校联训」取石子游戏
    Solution -「HDU 6875」Yajilin
    Solution -「多校联训」最小点覆盖
  • 原文地址:https://www.cnblogs.com/zhangchuan210/p/3270699.html
Copyright © 2020-2023  润新知