Unit04: 实战技巧 、 登录

    Unit04: 实战技巧 、 登录    

使用注解方式简化Unit04的小程序。

1. 基于注解的springmvc应用程序的开发

(1)编程步骤

step1. 导包。
step2. 添加spring配置文件。
step3. 配置DispatcherServlet。
step4. 写Controller。


a. 不用实现Controller接口了。
b. 可以添加多个方法。
c. 方法名不做要求,返回类型可以是ModelAndView,也可以String。
d. 使用@Controller注解。(不用配置bean了)。
e. 使用@RequestMapping注解。(不用配置HandlerMapping了)。

step5. 写jsp。
step6. 配置组件扫描和视图解析器。

(2)读取请求参数值

方式一 通过request对象

方式二 通过 @RequestParam注解

方式三 封装成javabean

step1. 写一个java类,要求见图示:

step2.在方法中,添加该javabean作为方法参数。

(3) 向页面传值

方式一 绑订数据到request对象

方式二 返回ModelAndView对象

方式三 利用ModelMap对象

方式四 绑订数据到session对象

(4) 重定向

情形一 如果方法的返回值是String

情形二 如果方法的返回值是ModelAndView

案例

src/main/java

controller

package controller;
/**
 *     用于封装请求参数值的javabean。
 *
 */
public class AdminParam {
    private String adminCode;
    private String pwd;
    public String getAdminCode() {
        return adminCode;
    }
    public void setAdminCode(String adminCode) {
        this.adminCode = adminCode;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    
}
AdminParam.java
package controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;

/**
 * 处理器类
 *
 */
@Controller
public class HelloController {
    
    @RequestMapping("/hello.do")
    public String hello(){
        System.out.println("hello()");
        //返回视图名
        return "hello";
    }
    
    @RequestMapping("/toLogin.do")
    public String toLogin(){
        System.out.println("toLogin()");
        return "login";
    }
    
    @RequestMapping("/login.do")
    /*
     * DispatcherServlet在调用处理器方法
     * 之前,会分析方法的结构(使用反射机制),
     * 如果发现需要一个request对象,则
     * DispatcherServlet会将request对象传递
     * 进来。(了解)
     */
    public String login(
            HttpServletRequest request){
        System.out.println("login()");
        String adminCode = 
            request.getParameter("adminCode");
        System.out.println("adminCode:"
            + adminCode);
        return "index";
    }
    
    @RequestMapping("/login2.do")
    /**
     * 建议在每一个形参前,都添加上@RequestParam。
     */
    public String login2(
            @RequestParam("adminCode") 
            String code,
            String pwd){
        System.out.println("login2()");
        System.out.println("adminCode:"
                + code);
        return "index";
    }
    
    @RequestMapping("/login3.do")
    public String login3(AdminParam ap){
        System.out.println("login3()");
        System.out.println("adminCode:" 
        + ap.getAdminCode());
        return "index";
    }
    
    @RequestMapping("/login4.do")
    public String login4(AdminParam ap,
            HttpServletRequest request){
        System.out.println("login4()");
        System.out.println("adminCode:" 
                + ap.getAdminCode());
        //绑订数据到request对象
        request.setAttribute("adminCode", 
                ap.getAdminCode());
        //DispatcherServlet默认使用转发
        return "index";
    }
    
    @RequestMapping("/login5.do")
    public ModelAndView login5(AdminParam ap){
        System.out.println("login5()");
        System.out.println("adminCode:" 
                + ap.getAdminCode());
        /*
         * 将处理结果添加到ModelAndView对象里面。
         * ModelAndView(String viewName,Map data)
         */
        Map<String,Object> data = 
                new HashMap<String,Object>();
        //相当于request.setAttribute(
        //"adminCode",ap.getAdminCode());
        data.put("adminCode", 
                ap.getAdminCode());
        ModelAndView mav = 
                new ModelAndView("index",data);
        return mav;
    }
    
    @RequestMapping("/login6.do")
    public String login6(AdminParam ap,
            ModelMap mm){
        System.out.println("login6()");
        System.out.println("adminCode:" 
                + ap.getAdminCode());
        //将数据添加到ModelMap对象
        //相当于执行了request.setAttribute
        mm.addAttribute("adminCode",
                ap.getAdminCode());
        return "index";
    }
    
    @RequestMapping("/login7.do")
    public String login7(AdminParam ap,
            HttpSession session){
        System.out.println("login7()");
        System.out.println("adminCode:" 
                + ap.getAdminCode());
        //绑订数据到session对象
        session.setAttribute("adminCode",
                ap.getAdminCode());
        return "index";
    }
    
    @RequestMapping("/login8.do")
    public String login8(){
        System.out.println("login8()");
        return "redirect:toIndex.do";
    }
    
    @RequestMapping("/login9.do")
    public ModelAndView login9(){
        System.out.println("login9()");
        RedirectView rv = 
                new RedirectView("toIndex.do");
        ModelAndView mav = 
                new ModelAndView(rv);
        return mav;
    }
    
    @RequestMapping("/toIndex.do")
    public String toIndex(){
        return "index";
    }
    
    
    
    
    @RequestMapping("/toBmi.do")
    public String toBmi(){
        System.out.println("toBmi()");
        return "bmi";
    }
    
    @RequestMapping("/bmi.do")
    public String bmi(
            HttpServletRequest request){
        System.out.println("bmi()");
        String height = 
            request.getParameter("height");
        String weight = 
            request.getParameter("weight");
        double bmi = 
            Double.parseDouble(weight) /
            Double.parseDouble(height)/
            Double.parseDouble(height);
        String status = "正常";
        if(bmi < 19){
            status = "过轻";
        }
        if(bmi > 25){
            status = "过重";
        }
        request.setAttribute("status", status);
        return "view";
    }

}
HelloController.java

src/main/resources

<?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:context="http://www.springframework.org/schema/context" 
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
    <!-- 配置组件扫描 -->
    <context:component-scan 
    base-package="controller"/>
    <!-- 配置视图解析器 -->
    <bean
     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/"/> 
    <property name="suffix" value=".jsp"/> 
    </bean> 
    
    
</beans>
spring-mvc.xml

WEB-INF

<%@ page 
 contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
</head>
<body style="font-size:30px;">
    <form action="bmi.do" method="post">
        身高(米):<input name="height" /><br/>
        体重(公斤):<input name="weight" /><br/><br/>
        <input type="submit" value="确定"/>
    </form>

</body>
</html>
bmi.jsp
<h1>Hello,SpringMVC</h1>
hello.jsp
<h1>index</h1>
<h1>${adminCode}</h1>
index.jsp
<%@ page    
contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
</head>
<body style="font-size:30px;">
    <form action="login9.do" method="post">
        帐号:<input name="adminCode" /><br/>
        密码:<input type="password" 
        name="pwd"/><br/>
        <input type="submit" value="登录"/>
    </form>

</body>
</html>
login.jsp
<%@ page 
 contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
</head>
<body style="font-size:30px;">
        ${status}
</body>
</html>
view.jsp
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_2_5.xsd" version="2.5">
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 
         DispatcherServlet的初始化方法在执行时,
         会启动spring容器。
         contextConfigLocation负责指定spring
         配置文件的位置。
     -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
  
</web-app>
web.xml
  <dependencies>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>3.2.8.RELEASE</version>
      </dependency>
  </dependencies>
pom.xml
原文地址:https://www.cnblogs.com/tangshengwei/p/6498839.html