SpringMVC01_SpringMVC开发

SpringMVC

纯注解式开发    
具备IOC和AOP,提供了5中数据提交方式,4种跳转,多个内置对象,简化控制器的处理

优点

  • 基于MVC的开发

    • MVC是一种开发模式,基于web的开发模式,web开发是基于Servlet的
    • M(Model):模型层,数据访问层,业务逻辑层,实体类都属于模型层,进行数据传递和处理的组件
    • V(View):视图层,用来进行数据显示的.html,JavaScript,CSS+DIV,Vue,BootStrap,Jsp
    • C(controller):控制器,用来接收用户的输入,调用业务逻辑层进行数据处理,并将结果返回到客户端
  • 易学易用

    • 一直在进行各种优化,上手快
  • 核心是IOC和AOP

    • 最终的目标依然是解耦合
  • 基于注解开发

    • 纯注解开发,简化操作

基于注解的SpringMVC的项目

开发步骤

1)新建基于Maven的项目,选择webapp模板

2)修改目录(补充目录结构)

3)修改pom.xml文件,添加Servlet依赖,添加SpringMVC的依赖

<!--pom.xml-->
<dependencies>
    <!--添加Servlet的依赖-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
    </dependency>
    <!--添加SpringMVC的依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.5.RELEASE</version>
    </dependency>
</dependencies>

4)修改webapp目录下的文件,添加admin目录,在admin目录下添加main.jsp页面

5)删除index.jsp页面,在webapp目录下新建index.jsp页面

6)添加springmvc.xml配置文件

7)删除web.xml文件,新建,改名

8)在web.xml文件中注册SpringMVC框架

使用DispatcherServlet注册,它是第三方的组件,必须使用标签进行配置
所有的web请求都是基于Servlet的
SpringMVC的控制器是普通方法

index.jsp<===============>核心处理器的Servlet<======分发请求到action======>DemoServlet(DemoAction普通方法)
index.jsp<===============>DispatcherServlet<===============>DemoServlet(DemoAction普通方法)
<!--web.xml-->
<web-app>
    <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:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--
          设置拦截哪些请求交给DispatcherServlet进行处理          
          <a href="/demo.action">访问服务器</a>
        -->
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
</web-app>

9)开发index.jsp页面,发送请求到action

<a href="/demo.action">访问服务器</a>

10)开发DemoAction

// DemoAction.java
@Controller   //交给Spring去创建对象  IOC
public class DemoAction {
	/**
	 * 所有处理交给action方法,它是一个普通的方法
	 * action方法的规范
	 * 1)访问权限是public
	 * 2)方法的返回值任意
	 * 3)方法的名称自定义
	 * 4)方法的参数任意
	 * 5)使用注解@RequestMapping解析访问路径
	 *
	 <property name="prefix" value="/admin/"></property>
	 *  <property name="suffix" value=".jsp"></property>
	 */
	@RequestMapping("/demo")
	public String demo() {
		System.out.println("服务器被访问到了............");
		return "main";
	}
}

@RequestMapping注解

1)@RequestMapping注解添加在方法上,为此方法解析一个可访问的名称

2)@RequestMapping注解添加到类上,相当于是报名,用于区分不同类种同名的action

3)@RequestMapping可以区分get请求和post请求

@RequestMapping(value = "/path", method = RequestMethod.GET)
@RequestMapping(value = "/path", method = RequestMethod.POST)

五种数据提交的方式

1)单个数据提交

class java {
	/**
	 * 姓名:<input name="uname"><br>
	 * 年龄:<input name="uage"><br>
	 */
	@RequestMapping("/one")
	public String one(String uname, int uage) {
		System.out.println("提交上来的用户名是:" + uname + ",年龄是:" + (uage + 100) + ".");
		return "main";
	}
}

2)对象封装提交

class java {
	/**
	 * 实体类:
	 *     private String name;
	 *     private int age;
	 * 请求参数:
	 *    姓名:<input name="name"><br>
	 *    年龄:<input name="age"><br>
	 *
	 */
	@RequestMapping("/two")
	public String two(Users u) {
		System.out.println(u);
		return "main";
	}
}

3)动态占位符提交

class java {
	/**
	 * 页面:
	 *   <a href="/three/张三/22.action">ResutFul风格</a>
	 */
	@RequestMapping("/three/{name}/{age1}")
	public String three(
			@PathVariable
			String name,
			@PathVariable("age1")
			int age) {
		System.out.println("提交上来的用户名是:" + name + ",年龄是:" + (age + 100) + ".");
		return "main";
	}
}

4)映射请求参数

class java {
	/**
	 * 姓名:<input name="name"><br>
	 * 年龄:<input name="age"><br>
	 */
	@RequestMapping("/four")
	public String four(
			@RequestParam("name")
			String uname,
			@RequestParam("age")
			int uage) {
		System.out.println("提交上来的用户名是:" + uname + ",年龄是:" + (uage + 100) + ".");
		return "main";
	}
}

5)手工提取数据

class java {
	/**
	 * 姓名:<input name="name"><br>
	 * 年龄:<input name="age"><br>
	 */
	@RequestMapping("/five")
	public String five(HttpServletRequest request) {
		String name = request.getParameter("name");
		int age = Integer.parseInt(request.getParameter("age"));
		System.out.println("提交上来的用户名是:" + name + ",年龄是:" + (age + 100) + ".");
		return "main";
	}
}

中文乱码解决方案

使用过滤器进行中文编码配置
<!--web.xml-->
<web-app>
    <!--中文编码过滤器配置在最前面(建议)-->
    <filter>
        <filter-name>utf8Filter</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>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>utf8Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

处理器方法的返回值

在controller层添加@ResponseBody注解,可以使接口响应结果到浏览器内

在pom.xml文件中添加jackson的依赖,因为SpringMVC框架自动进行json转换要使用的工具类


<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.8</version>
    </dependency>
</dependencies>

在类或方法上添加注解@ResponseBody


@Controller
@RequestMapping("/ajax")
public class StudentAction {
	
	@ResponseBody  //声明是ajax请求
	public List<Student> ajax() {
		List<Student> list = new ArrayList<>();
		Student stu1 = new Student("张三", 22);
		Student stu2 = new Student("李四", 23);
		Student stu3 = new Student("王五", 24);
		list.add(stu1);
		list.add(stu2);
		list.add(stu3);
		return list;  //SpringMVC框架自动转换为json数组  [{"name":"张三","age":22},{"name":"李四","age":23},{"name":"王五","age":24}]
	}
}

/*
@Controller
@ResponseBody
*/
@RestController //为@Controller @ResponseBody 的集合注解
@RequestMapping("/ajax")
public class StudentAction {
	
	public List<Student> ajax() {
		List<Student> list = new ArrayList<>();
		Student stu1 = new Student("张三", 22);
		Student stu2 = new Student("李四", 23);
		Student stu3 = new Student("王五", 24);
		list.add(stu1);
		list.add(stu2);
		list.add(stu3);
		return list;  //SpringMVC框架自动转换为json数组  [{"name":"张三","age":22},{"name":"李四","age":23},{"name":"王五","age":24}]
	}
}

在springmvc.xml文件中添加注解驱动 ,它是与@ResponseBody注解配置使用

<!--springmvc.xml-->
<beans>
    <!--因为解析ajax请求,必须添加注解驱动,不需要添加视图解析器-->
    <mvc:annotation-driven></mvc:annotation-driven>
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值