zoukankan      html  css  js  c++  java
  • springday04-go1

    springmvc02:
    1.创建项目,导入jar包


    2.复制xml文件到src下

    3.在web.xml中配置DispatcherServlet(代码一致)

    <?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">
    <display-name></display-name>
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>
    org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <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>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    </web-app>

    4.修改spring-mvc.xml(使用注解的方式,前面使用的是xml的方式,仔细回味这两种方式的区别):
    a.开启组件扫描 b.开启spring mvc注解扫描 c.定义视图解析器

    <!-- 配置组件扫描 -->
    <context:component-scan base-package="controller" />

    <!-- 配置spring mvc注解扫描 -->
    <mvc:annotation-driven/>

    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/"/>
    <property name="suffix" value=".jsp"/>
    </bean>


    5.在controller包下创建Controller类:
    HelloController类中,此时不需要再实现接口,里面方法可以自定义。
    6.在HelloController类前面加上注解@Controller("hc")

    7.在方法前面加上注解@RequestMapping("/hello.do")
    8.创建页面:新建hello.jsp文件

    <h1>Hello,SpringMVC!</h1>

     HelloController.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;

    @Controller
    public class HelloController {

    @RequestMapping("/hello.do") //使用注解代替了HandlerMapping映射配置
    public String toHello(){
    System.out.println("HelloController的toHello方法.....");
    return "hello";
    }


    //注意,每次都是从toLogin.do跳转到登录页面,然后修改表单的提交目标,进行测试。
    @RequestMapping("/toLogin.do")
    public String toLogin(){
    System.out.println("HelloController的toLogin方法.....");
    return "login";
    }

    @RequestMapping("/login.do")
    public String login(HttpServletRequest req){
    String username =req.getParameter("username");
    String password = req.getParameter("pwd");
    System.out.println("username="+username+",password="+password);
    return "success";
    }

    //@RequestParam("pwd")表示实际传送过来的参数,此时后面的参数可以与页面参数名不一致
    @RequestMapping("/login2.do")
    public String login2(String username,@RequestParam("pwd") String password){
    System.out.println("login2的方法");
    System.out.println("username="+username+",password="+password);
    return "success";
    }

    @RequestMapping("/login3.do")
    public String login3(User user){
    System.out.println(user.getUsername()+","+user.getPwd());
    return "success";
    }
    @RequestMapping("/login4.do")
    public String login4(User user,HttpServletRequest req){
    System.out.println("login4方法执行");
    System.out.println(user.getUsername()+","+user.getPwd());
    //req.setAttribute("username", user.getUsername());
    req.setAttribute("user", user);
    //默认情况下,使用转发的方式来跳转页面
    return "success";
    }

    //向页面传值的第二种方式,使用ModelAndView
    @RequestMapping("/login5.do")
    public ModelAndView login5(User user){
    System.out.println("login5方法执行");
    System.out.println(user.getUsername()+","+user.getPwd());
    //还可以这样一种构造器:ModelAndView(String viewname,Map data)
    //所以,先构造一个map对象
    Map<String,Object> data = new HashMap<String,Object>();
    //相当于执行了req.setAttribute("user", user);
    data.put("user", user);
    return new ModelAndView("success",data) ;
    }

    //向页面传值的第三种方式,使用ModelMap
    @RequestMapping("/login6.do")
    public String login6(User user,ModelMap data){
    System.out.println("login6方法执行");
    System.out.println(user.getUsername()+","+user.getPwd());
    //相当于req.setAttribute("user", user);
    data.addAttribute("user", user);
    return "success";
    }

    //向页面传值的第三种方式,使用session绑定数据
    @RequestMapping("/login7.do")
    public String login7(User user,HttpSession session){
    System.out.println("login7方法执行");
    System.out.println(user.getUsername()+","+user.getPwd());
    session.setAttribute("user", user);
    return "success";
    }

    //重定向
    @RequestMapping("/login8.do")
    public String login8(User user,HttpSession session){
    System.out.println("login8方法执行");
    System.out.println(user.getUsername()+","+user.getPwd());
    if("tom".equals(user.getUsername())){

    session.setAttribute("user", user);
    return "redirect:toSuccess.do";
    }
    return "login";
    }


    @RequestMapping("/toSuccess.do")
    public String toSuccess(){
    System.out.println("toSuccess方法执行");
    return "success";
    }
    }

    9.测试http://localhost:8088/springmvc02/hello.do
    出现问题:注解@Controller("hc")报错!在springmvc.xml文件中加上bean语句,500错误!
    解决:刚开始建好类的时候,就马上写上@Controller,则不报错。我是后面写了一大堆代码才加注解,所以可能编译器就不认识了。

    10.HelloController类方法中重新写一个toLogin方法,新建login.jsp页面,跳转到login.jsp页面,进行测试http://localhost:8088/springmvc02/toLogin.do。注意,后面的测试中,修改表单的跳转目标即可。注意,后面的都是从/springmvc02/toLogin.do进入登录页面开始,然后修改表单提交地址。

    login.jsp:

    <html>
    <head>
    </head>
    <body style="font-size:30px;">
    <form action="login.do" method="post">
    <fieldset>
    <legend>login</legend>
    username:<input name="username" type="text"/><br>
    pwd:<input type="password" name="pwd"/><br>
    <input type="submit" value="Confirm"/>
    </fieldset>
    </form>
    </body>
    </html>

    11.再添加login(HttpServletRequest req)方法,添加success.jsp页面,然后修改login.jsp修改提交目标为login.do测试,输出Success Welcome!

    success.jsp:

    <h1>Login success</h1>

    <h1>Login success</h1>
    <!-- <h1>Welcome ${username}</h1> -->
    <h1>Welcome ${user.username}</h1>

    12.再添加login2方法,注意,参数名和页面的名字不一致,所以参数前面要添加@RequestParam("pwd"),然后修改login.jsp修改提交目标为login2.do测试,若不添加,则控制台输出的密码为null。

    注意:login2方法中的参数

    public String login2(String username,@RequestParam("pwd") String password)和login.jsp中的name一致,才能将表单中的参数值传递过来,否则得加上@RequestParam("pwd")类似这种语句,保证参数名称一致。


    13.再添加login3方法,使用对象接收参数,所以,新建User类,并要求其属性名和login.jsp的参数名保持一致。然后修改login.jsp修改提交目标为login3.do测试

    User.java:

    package controller;

    import org.springframework.stereotype.Component;

    /*
    * 封装请求参数类,要求如下:
    * a.属性名与jsp页面参数名一致
    * b.提供相应的get/set方法
    * */
    @Component
    public class User {

    private String username;
    private String pwd;
    public String getUsername() {
    return username;
    }
    public void setUsername(String username) {
    this.username = username;
    }
    public String getPwd() {
    return pwd;
    }
    public void setPwd(String pwd) {
    this.pwd = pwd;
    }

    }


    14.再添加login4方法,此处只要考察使用setAttribute保存数据,然后在success中使用EL表达式取保存的值。然后修改login.jsp修改提交目标为login4.do

    15.也可以保存一个对象,然后EL表达式中通过对象去读取属性

    16.再添加login5方法,使用ModelAndView,然后修改login.jsp修改提交目标为login5.do测试

    17.再添加login6方法,使用ModelMap,然后修改login.jsp修改提交目标为login6.do测试

    18.再添加login7方法,使用session,然后修改login.jsp修改提交目标为login7.do测试

    19.再添加login8方法,使用重定向,所以再添加toSuccess方法。然后修改login.jsp修改提交目标为login8.do测试,会发现成功并且地址改为toSuccess.do

  • 相关阅读:
    PDO应用
    分页查询
    PHP去除数组中重复数据的两个例子
    数据库访问(现用基本格式)
    克隆、加载类
    抽象类和接口
    静态
    PHP基础
    数据库的常用函数
    数据库的高级查询
  • 原文地址:https://www.cnblogs.com/lchzls/p/5770723.html
Copyright © 2011-2022 走看看