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语言中文网 今天
随机推荐
- c/c++编译时,指定程序运行时查找的动态链接库路径
http://blog.csdn.net/tsxw24/article/details/10220735 c/c++编译时,指定程序运行时查找的动态链接库路径 分类: c/c++ linux 2013 ...
- js判断url是否有效
方法一:(仅适用于ie) function CheckStatus(url) { XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP") ...
- Redis-统计活跃用户
Bitmap(即Bitset)Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),在bitmap上可执行AND,OR,XOR以及其它位操作. package test ...
- gtd好文两篇收藏
http://www.jianshu.com/p/bf5e8a9761f5 http://blog.sina.com.cn/s/blog_4e0f66b80100m73i.html
- qt如何实现一个渐隐窗口呢(开启的时候他是从上往下渐渐显示)
qt如何实现一个渐隐窗口呢?就是比如说开启的时候他是从上往下渐渐显示的,关闭的时候从下往上渐渐小时的http://stackoverflow.com/questions/19087822/how-to ...
- 流媒体学习三-------SIP消息结构详解
SIP消息由三部分组成,即:开始行(start line).消息头(header).正文(body)Start-line:请求行Request-line 消息为 request消息时使用reques ...
- Java中类名与文件名的关系
1.Java保存的文件名必须与类名一致: 2.如果文件中只有一个类,文件名必须与类名一致: 3.一个Java文件中只能有一个public类: 4.如果文件中不止一个类,文件名必须与public类名一致 ...
- ftp 229
在sels10机器上登入ftp输入用户名和密码之后再ls发现出现如下问题Entering Extended Passive Mode ftp> ls229 Entering Extended P ...
- 用Js的eval解析JSON中的注意点
在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...
- httpclient提交json参数
private void httpReqUrl(List<HongGuTan> list, String url) throws ClientProtocolException, IOEx ...