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

springday04-go1的更多相关文章
- Go1.7改善了编译速度并且会生成更快的代码
Go1.7的开发周期正在接近它的下一个里程碑,Go的提交者Dave Cheney报告了子即将发布的版本中,团队成员在语言工具链上的努力. Cheney称,基于当前的开发状态,Go1.7将会很容易就成为 ...
- python2.7 与 go1.2简单性能比较
过完年刚上班,项目还没有开始,对于即将到来的项目,想尝试是否可以找到一个开发效率接近python,运行效率接近静态语言的编程语言,选择基本就是scala和go,公司的技术组成基本都是c派的,scala ...
- go1.8之安装配置具体步骤
操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 安装go 这里直接安装二进制,其它方式请自行搜索. 1.下载并安装go 命令如下: ? 1 2 3 wget https://st ...
- go1.8之安装配置
说明: 之前学习过go语言(大概是0.9版本),后来更新太快,也没怎么使用,就荒废掉了,今年有项目需要用go开发,重新捡起. 这是我在学习go语言过程中整理的内容,这里记录下,也方便我以后查阅. 操作 ...
- Ubuntu16.04 LTS上安装Go1.10
原因 Ubuntu资源库上默认使用的是Go1.6.2版本,给最新版本代码编译带来了不少问题.本文就记录下在Ubuntu下直接安装Go最新版1.10的步骤. 准备工作 1.卸载已有版本 # 卸载已经安装 ...
- GO1.6语言学习笔记2-安装配置及代码组织
一.关于GO开发环境的安装和配置 在linux环境中安装编译好的go安装包,参考官方指南的步骤一步步走下来就可以了.需要注意的是以下几个环境变量的配置: GOROOT - ...
- Go程序开发---Go环境配置:CentOS6.5+Go1.8标准包安装
1.Go安装 1.1Go的三种安装方式 Go有多种安装方式,可以选择自己习惯的方式进行,这里介绍三种安装方式: 1)Go源码安装 2)Go标准包安装 3)第三方工具安装 这里主要介绍下Go标准包在Ce ...
- 【linux】【Go】Centos7安装go1.13环境
前言 Go(又称Golang)是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言. 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pi ...
- go1.13 mod 实践和常见问题
实践建议 0,go mod 要求所有依赖的 import path 的path 以域名开头,如果现有项目转1.13的go mod 模式,且不是以域名开头则需要修改. eg: code.be.mingb ...
- Go1.13 标准库的 http 包爆出重大 bug,你的项目中招了吗? 原创: 王亚楼 Go语言中文网 今天
Go1.13 标准库的 http 包爆出重大 bug,你的项目中招了吗? 原创: 王亚楼 Go语言中文网 今天
随机推荐
- mysql-zabbix-agent
使用Zabbix监控MySQL服务器方法 01/27/2014 从Zabbix 2.2开始,Zabbix官方已经支持了MySQL监控,但是MySQL监控默认是不可用的,需要经过额外的设置才可以使用.K ...
- JDK核心包学习
StringBuffer 线程安全.可变字符序列 StringBuilder 非线程安全.可变字符序列,比StringBuffer更快 Boolean 使用valueOf产生Boolean实例 ...
- vs2013 RTM 激活码
BWG7X-J98B3-W34RT-33B3R-JVYW9
- php--yii2.0框架的curl
yii2.0框架的增删改查 //插入操作 save() $customer=new Customer(); $customer->name=‘小熊‘; $customer->save() ...
- 计算器<代码>
import re l_no = "-4.0*-4+((-1-8.0*2*-1)-(-9.456/1.57))/8+-8*7" true_tr = "-4.0*-4+(( ...
- 什么是EBC和EBO
EBC英文全称为“Empty Base Class”,中文全称“空基类”.那什么是空基类呢?简单的说就是没有任何数据成员的类就称之为空基类.也就是EBC的类定义中不包含任何数据成员,那么这样一来可能大 ...
- 苹果公司给出的检测 advertisingIdentifier 的方法
To locate the reference to the advertisingIdentifier selector, please perform these steps to create ...
- 复合事件ready,hover,toggle
1.ready 2.hover 3.toggle(fn1,fn2, …)(被废弃) 2.hover(fn(){……},fn(){……}) 特别强调一点,hover的是mouseenter和mousel ...
- DNSPod各个套餐的DNS地址
DNSPod各个套餐的DNS地址 https://support.dnspod.cn/Kb/showarticle/tsid/178/ DNSPod各个套餐的DNS地址每种域名套餐对应的DNS地址是不 ...
- ucenter 客户端里的自动方法
<?php /** * UCenter 应用程序开发 Example * * UCenter 简易应用程序,应用程序有自己的用户表 * 使用到的接口函数: * uc_authcode() 可选, ...