SpringMVC-1 基于注解方式开发

注解:

@Controller //表明该类是一个controller

@Scope("prototype")   设置为prototype是必要的singleton有线程安全问题

@RequestMapping

  1. @RequestMapping({"/xxx.do","xxxx.do"}) 
  2. @RequestMapping("/**/xxx.do") //表示xxx.do前面有多级/
  3. @RequestMapping("/forth*.do")

@RequestParam("pname") //加在形参前

 

1.简单的注解式SpringMVC工程

1.1.导包

  1. com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
  2. com.springsource.org.aopalliance-1.0.0.jar
  3. com.springsource.org.apache.commons.logging-1.1.1.jar
  4. com.springsource.org.apache.log4j-1.2.15.jar
  5. com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
  6. junit-4.9.jar
  7. mysql-connector-java-5.1.30.jar
  8. spring-aop-4.1.6.RELEASE.jar
  9. spring-aspects-4.1.6.RELEASE.jar
  10. spring-beans-4.1.6.RELEASE.jar
  11. spring-context-4.1.6.RELEASE.jar
  12. spring-context-support-4.1.6.RELEASE.jar
  13. spring-core-4.1.6.RELEASE.jar
  14. spring-expression-4.1.6.RELEASE.jar
  15. spring-jdbc-4.1.6.RELEASE.jar
  16. spring-orm-4.1.6.RELEASE.jar
  17. spring-tx-4.1.6.RELEASE.jar
  18. spring-web-4.1.6.RELEASE.jar
  19. spring-webmvc-4.1.6.RELEASE.jar

1.2.配置web.xml - 配置DispatcherServlet

<?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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>01-SpringMVC</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <!-- 配置springMVC中央调度器 -->
  <servlet>
  	<servlet-name>victor</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- 指定springmvc配置文件的路径及名称 -->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>victor</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

1.3.新建xxx.handlers.MyController

package com.bjsxt.handlers;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
//后端控制器
@Controller //表明该类是一个controller
@Scope("prototype")
public class MyController{
	
	@RequestMapping({"/my.do","some.do"})
	public ModelAndView first(HttpServletRequest request, HttpServletResponse response){
		ModelAndView mv = new ModelAndView();
		mv.addObject("message","Hello SpringMVC World!");
		mv.setViewName("/WEB-INF/jsp/welcome.jsp");
		return mv;
	}
	@RequestMapping("/second.do")
	public ModelAndView second(HttpServletRequest request, HttpServletResponse response){
		ModelAndView mv = new ModelAndView();
		mv.addObject("message","Hello!");
		mv.setViewName("/WEB-INF/jsp/welcome.jsp");
		return mv;
	}

}

1.4.在springmvc.xml中注册组件扫描器

需要注意的是springmvc.xml名称和路径需要与web.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:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd">
     <!-- 注册组件扫描器 -->
     <context:component-scan base-package="com.bjsxt.handlers"/>
</beans>

2.@RequestMapping

2.1 加在类名前表示命名空间

2.2 加在方法名前表示地址映射

2.3 value值是一个字符串数组

例子:

package com.bjsxt.handlers;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
//后端控制器
@Controller //表明该类是一个controller
@Scope("prototype")
@RequestMapping("/xxx/kkk") //命名空间
public class MyController{
	@RequestMapping({"/my.do","some.do"})
	public ModelAndView first(HttpServletRequest request, HttpServletResponse response){
		ModelAndView mv = new ModelAndView();
		mv.addObject("message","Hello SpringMVC World!");
		mv.setViewName("/WEB-INF/jsp/welcome.jsp");
		return mv;
	}
	@RequestMapping("/second.do")
	public ModelAndView second(HttpServletRequest request, HttpServletResponse response){
		ModelAndView mv = new ModelAndView();
		mv.addObject("message","Hello!");
		mv.setViewName("/WEB-INF/jsp/welcome.jsp");
		return mv;
	}
    //   /**表示有多级/
	@RequestMapping("/**/third.do")
	public ModelAndView third(HttpServletRequest request, HttpServletResponse response){
		ModelAndView mv = new ModelAndView();
		mv.addObject("message","Hello third!");
		mv.setViewName("/WEB-INF/jsp/welcome.jsp");
		return mv;
	}
	@RequestMapping("/forth*.do")
	public ModelAndView forth(HttpServletRequest request, HttpServletResponse response){
		ModelAndView mv = new ModelAndView();
		mv.addObject("message","Hello forth!");
		mv.setViewName("/WEB-INF/jsp/welcome.jsp");
		return mv;
	}

}

3.接收请求参数

3.0 接收参数乱码问题

此时需要在web.xml中注册字符编码过滤器

forceEndoding:true  是值在设置编码时一同设置response的编码

  <!-- 注册字符编码过滤器 -->
  <filter>
  	<filter-name>CharacterEncodingFilter</filter-name>
  	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>utf-8</param-value>
  	</init-param>
  	<init-param>
  		<param-name>forceEncoding</param-name>
  		<param-value>true</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>CharacterEncodingFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

3.1逐个接收 (涉及注解@RequestParam)

form:

<form action="${pageContext.request.contextPath}/test/my.do" method="post">
		<input type="text" name="pname"><br>
		<input type="text" name="age"><br>
		<input type="submit">
</form>

 controller:

package com.bjsxt.handlers;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
//后端控制器
@Controller //表明该类是一个controller
@Scope("prototype")
@RequestMapping("/test") //命名空间
public class MyController{
	//逐个接收前台数据
	@RequestMapping("/my.do")
    //当表单中的name与形参不同时可以试用@RequestParam("xxx")来映射
	public ModelAndView first(@RequestParam("pname") String name,int age){
		ModelAndView mv = new ModelAndView();
		System.out.println(name);
		//mv.addObject("name",name).addObject("age",age);
		mv.addObject("name",name);
		mv.addObject("age",age);
		mv.setViewName("/WEB-INF/jsp/welcome.jsp");
		return mv;
	}

}

3.2以对象形式整体接收

from表单的name属性与形参中的对象属性名保持一致即可

如表单:

<form action="${pageContext.request.contextPath}/test/my.do" method="post">
        <input type="text" name="sname"><br>
        <input type="text" name="age"><br>
        <input type="submit">
</form>

对应

public ModelAndView first(Student student){};

其中student的两个属性应为saname,age

3.3域属性参数的接收

当接收参数为对象,对象中还有对象时,

如Student中还有School对象时

只需要在form表单中的name中加上对象名即可

<form action="${pageContext.request.contextPath}/test/my.do" method="post">
        姓名:<input type="text" name="sname"><br>
        年龄:<input type="text" name="age"><br>
        学校:<input type="text" name="school.name"><br>
        地址:<input type="text" name="school.addr"><br>
        <input type="submit">
</form>

3.4数组参数的接收

示例:

<form action="${pageContext.request.contextPath}/test/my.do" method="post">
		<input type="checkbox" name="interest" value="a1">a1<br>
		<input type="checkbox" name="interest" value="a2">a2<br>
		<input type="checkbox" name="interest" value="a3">a3<br>
		<input type="checkbox" name="interest" value="a4">a4<br>
		<input type="submit">
	</form>
package com.bjsxt.handlers;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.bjsxt.pojo.Student;
//后端控制器
@Controller //表明该类是一个controller
@Scope("prototype")
@RequestMapping("/test") //命名空间
public class MyController{
	//逐个接收前台数据
	@RequestMapping("/my.do")
	public ModelAndView first(String[] interest){
		ModelAndView mv = new ModelAndView();
		mv.addObject("interest",interest);
		for (String string : interest) {
			System.out.println(string);
		}
		mv.setViewName("/WEB-INF/jsp/welcome.jsp");
		return mv;
	}

}

3.5restfull风格传参(涉及注解@ PathVariable)

3.6接收json(涉及注解@RequestBody)

 

转载于:https://my.oschina.net/nan99/blog/1518545

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值