zoukankan      html  css  js  c++  java
  • spring mvc

    Spring MVC 注解开发备忘录

    此文章不是Spirng MVC讲解,相关文章大家可以自行Google。

    先来看一下Spring MVC注解开发中常用标签,如下表:

    编号

    注解

    说明

    位置

    备注

    1

    @Controller

    将类变成Spring Bean

    现阶段@Controller、@Service 以及 @Repository 和 @Component 注解的作用是等价的

    2

    @RequestMapping

    请求映射

    类、方法

    标注在类上意指类实现Controller接口

    标注在方法上意指扩展Spring预定义Controller (如:SimpleFormController)

    3

    @RequestParam

    入参绑定URL

    入参

    指定URL参数与方法入参的绑定规则

    4

    @SessionAttributes

    设定Session范围属性

    如:@SessionAttributes("user"),将把ModelMap中的user属性添加到Session范围

    5

    @InitBinder

    注册 Controller 级的自定义属性编辑器

    方法

    @InitBinder 注解的方法必须拥有一个 WebDataBinder 类型的入参,以便 Spring MVC 框架将注册属性编辑器的 WebDataBinder 对象传递进来

    6

    @ModelAttribute

    准备引用数据/将ModelMap属性绑定到入参

    方法、入参

    标注在方法上:准备引用数据

    标注在入参上:将ModelMap中的属性绑定到请求处理方法的入参中

    再来看一下Controller中方法的入参类型:

    编号

    请求处理方法入参的可选类型

    说明

    1

    Java 基本数据类型和 String

    默认情况下将按名称匹配的方式绑定到 URL 参数上,可以通过 @RequestParam 注解改变默认的绑定规则

    2

    request/response/session

    既可以是 Servlet API  的也可以是 Portlet  API 对应的对象,Spring 会将它们绑定到 Servlet 和 Portlet 容器的相应对象上

    3

    org.springframework.web.context.request.WebRequest

    内部包含了 request 对象

    4

    java.io.InputStream/java.io.Reader

    可以借此访问 request 的内容

    5

    java.io.OutputStream / java.io.Writer

    可以借此操作 response 的内容

    6

    任何标注了 @RequestParam  注解的入参

    被标注@RequestParam 注解的入参将绑定到特定的request 参数上。

    7

    java.util.Map / org.springframework.ui.ModelMap

    它绑定 Spring MVC 框架中每个请求所创建的潜在的模型对象,它们可以被 Web 视图对象访问(如 JSP)

    8

    命令/表单对象(注:一般称绑定使用 HTTP GET  发送的 URL 参数的对象为命令对象,而称绑定使用 HTTP  POST 发送的 URL 参数的对象为表单对象)

    它们的属性将以名称匹配的规则绑定到 URL 参数上,同时完成类型的转换。而类型转换的规则可以通过 @InitBinder 注解或通过 HandlerAdapter 的配置进行调整

    9

    org.springframework.validation.Errors /  org.springframework.validation.BindingResult

    为属性列表中的命令/表单对象的校验结果,注意检验结果参数必须紧跟在命令/表单对象的后面

    10

    rg.springframework.web.bind.support.SessionStatus

    可以通过该类型 status 对象显式结束表单的处理,这相当于触发session 清除其中的通过@SessionAttributes 定义的属性

    再来看一下Controller中方法的返回类型:

    编号

    请求处理方法入参的可选类型

    说明

    1

    void

    此时逻辑视图名由请求处理方法对应的 URL 确定,如以下的方法:

    @RequestMapping("/welcome.do")

    public void welcomeHandler() {

    }

    对应的逻辑视图名为“welcome”

    2

    String

    此时逻辑视图名为返回的字符,如以下的方法:

    @RequestMapping(method = RequestMethod.GET)

    public String  setupForm(@RequestParam("ownerId") int ownerId, ModelMap model) {

          Owner  owner = this.clinic.loadOwner(ownerId);

          model.addAttribute(owner);

          return  "ownerForm";

    }

    对应的逻辑视图名为“ownerForm”

    3

    org.springframework.ui.ModelMap

    和返回类型为 void 一样,逻辑视图名取决于对应请求的 URL,如下面的例子:

    @RequestMapping("/vets.do")

    public ModelMap vetsHandler() {

          return  new ModelMap(this.clinic.getVets());

    }

    对应的逻辑视图名为“vets”,返回的 ModelMap 将被作为请求对应的模型对象,可以在 JSP 视图页面中访问到。

    4

    org.springframework.web.servlet.ModelAndView

    当然还可以是传统的ModelAndView。

    具体使用请参考如下LoginController

    Java代码
    1. package com.zhang.controller.anno; 
    2.  
    3. import javax.servlet.ServletRequest; 
    4. import javax.servlet.http.HttpSession; 
    5.  
    6. import org.springframework.stereotype.Controller; 
    7. import org.springframework.ui.ModelMap; 
    8. import org.springframework.validation.BindingResult; 
    9. import org.springframework.web.bind.annotation.ModelAttribute; 
    10. import org.springframework.web.bind.annotation.RequestMapping; 
    11. import org.springframework.web.bind.annotation.RequestMethod; 
    12. import org.springframework.web.bind.annotation.SessionAttributes; 
    13. import org.springframework.web.bind.support.SessionStatus; 
    14. import org.springframework.web.servlet.ModelAndView; 
    15. import org.springframework.web.servlet.view.RedirectView; 
    16.  
    17. import com.zhang.bean.User; 
    18. import com.zhang.validator.UserValidator; 
    19.  
    20. @Controller 
    21. // 声明为Spring Bean 
    22. @SessionAttributes({ "usersession","testSession" }) 
    23. // 将model特定属性绑定到session中 
    24. public class LoginController { 
    25.  
    26.     /**
    27.      * 此方法判断参数中是否包含"CE"字参数,如果包换将CE参数放入Model中,并渲染login视图
    28.      *
    29.      * 这里仅仅为测试使用,获取Redirect后的URL参数放入model中再转发出去
    30.      *
    31.      * @param request
    32.      * @param model
    33.      * @return
    34.      */ 
    35.     @RequestMapping(value = "/login2.htm", params = { "CE" }, method = RequestMethod.GET) 
    36.     public String redirect(ServletRequest request, ModelMap model) { 
    37.         model.addAttribute("user", new User()); 
    38.         String ce; 
    39.         try { 
    40.             ce = new String(request.getParameter("CE").getBytes("ISO-8859-1"), 
    41.                     "utf8"); 
    42.             model.addAttribute("CE", ce); 
    43.         } catch (Exception e) { 
    44.             e.printStackTrace(); 
    45.         } 
    46.  
    47.         return "login"; 
    48.     } 
    49.  
    50.     /**
    51.      *
    52.      * 此方法为login.htm首页面使用
    53.      *
    54.      * 因为login中需要User信息回显(校验),故此处需必须传入一个空User 否则页面报异常
    55.      *
    56.      * @param request
    57.      * @param model
    58.      * @return
    59.      */ 
    60.     @RequestMapping(value = "/login2.htm", method = RequestMethod.GET) 
    61.     public String test(ServletRequest request, ModelMap model) { 
    62.         model.addAttribute("user", new User()); 
    63.         return "login"; 
    64.     } 
    65.  
    66.     /**
    67.      *
    68.      * @param session
    69.      *            Http Session
    70.      * @param user
    71.      *            表单模型User,@ModelAttribute表示user来源于model(requestsession)
    72.      * @param result
    73.      *            表单验证结果,必须放在user之后
    74.      * @param model
    75.      *            数据模型
    76.      * @param status
    77.      *            可清除由@SessionAttributes定义的session范围的属性
    78.      * @return
    79.      */ 
    80.  
    81.     @RequestMapping(value = "login2.htm", method = RequestMethod.POST) 
    82.     public ModelAndView login(HttpSession session, ServletRequest request, 
    83.             @ModelAttribute("user") User user, BindingResult result, 
    84.             ModelMap model, SessionStatus status) { 
    85.         ModelAndView ret = new ModelAndView(); 
    86.         // 验证用户,此处UserValidator为自定义验证类 
    87.         new UserValidator().validate(user, result); 
    88.         if (!result.hasErrors()) {// 如果校验通过,重定向到指定页面 
    89.             model.addAttribute("CE", "测试"); 
    90.             ret.setView(new RedirectView("login.htm")); 
    91.         } else { 
    92.             ret.setViewName("login"); 
    93.         } 
    94.  
    95.         /*
    96.          * 测试@SessionAttributes
    97.          */ 
    98.  
    99.         // 第一次为空 
    100.         String sessionValue = (String) session.getAttribute("testSession"); 
    101.         System.out.println("sessionValue:" + sessionValue); 
    102.         // 将值放入模型(request范围),同时由于@SessionAttributes的作用,也放入了session范围 
    103.         model.addAttribute("testSession", "My_SessionValue"); 
    104.  
    105.         /*
    106.          * 测试@SessionAttributes结束
    107.          */ 
    108.  
    109.         // status.setComplete();//清除此次请求@SessionAttributes 
    110.         // 指定的session值(此处没有作用,因为user并未绑定到session) 
    111.         try { 
    112.             // request.setCharacterEncoding("utf8");//可以使用此方法避免Post乱码,或者配置filter 
    113.         } catch (Exception e) { 
    114.             e.printStackTrace(); 
    115.         } 
    116.         return ret; 
    117.     } 
    package com.zhang.controller.anno;
    
    import javax.servlet.ServletRequest;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.SessionAttributes;
    import org.springframework.web.bind.support.SessionStatus;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.view.RedirectView;
    
    import com.zhang.bean.User;
    import com.zhang.validator.UserValidator;
    
    @Controller
    // 声明为Spring Bean
    @SessionAttributes({ "usersession","testSession" })
    // 将model特定属性绑定到session中
    public class LoginController {
    
    	/**
    	 * 此方法判断参数中是否包含"CE"字参数,如果包换将CE参数放入Model中,并渲染login视图
    	 * 
    	 * 这里仅仅为测试使用,获取Redirect后的URL参数放入model中再转发出去
    	 * 
    	 * @param request
    	 * @param model
    	 * @return
    	 */
    	@RequestMapping(value = "/login2.htm", params = { "CE" }, method = RequestMethod.GET)
    	public String redirect(ServletRequest request, ModelMap model) {
    		model.addAttribute("user", new User());
    		String ce;
    		try {
    			ce = new String(request.getParameter("CE").getBytes("ISO-8859-1"),
    					"utf8");
    			model.addAttribute("CE", ce);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    		return "login";
    	}
    
    	/**
    	 * 
    	 * 此方法为login.htm首页面使用
    	 * 
    	 * 因为login中需要User信息回显(校验),故此处需必须传入一个空User 否则页面报异常
    	 * 
    	 * @param request
    	 * @param model
    	 * @return
    	 */
    	@RequestMapping(value = "/login2.htm", method = RequestMethod.GET)
    	public String test(ServletRequest request, ModelMap model) {
    		model.addAttribute("user", new User());
    		return "login";
    	}
    
    	/**
    	 * 
    	 * @param session
    	 *            Http Session
    	 * @param user
    	 *            表单模型User,@ModelAttribute表示user来源于model(requestsession)
    	 * @param result
    	 *            表单验证结果,必须放在user之后
    	 * @param model
    	 *            数据模型
    	 * @param status
    	 *            可清除由@SessionAttributes定义的session范围的属性
    	 * @return
    	 */
    
    	@RequestMapping(value = "login2.htm", method = RequestMethod.POST)
    	public ModelAndView login(HttpSession session, ServletRequest request,
    			@ModelAttribute("user") User user, BindingResult result,
    			ModelMap model, SessionStatus status) {
    		ModelAndView ret = new ModelAndView();
    		// 验证用户,此处UserValidator为自定义验证类
    		new UserValidator().validate(user, result);
    		if (!result.hasErrors()) {// 如果校验通过,重定向到指定页面
    			model.addAttribute("CE", "测试");
    			ret.setView(new RedirectView("login.htm"));
    		} else {
    			ret.setViewName("login");
    		}
    
    		/*
    		 * 测试@SessionAttributes
    		 */
    
    		// 第一次为空
    		String sessionValue = (String) session.getAttribute("testSession");
    		System.out.println("sessionValue:" + sessionValue);
    		// 将值放入模型(request范围),同时由于@SessionAttributes的作用,也放入了session范围
    		model.addAttribute("testSession", "My_SessionValue");
    
    		/*
    		 * 测试@SessionAttributes结束
    		 */
    
    		// status.setComplete();//清除此次请求@SessionAttributes
    		// 指定的session值(此处没有作用,因为user并未绑定到session)
    		try {
    			// request.setCharacterEncoding("utf8");//可以使用此方法避免Post乱码,或者配置filter
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return ret;
    	}
    }
    

    web.xml配置

    Xml代码
    1. <?xml version="1.0" encoding="UTF-8"?> 
    2. <!-- 在tomcat5.5下运行,需要使用Servlet 2.4版本(jstl1.1.jar,standard.jar)tomcat6可以使用默认的2.5 --> 
    3. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
    4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
    6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    7.     <display-name></display-name> 
    8.  
    9.     <!-- 注册配置文件读取器 --> 
    10.     <listener> 
    11.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    12.     </listener> 
    13.      
    14.     <!-- 添加Spring过滤器,解决POST时乱码问题,但GET方式需要自己手工处理 --> 
    15.     <filter> 
    16.         <filter-name>Set Character Encoding</filter-name> 
    17.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    18.         <init-param> 
    19.             <param-name>encoding</param-name> 
    20.             <param-value>utf8</param-value> 
    21.         </init-param> 
    22.     </filter> 
    23.     <filter-mapping> 
    24.         <filter-name>Set Character Encoding</filter-name> 
    25.         <url-pattern>/*</url-pattern> 
    26.     </filter-mapping> 
    27.  
    28.     <!-- 配置文件列表,加载相关xml文件,其中springapp-servlet.xml可以不配置,DispatcherServlet配置中会自动加载 --> 
    29.     <context-param> 
    30.         <param-name>contextConfigLocation</param-name> 
    31.         <param-value>classpath:applicationContext.xml</param-value> 
    32.     </context-param> 
    33.  
    34.  
    35.     <!-- Spring MVC 的Servlet,它将加载WEB-INF/xxx-servlet.xml 的 配置文件,以启动Spring MVC模块 --> 
    36.     <servlet> 
    37.         <servlet-name>springapp</servlet-name> 
    38.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    39.         <load-on-startup>1</load-on-startup> 
    40.     </servlet> 
    41.     <servlet-mapping> 
    42.         <servlet-name>springapp</servlet-name> 
    43.         <url-pattern>*.htm</url-pattern> 
    44.     </servlet-mapping> 
    45.  
    46.     <!-- 使用Srping 标签时需配置 --> 
    47.     <jsp-config> 
    48.         <taglib> 
    49.             <taglib-uri>/spring</taglib-uri> 
    50.             <taglib-location>/WEB-INF/tld/spring-form.tld</taglib-location> 
    51.         </taglib> 
    52.     </jsp-config> 
    53.  
    54.     <welcome-file-list> 
    55.         <welcome-file>index.jsp</welcome-file> 
    56.     </welcome-file-list> 
    57. </web-app> 
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 在tomcat5.5下运行,需要使用Servlet 2.4版本(jstl1.1.jar,standard.jar)tomcat6可以使用默认的2.5 -->
    <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">
    	<display-name></display-name>
    
    	<!-- 注册配置文件读取器 -->
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>
    	
    	<!-- 添加Spring过滤器,解决POST时乱码问题,但GET方式需要自己手工处理 -->
    	<filter>
    		<filter-name>Set Character Encoding</filter-name>
    		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    		<init-param>
    			<param-name>encoding</param-name>
    			<param-value>utf8</param-value>
    		</init-param>
    	</filter>
    	<filter-mapping>
    		<filter-name>Set Character Encoding</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    
    	<!-- 配置文件列表,加载相关xml文件,其中springapp-servlet.xml可以不配置,DispatcherServlet配置中会自动加载 -->
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>classpath:applicationContext.xml</param-value>
    	</context-param>
    
    
    	<!-- Spring MVC 的Servlet,它将加载WEB-INF/xxx-servlet.xml 的 配置文件,以启动Spring MVC模块 -->
    	<servlet>
    		<servlet-name>springapp</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>springapp</servlet-name>
    		<url-pattern>*.htm</url-pattern>
    	</servlet-mapping>
    
    	<!-- 使用Srping 标签时需配置 -->
    	<jsp-config>
    		<taglib>
    			<taglib-uri>/spring</taglib-uri>
    			<taglib-location>/WEB-INF/tld/spring-form.tld</taglib-location>
    		</taglib>
    	</jsp-config>
    
    	<welcome-file-list>
    		<welcome-file>index.jsp</welcome-file>
    	</welcome-file-list>
    </web-app>
    

    下面给出Spring MVC 相关配置文件

    springapp-servlet.xml

    Xml代码
    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" xmlns:p="http://www.springframework.org/schema/p" 
    4.     xmlns:context="http://www.springframework.org/schema/context" 
    5.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
    6.     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
    7.     http://www.springframework.org/schema/context  
    8.     http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 
    9.  
    10.     <!-- 1:对web包中指定包中所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --> 
    11.     <context:component-scan base-package="com.zhang.controller.anno" /> 
    12.  
    13.     <!-- 2:启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> 
    14.     <bean 
    15.         class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> 
    16.  
    17.     <!-- Spirng 默认启动三个apapter 如果自定义了一个会忽略其他的,当 beanNameUrlMapping 与annotation同时存在时要显示声明  
    18.         所有 即:当注解形式与声明形式同时开发时需要执行一下三行 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"  
    19.         /> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"  
    20.         /> <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"  
    21.         /> --> 
    22.  
    23.  
    24.     <!-- 3:对模型视图名称的解析,即在模型视图名称添加前后缀 --> 
    25.     <bean id="viewResolver" 
    26.         class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    27.         <property name="viewClass"> 
    28.             <value>org.springframework.web.servlet.view.JstlView</value> 
    29.         </property> 
    30.         <property name="prefix"> 
    31.             <value>/WEB-INF/jsp/</value> 
    32.         </property> 
    33.         <property name="suffix"> 
    34.             <value>.jsp</value> 
    35.         </property> 
    36.     </bean> 
    37.  
    38.     <!-- 定义消息源,用于国际化 --> 
    39.     <bean id="messageSource" 
    40.         class="org.springframework.context.support.ResourceBundleMessageSource"> 
    41.         <property name="basename"> 
    42.             <value>messages</value> 
    43.         </property> 
    44.     </bean> 
    45. </beans> 
    <?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:p="http://www.springframework.org/schema/p"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    
    	<!-- 1:对web包中指定包中所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
    	<context:component-scan base-package="com.zhang.controller.anno" />
    
    	<!-- 2:启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
    	<bean
    		class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
    
    	<!-- Spirng 默认启动三个apapter 如果自定义了一个会忽略其他的,当 beanNameUrlMapping 与annotation同时存在时要显示声明 
    		所有 即:当注解形式与声明形式同时开发时需要执行一下三行 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" 
    		/> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" 
    		/> <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" 
    		/> -->
    
    
    	<!-- 3:对模型视图名称的解析,即在模型视图名称添加前后缀 -->
    	<bean id="viewResolver"
    		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<property name="viewClass">
    			<value>org.springframework.web.servlet.view.JstlView</value>
    		</property>
    		<property name="prefix">
    			<value>/WEB-INF/jsp/</value>
    		</property>
    		<property name="suffix">
    			<value>.jsp</value>
    		</property>
    	</bean>
    
    	<!-- 定义消息源,用于国际化 -->
    	<bean id="messageSource"
    		class="org.springframework.context.support.ResourceBundleMessageSource">
    		<property name="basename">
    			<value>messages</value>
    		</property>
    	</bean>
    </beans>
    

    视图部分文件:

    include.jsp

    Java代码
    1. <%@ page session="false"%> 
    2. <%@ page isELIgnored ="true" %> 
    3. <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 
    4. <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %> 
    <%@ page session="false"%>
    <%@ page isELIgnored ="true" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
    

    login.jsp

    Java代码
    1. <%@ include file="/WEB-INF/jsp/include.jsp"%> 
    2. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
    3. <%@ page contentType="text/html; charset=utf8"%> 
    4. <html> 
    5.     <head> 
    6.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    7.         <style type="text/css"> 
    8. .error { 
    9.     color: red; 
    10. </style> 
    11.         <title>Login</title> 
    12.     </head> 
    13.     <body> 
    14.         <form:form method="post" commandName="user"> 
    15.             <table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" 
    16.                 cellpadding="5"> 
    17.                 <tr> 
    18.                     <td align="left" width="30%"> 
    19.                         username: 
    20.                         <form:input path="username" /> 
    21.                     </td> 
    22.  
    23.                     <td width="30%"> 
    24.                         <form:errors path="username" /> 
    25.                     </td> 
    26.                 </tr> 
    27.                 <tr> 
    28.                     <td align="left" width="30%"> 
    29.                         password: 
    30.                         <form:input path="password" /> 
    31.                     </td> 
    32.                     <td width="30%"> 
    33.                         <form:errors path="password" /> 
    34.                     </td> 
    35.                 </tr> 
    36.                 <tr> 
    37.                     <td> 
    38.                         <form:errors path="validatorMessage" /> 
    39.                     </td> 
    40.                 </tr> 
    41.  
    42.             </table> 
    43.             <input type="submit" value="Execute"> 
    44.         </form:form> 
    45.         <a href="<c:url value="hello.htm"/>">Home</a> 
    46.         <c:out value="${CE}"></c:out> 
    47.     </body> 
    48. </html> 
    <%@ include file="/WEB-INF/jsp/include.jsp"%>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
    <%@ page contentType="text/html; charset=utf8"%>
    <html>
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    		<style type="text/css">
    .error {
    	color: red;
    }
    </style>
    		<title>Login</title>
    	</head>
    	<body>
    		<form:form method="post" commandName="user">
    			<table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0"
    				cellpadding="5">
    				<tr>
    					<td align="left" width="30%">
    						username:
    						<form:input path="username" />
    					</td>
    
    					<td width="30%">
    						<form:errors path="username" />
    					</td>
    				</tr>
    				<tr>
    					<td align="left" width="30%">
    						password:
    						<form:input path="password" />
    					</td>
    					<td width="30%">
    						<form:errors path="password" />
    					</td>
    				</tr>
    				<tr>
    					<td>
    						<form:errors path="validatorMessage" />
    					</td>
    				</tr>
    
    			</table>
    			<input type="submit" value="Execute">
    		</form:form>
    		<a href="<c:url value="hello.htm"/>">Home</a>
    		<c:out value="${CE}"></c:out>
    	</body>
    </html>
  • 相关阅读:
    WIN10X64LTSC2019中度精简版by双心
    MACbook安装WIN7后亮度调节的办法
    MACbook安装WIN7中文版后乱码的解决办法
    MACbook关机开机的咚咚咚声音
    MacBook安装WIN7开机黑屏的解决办法
    小马激活的问题
    安装WIN7系统备忘录
    win7 64位平台编译的程序在XP 32位平台无法运行的解决方法
    for循环包含多个双引号怎么办?windows
    windows下sed回车换行符处理
  • 原文地址:https://www.cnblogs.com/123a/p/3240582.html
Copyright © 2011-2022 走看看