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: 实战技巧 、 登录的更多相关文章

  1. android内部培训视频_第五节(1)_OA实战之登录界面

    第五节(1):OA实战之登录界面  一.登录界面布局 1.背景图片 2.文本框 3.checkbox 4.按钮 暂未实现点击切换图片效果 <RelativeLayout xmlns:androi ...

  2. Android实战技巧:深入解析AsyncTask

    AsyncTask的介绍及基本使用方法 关于AsyncTask的介绍和基本使用方法可以参考官方文档和Android实战技巧:多线程AsyncTask这里就不重复. AsyncTask引发的一个问题 上 ...

  3. Unity User Group 北京站图文报道:《Unity虚拟现实实战技巧》

    时间来到了盛夏,北京UUG活动也来到了第八期.本次活动的主题为<Unity虚拟现实实战技巧>,为此我们邀请了4位资深的行业大神.这次我们仍然在北京市海淀区丹棱街5号微软大厦举行活动,在这里 ...

  4. C#并行Parallel编程模型实战技巧手册

    一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理和 ...

  5. webpack快速入门——实战技巧:watch的正确使用方法,webpack自动打包

    随着项目大了,后端与前端联调,我们不需要每一次都去打包,这样特别麻烦,我们希望的场景是,每次按保存键,webpack自动为我们打包,这个工具就是watch! 因为watch是webpack自带的插件, ...

  6. webpack快速入门——实战技巧:开发和生产并行设置

    package.json中,devDependencies和dependencies是不同的 devDependencies:开发依赖 dependencies:生产依赖(线上) 1.安装生产环境的依 ...

  7. webpack快速入门——实战技巧:webpack模块化配置

    首先在根目录,新建一个webpack_config文件夹,然后新建entry_webpack.js文件,代码如下: const entry ={}; //声明entry变量 entry.path={ ...

  8. webpack快速入门——实战技巧:优雅打包第三方类库

    下面说两种方法: 一. 1.引入jQuery,首先安装: cnpm install --save jquery 2.安装好后,在我们的entry.js中引入: import $ from 'jquer ...

  9. webpack快速入门——实战技巧:webpack优化黑技能

    1.抽离jquery,vue(多个第三方类库抽离) 修改入口文件(webpack.config.js中) entry: { entry: './src/entry.js', jquery:'jquer ...

随机推荐

  1. mac下mysql 1045 (28000): Access denied for user 'root'@'localhost' (using password:

    新入了mac pro,安装好mysql后,用终端进入mysql遇到个问题: 1045 (28000): Access denied for user 'root'@'localhost' (using ...

  2. 【javascript基础】运算符优先级

    优先级 运算类型 关联性 运算符 1 成员运算符 从左到右 . [] new 从右到左 new 2 函数调用运算符 从左到右 () 3 自增运算符 n/a ++ 自减运算符 n/a -- 4 逻辑非运 ...

  3. 2018-2019-2 网络对抗技术 20165210 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165210 Exp4 恶意代码分析 一.实验目标 首先是监控你自己系统的运行状态,看有没有可疑的程序在运行. 其次是分析一个恶意软件,就分析Exp2或Exp ...

  4. IE中在a标签里的图片会显示边框

    例如: <a><img src="/UI/Images/ss.jpg"></a>,图的边框会出现a标签默认的边框, 解决办法: img{bord ...

  5. three.js入门系列之光源

    首先创建场景来试验各种光源带来的不同效果: 一.锥形光源(聚光灯) SpotLight 接下来缩小范围(π/7): 二.基础光源(环境光) AmbientLight 上例中没有添加环境光,使得周围黑漆 ...

  6. geotools中泰森多边形的生成

    概述 本文讲述如何在geotools中生成泰森多边形,并shp输出. 泰森多边形 1.定义 泰森多边形又叫冯洛诺伊图(Voronoi diagram),得名于Georgy Voronoi,是由一组由连 ...

  7. 369C Valera and Elections

    http://codeforces.com/problemset/problem/369/C 树的遍历,dfs搜一下,从根节点搜到每个分叉末尾,记录一下路况,如果有需要修复的,就把分叉末尾的节点加入答 ...

  8. Vue Devtools--vue调式工具

    当浏览器控制台出现:Download the Vue Devtools extension for a better development experience: 1:安装 地址:https://g ...

  9. ASP.NET网站发布时的那些坑

    开发工具:VS2010,MVC4.0,SQLSERVER2008 服务器:Windows server 2012,IIS8,SQLSERVER2012 一.发布后,每个页面第一次打开都很卡,50秒或更 ...

  10. 在mac os x 下升级emacs

    大概是09年的时候接触到emacs这个编辑器,当时我们c语言老师用的,他自信满满,而那时我是个vimer,所以每次看他按那么多组合键我就替他感觉手指头累啊. 再后来我用了几年vim写代码,再后来用了许 ...