SpringMVC使用小案例入门练手

1, springMVC使用过程

     1),新建maven工程,连接好Tomcat(选中工程,右键最后一项),导入spring-webmvc包(pom.xml文件中加入此包的关联),拷贝spring-mvc.xml(此文件用来配置组件扫描、注解扫描、视图解析器等)文件到资源路径(src/main/resources),

配置web.xml文件:此文件用于连接配置DispatcherServlet,此文件中有与spring-mvc.xml文件相关联的内容。

     2),写视图部分,写一个.jsp文件,里面有放在网页上显示的内容,此内容供用户观看和使用,当用户触发之后,网页上会将请求传给控制器,最近使用的是表单的提交,action的值决定了提交到的位置。

     3),控制器中通过组件扫描,找到的@Controller之后定位相应的@RequestMapping(“请求action值”)下面的方法,执行方法中的语句(绑定属性值),然后return返回要显示的jsp文件名同时带过去绑定的值。在下一个jsp中显示内容!

2,SpringMVC中接收网页上的请求几种方式(以下是在

Controller类中)

      1),方法中传入HttpServletRequest request,使用request的getParameter方法获取单个的 name值

      2),在声明形参前面使用@RequestParam(“请求参数名”)注解,此时使用形参就相当于操作请求参数

      3),新建一个bean,此类中必须满足三条规定!

            -1,属性名要与请求参数名一样

     -2,属性类型要与请求参数值一致

     -3,提供相应的get/set方法

     此时在控制器方法中传入这个bean对象,就可以使用get方法获得相应的值。

3, 设置属性值

     a)    如果使用的是传入HttpServletReqeust 那就等运算之后直接将结果 以 reqtuest . setAttribute(“名”,值)  的方式设置属性值就可以了,然后return “视图名” 。

    b)    如果传入的是 ModelMap 使用方式与HttpServeltRequest类似,只是在设置属性值的时候使用的是 mm . addAttribute(“名”,值)。

      c)     如果方法的声明使用的返回值类型是 ModelAndView 那就有点麻烦了,首先在方法声明的时候, public String bmi( ){   }不能用String 而要改用ModelAndView,并且要new一个Map,将参数put进去(data . put(“名”,值)),接着还要new一个ModelAndView对象,将返回的视图名和Map分别传进去(ModelAndView  nav= new ModelAndView(“视图名”,data);),最后return的是 nav。

写了这么多干货,来个蛋花汤-------->  小案例全部代码奉上

0,第一步的配置环境代码

    0.1,pro.xml文件内容

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.tedu.string</groupId>
  <artifactId>day04-spring-test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
    <dependencies>
  	<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>4.1.0.RELEASE</version>
</dependency>
  </dependencies>
</project>

    0.2,spring-mvc.xml文件内容

<?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">
		
	<!-- 组件扫描 扫描让@Controller -->
	
	<context:component-scan base-package="controller"></context:component-scan>
	
	<!-- 配置MVC注解扫描,让@RequestMapping注解 启动 -->
	<mvc:annotation-driven/>

	
	<!-- 配置viewresolver(视图解析器) -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/"/>
		<property name="suffix" value=".jsp"/>
	</bean>
		
	
	
	
	
	
	
</beans>

    0.2,web.xml文件内容

<?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>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>


1,显示视图(共两个案例,一个是计算bmi指数,一个是登录判断)

    1.1,计算bmi值的代码

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="bmi_3.do" method="post">
	<fieldset>
		<legend>计算bmi身体指数</legend>
		身高:<input name="height">
		体重:<input name="weight">
		<input type="submit" value="提交测试">
	</fieldset>
</form>
</body>
</html>

        1.2,用户注册页面代码

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
</head>
<body style="font-size:30px;">
   <form action="login_5.do" method="post">
   	<fieldset>
   			<legend>用户注册登录界面</legend>
   			用户名:<input name="uname"><br>
   			密码:<input name="pwd" type="password"><br>
   			<input type="submit" value="登录">
   	
   	</fieldset>
   
   </form>
</body>
</html>

2,Controller

package controller;
/*
 * 加注解
 */

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

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对象
 * 
 *
 */
@Controller
public class hello  {
@RequestMapping("toBmi.do")
	public String toBmi(){
	System.out.println("toBmi()这个方法");
	return "login";
	//这里如果返回的事bmi,那么就会跳到 bmi.jsp,计算bmi指数的页面
	//这里如果返回的是 login,那么就会跳到 login.jsp,登录的页面
}
/**
 * dispatcherServlet在调用处理器(controller)的方法前,会利用java
 * 反射机制分析方法的结构(比如分析方法的参数类型)然后进行相应的处理,(比如,在这儿,发现bmi方法有一个参数类型为
 * HttpServletReqeust,则将该对象作为参数传递进来
 * )
 */
@RequestMapping("bmi_1.do")
public String bmi(HttpServletRequest request){ //可以在这里传入request
	String weight = request.getParameter("weight");
	String height = request.getParameter("height");
	System.out.println("身高和体重分别是:"+height+":"+weight);
	System.out.println("bmi()获取网页上的宽和高");
//	String status = "体重正常";
//	Double bmi=Double.parseDouble(weight)/Double.parseDouble(height)/Double.parseDouble(height);
//	if(bmi<19){
//		status="多吃点,太瘦了!";
//	}
//	if(bmi>25){
//		status="该减肥了!";
//	}
//	request.setAttribute("status", status);
	return "view";
}
@RequestMapping("bmi_2.do")
public String bmi1(HttpServletRequest request,BmiParam bm){ //可以用一个封装类获取值,但是属性名称与请求参数必须一致
	Double height=Double.parseDouble(bm.getHeight());
	Double weight=Double.parseDouble(bm.getWeight());
	Double bmi=weight/height/height;
	String status = "体重正常";
	if(bmi<19){
		status="多吃点,太瘦了!";
	}
	if(bmi>25){
		status="该减肥了!";
	}
	request.setAttribute("status", status);
	return "view";
	
}
/*
 * request.getParameter("height")与@RequestParam("height")一样的原理
 * 都是获取请求参数的值
 */
@RequestMapping("bmi_3.do")
public String bmi2(
		@RequestParam("height") String h,
		@RequestParam("weight") String w,HttpServletRequest request
		){  //可以直接在这里使用与请求参数名相同的形式参数,两者会自动关联,但是如果名字不同,就要使用【@RequestParam("请求参数名") String 形式参数名】的方法来获取请求参数的值
	System.out.println(h+":"+w);
	Double height=Double.parseDouble(h);
	Double weight=Double.parseDouble(w);
	Double bmi=weight/height/height;
	String status = "体重正常";
	if(bmi<19){
		status="多吃点,太瘦了!";
	}
	if(bmi>25){
		status="该减肥了!";
	}
	request.setAttribute("status", status);
	return "view";
}
/*
 * 使用方式一,在方法的声明的时候传入 HttpServletRequest ,然后绑定到请求上
 */
@RequestMapping("login_1.do")
public String login1(HttpServletRequest request){
	String name=request.getParameter("uname");
	String pwd = request.getParameter("pwd");
	String status = "请登录";
	if("caott".equals(name)&&"488".equals(pwd)){
		status = "caott成功";
	}else{
		status="caott失败";
	}
	request.setAttribute("status", status);
	return "view";
}
/*
 * 使用方式二,在方法中直接传入 和请求参数一致的 形式参数,并且传入HttpServletR	equest
 */
@RequestMapping("login_2.do")
public String login2(String uname,String pwd,HttpServletRequest request){
	String status = "请登录";
	if("caott".equals(uname)&&"488".equals(pwd)){
		status = "caott成功";
	}else{
		status="caott失败";
	}
	request.setAttribute("status", status);
	
	
	return "view";
}


/*
 * 使用方式三,创建一个类封装请求参数
 */
@RequestMapping("/login_3.do")
public String login2(LoginParam lg,HttpServletRequest request){
	String un = lg.getUname();
	String pwd=lg.getPwd();
	String status = "请登录";
	if("caott".equals(un)&&"488".equals(pwd)){
		status = "caott成功";
	}else{
		status="caott失败";
	}
	request.setAttribute("status", status);
	
	return "view";
}

/**
 * 使用方式4,在创键封装类的同时使用 Map,和 ModelAndView
 * ModelAndView 相当于一种引用类型,这种类型和其他类型声明一样
 * 但是这种类型的使用要传入Map值,所以,在这个方法里面新建了一个map,以键值对的形式存入map中
 * map要用put方法传入值
 */
@RequestMapping("/login_4.do")
public ModelAndView login3(LoginParam lg){
	String un = lg.getUname();
	String pwd=lg.getPwd();
	String status = "请登录";
	if("caott".equals(un)&&"488".equals(pwd)){
		status = "caott成功";
	}else{
		status="caott失败";
	}
	Map<String,Object> data = new HashMap<String,Object>();
	data.put("status", status);
	ModelAndView nav = new ModelAndView("view",data);
	System.out.println("ModelAndView方法");
	return nav;
}

/*
 * 使用方式5,这种方式是传入ModelMap和构造参数
 * 要用 .addAttribute("",值)的方式传入到ModeMap中
 */
@RequestMapping("/login_5.do")
public String login4 (LoginParam lp,ModelMap mm){
	String un = lp.getUname();
	String pwd = lp.getPwd();
	String status;
	if("caott".equals(un)&&"488".equals(pwd)){
		status = "caott成功";
	}else{
		status="登录失败";
	}
	mm.addAttribute("status",status);
	System.out.println("这是login_5.do的请求,使用了ModelMap");
	return "view";
}



}

3,两个bean

    3.1,计算bmi值得Bean

package controller;
/**
 * 用于封装请求参数,要求:
 * 1,属性名要与请求参数名一样
 * 2,属性类型要与请求参数值一致
 * 3,提供相应的get/set方法
 * @author 
 */

public class BmiParam {
private String weight;
private String height;
public String getWeight() {
	return weight;
}
public void setWeight(String weight) {
	this.weight = weight;
}
public String getHeight() {
	return height;
}
public void setHeight(String height) {
	this.height = height;
}
}

    3.2,注册登录的Bean

package controller;

/**
 * 这是login的构造方法,用于封装请求参数
 * 1,属性名要与请求名相同
 * 2,要有get/set方法、
 * 3,属性类型要与请求类型一致
 * @author 
 *
 */
public class LoginParam {

	private String uname;
	private String pwd;
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
}

            

                    特此说明:跟任何盈利性机构无任何关系,纯属个人娱乐笔记整理,希望也能帮助到小白


                                                                                                                                                        至此,晚安!



 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值