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 ...
随机推荐
- iptables详解(11):iptables之网络防火墙
我们一起来回顾一下之前的知识,在第一篇介绍iptables的文章中,我们就描述过防火墙的概念,我们说过,防火墙从逻辑上讲,可以分为主机防火墙与网络防火墙. 主机防火墙:针对于单个主机进行防护. 网络防 ...
- JavaScript---forEach( ) 、map( )和 filter()
循环数组,最先想到的就是for循环: for(var i=0;i<count;i++) { //逻辑代码} 除此之外,就是forEach()方法了. Firefox 和Chrome 的Arra ...
- 使用IScroll5实现滚动
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- LeetCode OJ:Rotate List(旋转链表)
Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...
- C++面向对象高级编程(四)基础篇
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一.Static 二.模板类和模板函数 三.namespace 一.Static 静态成员是“类级别”的,也就是它和类的地位等同,而普通成员是“ ...
- MoreEffectiveC++Item35 条款26: 限制某个class所能产生的对象个数
一 允许零个或一个对象 我们知道每当即将产生一个对象,我们有一个constructor被调用,那么我们现在想组织某个对象的产生,最简单的方法就是将其构造函数声明成private(这样做同事防止了这个类 ...
- 20165202 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:贾海粟 学号:20165202 指导教师:娄嘉鹏 实验日期:2018年4月16日 实验时间:15:3 ...
- Python报错IOError: [Errno 22] invalid mode ('r') or filename
IOError: [Errno 22] invalid mode ('r') or filename: 这种错误的出现是在使用built-in函数file()或者open()的时候. 或者是因为文件的 ...
- Scrapy爬虫库使用初体验
安装pip install Scrapy 中间可能会遇到的问题: 超时,网络问题需要多次尝试 缺少vc++库,官网可以下载 win32api缺失,https://sourceforge.net/pro ...
- HDU 数位dp
模板http://www.cnblogs.com/jffifa/archive/2012/08/17/2644847.html 完全理解以后,我发现这种写法实在是太厉害了,简洁,优美,可以回避很多细节 ...