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

时间: 2024-08-27 00:20:41

springday04-go1的相关文章

go1.8之安装配置

说明: 之前学习过go语言(大概是0.9版本),后来更新太快,也没怎么使用,就荒废掉了,今年有项目需要用go开发,重新捡起. 这是我在学习go语言过程中整理的内容,这里记录下,也方便我以后查阅. 操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 安装go 这里直接安装二进制,其它方式请自行搜索. 1.下载并安装go 命令如下: wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz --no-

go1.6的vendor不生效原因

用go1.6时,把自己写的包放在vendor目录里,发现go编译时并不去找vendor目录里的包,在各种google之后也没找到原因.仔细观察官方的示例才发现,使用vendor功能时包都在$GOPATH/src下,测试了一下,果然是这样.只有在$GOPATH/src下的包,才能使用vendor目录存放依赖包. 现在go对不在$GOPATH/src下开发的项目限制越来越多,看来以后只能在$GOPATH/src下新创建项目了.

Install go1.5 for CentOS7

https://golang.org/doc/install 下载好后,通过FTPS,传递到Linux里去,放哪里随便你自己,因为被墙了,所以在Windows通过旋风下载了这个玩意儿. 你也可以: wget https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz //将go解压到/opt,个人喜好罢了 [[email protected] ~]# tar -C /opt -xzf ./go1.5.linux-amd64.tar

GO1.6语言学习笔记2-安装配置及代码组织

一.关于GO开发环境的安装和配置 在linux环境中安装编译好的go安装包,参考官方指南的步骤一步步走下来就可以了.需要注意的是以下几个环境变量的配置: GOROOT - go编译库的目录,类似于java的JAVA_HOME PATH - 注意把$GOROOT/bin添加上去 GOPATH - go工作目录,类似于eclipse的workspace 以下是具体的安装步骤和环境配置        $ wget https://storage.googleapis.com/golang/go1.6.

ubuntu上安装Go1.5

下载golang1.5.1编译后的可执行文件包:go1.5.1.linux-amd64.tar.gz.(官方下载地址:http://www.golangtc.com/download) 部署如下: 1.解压: [email protected]:/usr/local# tar -xzvf go1.5.1.linux-amd64.tar.gz 2./etc/profile文件最后添加如下内容: export GOROOT=/usr/local/goexport GOPATH=/home/tjy/g

安装配置go1.4及eclipse的go开发环境

首先从网上下载 golang 1.4版本 官方:http://code.google.com/p/gomingw/downloads/list 第三方:http://www.golangtc.com/static/go/go1.4.windows-amd64.zip 安装配置go1.4 将解压的go目录放任意目录.默认C:\go 配置系统环境变量:GOROOT 和GOPATH. <1>我们可直接在系统环境变量path添加GOBIN的目录C:\go\bin即可(系统将默认GOROOT:C:\go

Go1.5 改进摘要

Go1.5 改进简介 纯Go(+少量汇编)实现 runtime 和 编译器 改进 垃圾回收器, 支持 并发 (有个指标好像是 停顿在 10 毫秒以内). GOMAXPROCS 默认值改为 CPU 核数 internal 限制规则推广到第三方包 (之前只有 std 包启用) 增加 vendor 支持, 基本解决 第三方库的依赖问题和版本问题 增加 trace 命令, 更友好的剖析程序运行状态 增加 go doc 命令 语法变化 增加 map 字面量. 以前的代码: m := map[Point]s

CentOS7.6安装Go-1.12.9

安装步骤 Go的官网:https://golang.google.cn 1. 下载压缩包 wget https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz<说明> 如果出现SSL证书错误问题,加上--no-check-certificate选项. 2. 解压到指定目录下 tar -C /usr/local -xzvf go1.12.9.linux-amd64.tar.gz<说明> 解压成功后,会在/usr/local目录下生成go目

Linux下go1.8安装方法

之前迷上了神奇的Go语言,就在windows上装上了Go1.8,挺顺风顺水的,不过最近换上了Linux时,编译安装就炸了,各种报错.今天就留个记录,备个份! 编译安装Go1.8的主体思路: 从github中clone下来 确保linux系统安装较新的libc,gcc(apt,yum随便搞上) 切换库分支至1.4(刚clone下来的库),去到src目录,执行all.bash 把编译安装完的1.4目录cp到/root/,并更名为go1.4 将刚刚的编译安装的仓库恢复原状(git clean -dfx

go1.13 mod 实践和常见问题

实践建议 0,go mod 要求所有依赖的 import path 的path 以域名开头,如果现有项目转1.13的go mod 模式,且不是以域名开头则需要修改. eg: code.be.mingbai.com/tools/any_test_del_free 1, 既然已经更新到1.13了,建议直接设置GO111MODULE="on" ,即开启go mod 模式.因为这也是以后的主流,path会慢慢的消失. go env -w GO111MODULE=on 2,给go mod 设置代