Unit04: 实战技巧 、 登录
Unit04: 实战技巧 、 登录
使用注解方式简化Unit04的小程序。
1. 基于注解的springmvc应用程序的开发
(1)编程步骤
step1. 导包。
step2. 添加spring配置文件。
step3. 配置DispatcherServlet。
step4. 写Controller。
a. 不用实现Controller接口了。
b. 可以添加多个方法。
c. 方法名不做要求,返回类型可以是ModelAndView,也可以String。
d. 使用@Controller注解。(不用配置bean了)。
e. 使用@RequestMapping注解。(不用配置HandlerMapping了)。

step5. 写jsp。
step6. 配置组件扫描和视图解析器。
(2)读取请求参数值
方式一 通过request对象

方式二 通过 @RequestParam注解

方式三 封装成javabean
step1. 写一个java类,要求见图示:

step2.在方法中,添加该javabean作为方法参数。

(3) 向页面传值
方式一 绑订数据到request对象

方式二 返回ModelAndView对象

方式三 利用ModelMap对象

方式四 绑订数据到session对象

(4) 重定向
情形一 如果方法的返回值是String

情形二 如果方法的返回值是ModelAndView

案例

src/main/java
controller
package controller;
/**
* 用于封装请求参数值的javabean。
*
*/
public class AdminParam {
private String adminCode;
private String pwd;
public String getAdminCode() {
return adminCode;
}
public void setAdminCode(String adminCode) {
this.adminCode = adminCode;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
} }
AdminParam.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;
import org.springframework.web.servlet.view.RedirectView; /**
* 处理器类
*
*/
@Controller
public class HelloController { @RequestMapping("/hello.do")
public String hello(){
System.out.println("hello()");
//返回视图名
return "hello";
} @RequestMapping("/toLogin.do")
public String toLogin(){
System.out.println("toLogin()");
return "login";
} @RequestMapping("/login.do")
/*
* DispatcherServlet在调用处理器方法
* 之前,会分析方法的结构(使用反射机制),
* 如果发现需要一个request对象,则
* DispatcherServlet会将request对象传递
* 进来。(了解)
*/
public String login(
HttpServletRequest request){
System.out.println("login()");
String adminCode =
request.getParameter("adminCode");
System.out.println("adminCode:"
+ adminCode);
return "index";
} @RequestMapping("/login2.do")
/**
* 建议在每一个形参前,都添加上@RequestParam。
*/
public String login2(
@RequestParam("adminCode")
String code,
String pwd){
System.out.println("login2()");
System.out.println("adminCode:"
+ code);
return "index";
} @RequestMapping("/login3.do")
public String login3(AdminParam ap){
System.out.println("login3()");
System.out.println("adminCode:"
+ ap.getAdminCode());
return "index";
} @RequestMapping("/login4.do")
public String login4(AdminParam ap,
HttpServletRequest request){
System.out.println("login4()");
System.out.println("adminCode:"
+ ap.getAdminCode());
//绑订数据到request对象
request.setAttribute("adminCode",
ap.getAdminCode());
//DispatcherServlet默认使用转发
return "index";
} @RequestMapping("/login5.do")
public ModelAndView login5(AdminParam ap){
System.out.println("login5()");
System.out.println("adminCode:"
+ ap.getAdminCode());
/*
* 将处理结果添加到ModelAndView对象里面。
* ModelAndView(String viewName,Map data)
*/
Map<String,Object> data =
new HashMap<String,Object>();
//相当于request.setAttribute(
//"adminCode",ap.getAdminCode());
data.put("adminCode",
ap.getAdminCode());
ModelAndView mav =
new ModelAndView("index",data);
return mav;
} @RequestMapping("/login6.do")
public String login6(AdminParam ap,
ModelMap mm){
System.out.println("login6()");
System.out.println("adminCode:"
+ ap.getAdminCode());
//将数据添加到ModelMap对象
//相当于执行了request.setAttribute
mm.addAttribute("adminCode",
ap.getAdminCode());
return "index";
} @RequestMapping("/login7.do")
public String login7(AdminParam ap,
HttpSession session){
System.out.println("login7()");
System.out.println("adminCode:"
+ ap.getAdminCode());
//绑订数据到session对象
session.setAttribute("adminCode",
ap.getAdminCode());
return "index";
} @RequestMapping("/login8.do")
public String login8(){
System.out.println("login8()");
return "redirect:toIndex.do";
} @RequestMapping("/login9.do")
public ModelAndView login9(){
System.out.println("login9()");
RedirectView rv =
new RedirectView("toIndex.do");
ModelAndView mav =
new ModelAndView(rv);
return mav;
} @RequestMapping("/toIndex.do")
public String toIndex(){
return "index";
} @RequestMapping("/toBmi.do")
public String toBmi(){
System.out.println("toBmi()");
return "bmi";
} @RequestMapping("/bmi.do")
public String bmi(
HttpServletRequest request){
System.out.println("bmi()");
String height =
request.getParameter("height");
String weight =
request.getParameter("weight");
double bmi =
Double.parseDouble(weight) /
Double.parseDouble(height)/
Double.parseDouble(height);
String status = "正常";
if(bmi < 19){
status = "过轻";
}
if(bmi > 25){
status = "过重";
}
request.setAttribute("status", status);
return "view";
} }
HelloController.java
src/main/resources
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
<!-- 配置组件扫描 -->
<context:component-scan
base-package="controller"/>
<!-- 配置视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean> </beans>
spring-mvc.xml
WEB-INF
<%@ page
contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
</head>
<body style="font-size:30px;">
<form action="bmi.do" method="post">
身高(米):<input name="height" /><br/>
体重(公斤):<input name="weight" /><br/><br/>
<input type="submit" value="确定"/>
</form> </body>
</html>
bmi.jsp
<h1>Hello,SpringMVC</h1>
hello.jsp
<h1>index</h1>
<h1>${adminCode}</h1>
index.jsp
<%@ page
contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
</head>
<body style="font-size:30px;">
<form action="login9.do" method="post">
帐号:<input name="adminCode" /><br/>
密码:<input type="password"
name="pwd"/><br/>
<input type="submit" value="登录"/>
</form> </body>
</html>
login.jsp
<%@ page
contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
</head>
<body style="font-size:30px;">
${status}
</body>
</html>
view.jsp
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--
DispatcherServlet的初始化方法在执行时,
会启动spring容器。
contextConfigLocation负责指定spring
配置文件的位置。
-->
<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>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> </web-app>
web.xml
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
</dependencies>
pom.xml
Unit04: 实战技巧 、 登录的更多相关文章
- android内部培训视频_第五节(1)_OA实战之登录界面
第五节(1):OA实战之登录界面 一.登录界面布局 1.背景图片 2.文本框 3.checkbox 4.按钮 暂未实现点击切换图片效果 <RelativeLayout xmlns:androi ...
- Android实战技巧:深入解析AsyncTask
AsyncTask的介绍及基本使用方法 关于AsyncTask的介绍和基本使用方法可以参考官方文档和Android实战技巧:多线程AsyncTask这里就不重复. AsyncTask引发的一个问题 上 ...
- Unity User Group 北京站图文报道:《Unity虚拟现实实战技巧》
时间来到了盛夏,北京UUG活动也来到了第八期.本次活动的主题为<Unity虚拟现实实战技巧>,为此我们邀请了4位资深的行业大神.这次我们仍然在北京市海淀区丹棱街5号微软大厦举行活动,在这里 ...
- C#并行Parallel编程模型实战技巧手册
一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理和 ...
- webpack快速入门——实战技巧:watch的正确使用方法,webpack自动打包
随着项目大了,后端与前端联调,我们不需要每一次都去打包,这样特别麻烦,我们希望的场景是,每次按保存键,webpack自动为我们打包,这个工具就是watch! 因为watch是webpack自带的插件, ...
- webpack快速入门——实战技巧:开发和生产并行设置
package.json中,devDependencies和dependencies是不同的 devDependencies:开发依赖 dependencies:生产依赖(线上) 1.安装生产环境的依 ...
- webpack快速入门——实战技巧:webpack模块化配置
首先在根目录,新建一个webpack_config文件夹,然后新建entry_webpack.js文件,代码如下: const entry ={}; //声明entry变量 entry.path={ ...
- webpack快速入门——实战技巧:优雅打包第三方类库
下面说两种方法: 一. 1.引入jQuery,首先安装: cnpm install --save jquery 2.安装好后,在我们的entry.js中引入: import $ from 'jquer ...
- webpack快速入门——实战技巧:webpack优化黑技能
1.抽离jquery,vue(多个第三方类库抽离) 修改入口文件(webpack.config.js中) entry: { entry: './src/entry.js', jquery:'jquer ...
随机推荐
- Shell test 命令,Shell 输入/输出重定向
一.Shell test 命令 Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -g ...
- yum 数据库报错与重构
[root@dhcp yum.repos.d]# cd /var/lib/rpm/ [root@dhcp rpm]# rm __db.* -rf[root@dhcp rpm]# rpm --rebui ...
- T4模板的基本结构
(转自:http://www.cnblogs.com/yank/archive/2012/02/14/2342287.html) T4模板的基本结构 代码块的总体分类,就是两种:文本.程序脚本. 我感 ...
- 【nyoj-1233】差值
描述 输入一个整数数组,将它们连接起来排成一个数,找出能排出的所有数字中最大,最小的两个,输出两个数的差值.例如输入数组{1, 2},则输出9. 输入 第一行输入一个整数T,表示有T组测试数 ...
- 高射炮打蚊子丨用Visual Studio 2017写最初级的C语言程序
众所周知,Visual Studio号称全宇宙最强的IDE(集成开发环境),简直可以“秒天秒地秒空气”.我们看着各种技术大会上,大神们在台上用VS演示Demo溜得飞起,然而对于一些非技术专业同学或者是 ...
- ansible来了
番一.OP酱的自白 自从入了贵圈,每天需要强大的内心来维护混乱的线上,每天都是用浆糊一样的shell /python在糊墙补窟窿啊,感觉每天都是在和if else打交道啊,每次花牛鼻子劲写的 ...
- Jquery validation自定义验证
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python金融分析项目
1.进入ipython: C:\Users\Administrator>ipython Python (v3. , ::) [MSC v. bit (AM D64)] Type 'copyrig ...
- Git 分布式版本控制的常见命令
Git 的作用: (1)方便多人协同开发; (2)方便版本控制 Git 分布式版本控制的主要区域及命令图,下面会详细讲解: 创建项目并将切换至项目目录下 1. 创建本地仓库: git init ...
- 剑指offer--39. 跳台阶
时间限制:1秒 空间限制:32768K 热度指数:375795 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). cla ...