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

 

posted @ 2016-08-14 18:24  知我者,足以  阅读(204)  评论(0编辑  收藏  举报