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#委托初探
委托是一种定义方法签名的类型,可以与具有兼容签名的任何方法关联.您可以通过委托调用其中已添加的方法列表.委托用于将方法作为参数传递给其他方法.事件处理程序就是通过委托调用的方法.您可以创建一个自定义方 ...
- uzqp文件的加解密
帮朋友做的,根据python版本翻译成的java版本,记录一下代码 import java.io.File; import java.io.FileInputStream; import java.i ...
- 强调语气<strong>和<em>标签,文字设置单独样式<span>
区别:1,<em> 表示强调,<strong> 表示更强烈的强调. 2,并且在浏览器中<em> 默认用斜体表示,<strong> 用粗体表示. 3,两个 ...
- String 与StringBuffer比较
package String比较; /* * String 与StringBuffer比较 * String 不可变,一旦赋值,就不能被修改 * StringBuffer可变的字符串. * Strin ...
- magento cache,magento index
"Magento后台作修改,Magento前台没变化""Magento属性更新了,Magento前台没反应"如果你碰到了以上两种情况,或者看到截图中的提示: 您 ...
- iOS 获取当前时间 年、月、日、周几
NSDate * nowDate = [NSDate new]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSUInteger uni ...
- 计算A+B及其结果的标准形式输出
题目: 代码链接 解题思路: 首先,读懂题目,题目要求我们计算两个整型数a,b之和,这是简单的加法计算,与平常的题目一般无二.但是此题的不同在于要求我们输出的数必须是标准形式,题目也对标准形式做了相应 ...
- JavaScript:JavaScript语法的详细介绍
JavaScript语法:只要Java会了,基本上javascript语法就会了. ——变量的定义 ——程序的结构控制 ——数组操作 ——函数的定义即使用 基本的test.html代码如下,它会导入下 ...
- Python线程指南
本文介绍了Python对于线程的支持,包括“学会”多线程编程需要掌握的基础以及Python两个线程标准库的完整介绍及使用示例. 注意:本文基于Python2.4完成,:如果看到不明白的词汇请记得百度谷 ...
- Android 动态添加删除ExpandableListView的item的例子
这个例子可以学习到如下几点: 1.通过自定义Dialog(单独布局的xml文件进行弹出显示) 2.通过menu点击监听添加,删除view中的items 3.点击ExpandableListView中g ...