springMVC环境的搭建(一)
概要:
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:
(控制器Controller)- 负责转发请求,对请求进行处理。
(视图View) - 界面设计人员进行图形界面设计。
(模型Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。
1.低耦合性
视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
2.高重用性和可适用性
随着技术的不断进步,现在需要用越来越多的方式来访问应用程序。MVC模式允许你使用各种不同样式的视图来访问同一个服务器端的代码。它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。例如,很多数据可能用HTML来表示,但是也有可能用WAP来表示,而这些表示所需要的命令是改变视图层的实现方式,而控制层和模型层无需做任何改变。
3.较低的生命周期成本
MVC使开发和维护用户接口的技术含量降低。
4.快速的部署
使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
5.可维护性
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
6.有利于软件工程化管理
由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。
一、创建一个web项目springMVC,修改编码方式:utf-8.
二、在web-INF下lib导入所需.jar包。(本次加入包有限只为基本环境使用)
三、环境搭建于测试
3.1在src下建包ckx.spring.mvc.controller
在包下new一个Controller测试类TestController.java代码如下:
package ckx.spring.mvc.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; @Controller
public class TestController { @RequestMapping("/test001")
public ModelAndView test001(ModelAndView ModelAndView){
ModelAndView.setViewName("test001");
return ModelAndView;
}
}
3.2根据返回的视图名在web-root下new一个test001.jsp,直观期间修改body里面内容:This is test001 page.
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'test001.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
This is test001 page. <br>
</body>
</html>
3.3在web.xml配置核心控制器dispatchservlet:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 初始化DispatcherServlet -->
<servlet>
<!--servlet名称-->
<servlet-name>springmvc</servlet-name>
<!--springmvc核心控制器DispatcherServlet-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--初始化配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</init-param>
<!--设置启动顺序,启动的时候就加载这个servlet-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--配置拦截形式 "/"拦截所有-->
<url-pattern>/</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.3在web-inf下创建springmvc-servlet.xml配置文件。
3.3.1配置解析:
1、因为在MVC中常用到注释因此要有开启注释的驱动:<mvc:annotation-driven></mvc:annotation-driven>
2、配置对controller的扫描:<context:component-scan base-package="ckx\spring\mvc\controller"></context:component-scan>注意路径
3、配置解析类:
<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
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/aop
http://www.springframework.org/schema/aop/spring-aop-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/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!--开启注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven> <!--扫描controller-->
<context:component-scan base-package="ckx\spring\mvc\controller"></context:component-scan> <!-- 定义viewResolver实例,视图解释类 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 注入viewClass实例 -->
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<!-- <!-- URL前缀 ,在jsp直接位于web-INF下是直接用“/”即可,若在web-INF下文件夹,还需拼接--> -->
<property name="prefix" value="/" />
<!-- URL后缀 找出我们需要的视图,以.jsp文件 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
3.3.2修改index.jsp欢迎页,使其有跳转功能。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
<a href="<%=path %>/test001">跳转test001</a> <br/><br/>
</body>
</html>
3.3.3在tomcat中添加项目springMVC后在浏览器地址栏运行localhost:8080/springMVC:
3.3.4点击超链接跳转到test001.jsp:
3.3.5完成基本配置实现页面跳转。
3.4.1页面带值传递,在test001方法中加入数据模型参数model(model默认作用于request)
注意导入正确的包:import org.springframework.ui.Model;
@RequestMapping("/test001")
public ModelAndView test001(ModelAndView ModelAndView,Model model){
ModelAndView.setViewName("test001");
model.addAttribute("name","凯特.温斯莱特");
return ModelAndView;
}
3.4.2刷新test001.jsp,实现带值跳转:
3.5已返回字符串的形式跳转页面(代码更为简洁,这里使用test001页面,只是改变跳转请求。):
@RequestMapping("/test002")
public String test002(Model model){
model.addAttribute("name", "杨千嬅");
return "test001";
}
在欢迎页加test002跳转请求
<a href="<%=path %>/test002">跳转test002</a> <br/><br/>
重启服务器,点击test002超链接,实现用返回字符串的方法实现带数据跳转:
3.6重定向redirect(注意重定向是要加.jsp后缀名,或者return "redirect:/test002";)
@RequestMapping("/test003")
public String test003(Model model){
model.addAttribute("name", "RedirectTest003");
return "redirect:test002.jsp";
}
new一个 test002.jsp:
<body>
This is test002 page. <br></br>
${name} </body>
index.jsp添加超链接:
<a href="<%=path %>/test002">跳转test002</a> <br/><br/>
重启服务,跳转test003实现重定向(重定向是get请求注意地址栏):
四、参数解析,从页面提取数据到后台:
4.1在controller添加一个登陆的方法login:
@RequestMapping("/login")
public String login(String username , String password){
System.out.println("username:"+username);
System.out.println("password:"+password);
return "index";
}
new一个login.jsp:
<body>
<p align="center">
<form action="<%=path %>/login" method="post">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" value="提交">
</form>
</p>
</body>
重启服务器,运行localhost:8080/login.jsp:
输入用户名、密码提交,查看控制台获取数据成功:
但是这种方法在面对多字段时会使方法参数过于冗余,这时就要引进用类做参数了:
创建一个注册页面:
<body>
<p align="center">
<form action="<%=path %>/register" method="post">
用户名:<input type="text" name="username"><br/>
性别:<input type="text" name="sex"><br/>
年龄:<input type="text" name="age"><br/>
政治面貌:<input type="text" name="zzmm"><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" value="注册">
</form>
</p>
</body>
创建一个实体类用来保存这些字段参数:
package ckx.spring.mvc.entity; public class User {
private String username;
private String sex;
private int age;
private String zzmm;
private String password; public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getZzmm() {
return zzmm;
}
public void setZzmm(String zzmm) {
this.zzmm = zzmm;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} }
新增一个请求方法register,以user类作为参数:
@RequestMapping("/register")
public String register(User user){
System.out.println("username:"+user.getUsername());
System.out.println("username:"+user.getAge());
System.out.println("username:"+user.getSex());
System.out.println("username:"+user.getZzmm());
System.out.println("username:"+user.getPassword());
return "index";
}
重启服务器,运行register.jsp页面,并填入数据:
点击提交查看控制台获取数据成功:
springMVC环境的搭建(一)的更多相关文章
- springmvc环境的搭建
最近应公司要求,用了2天时间学了springmvc的搭建,就简单总结一下: springmvc和struts2的比较,因为我是学过struts的,它们都是基于mvc模式而设计的web层框架 它们最大的 ...
- spring入门(五)【springMVC环境搭建】
springMVC作为spring的一个WEB组件,是一个MVC的思想,减少了WEB开发的难度,现介绍springMVC环境的搭建,具体的原理放在后面介绍.用过框架的朋友都知道要在WEB项目中使用一个 ...
- SpringMvc环境搭建(配置文件)
在上面的随笔里已经把搭建springmvc环境的基本需要的包都下下来了,拉下来就是写配置文件了. 下面左图是总的结构,右图是增加包 一.最开始当然是web.xml文件了,这是一个总的宏观配置 < ...
- SpringMVC环境搭建和详解
1.Spring容器和SpringMVC容器是父子容器 1.1 SpringMVC容器可以调用Spring容器中的所有内容 1.2 图示 2.SpringMVC环境搭建 1.导入jar包 2.在web ...
- springmvc环境搭建及实例
一. 软件环境 eclipse-jee-mars-R-win32-x86_64 jdk1.7.0_79 apache-tomcat-7.0.52 spring-framework-3.2.0.RELE ...
- SpringMVC 环境搭建
SpringMVC 框架环境搭建操作步骤如下: 创建动态 Web 项目 配置 Tomcat 服务器 配置 SpringMVC 前端控制器 <?xml version="1.0" ...
- Springmvc+Spring+Hibernate搭建方法
Springmvc+Spring+Hibernate搭建方法及example 前面两篇文章,分别介绍了Springmvc和Spring的搭建方法,本文再搭建hibernate,并建立SSH最基本的代码 ...
- SSM框架——Spring+SpringMVC+Mybatis的搭建
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- 总结:Mac前端开发环境的搭建(配置)
新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...
- CentOS7 + mono +Jexus 环境的搭建
CentOS7的安装和配置 1,从http://www.centos.org/下载CentOS7的镜像,并在VMWare中创建该镜像的虚拟机,为方便操作,把虚拟机的网络连接设置为桥接模式:在安装过程中 ...
随机推荐
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(22)-如何使用Fiddler生成Jmeter脚本-下篇
1.简介 今天这篇文章其实和上一篇差不多也是利用一个fiddler的插件进行Jmeter脚本的导出,开始宏哥想要合在一起写一篇文章,可是结果实践的时候,两个插件还是有区别的,因此为了不绕晕小伙伴或者童 ...
- CPU密集型和IO密集型(判断最大核心线程的最大线程数)
CPU密集型和IO密集型(判断最大核心线程的最大线程数) CPU密集型 1.CPU密集型获取电脑CPU的最大核数,几核,最大线程数就是几Runtime.getRuntime().availablePr ...
- ProxySQL Disk库和Stats库
转载自:https://www.jianshu.com/p/9ef815162fe9 DISK库 disk schema 用于将配置持久化到磁盘上.配置持久化后,下次重启ProxySQL时就会读取这些 ...
- 堆Pwn:House Of Storm利用手法
0x00:介绍 利用手法的背景: house of storm是一种结合了unsorted bin attack和Largebin attack的攻击技术,其基本原理和Largebin attack类 ...
- 深入理解AQS--jdk层面管程实现【管程详解的补充】
什么是AQS 1.java.util.concurrent包中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列.条件队列.独占获取.共享获取等,而这些行为的抽象就是基于AbstractQueu ...
- 锐捷网关交换机开启dhcp服务
锐捷网关交换机作为dhcp server: Ruijie(config)#service dhcp ------>该命令默认不启用,交换机必须配置 Ruijie(config)#i ...
- 把train数据集生成txt(test同理)
import cv2 import numpy as np import os import sys import pickle data_dir = os.path.join("./&qu ...
- .NET 7 RC 2 发布,倒计时一个月发布正式版
微软2022-10-22 发布了 .NET 7 RC 2,下一站是.NET 7正式发布,就在下个月Net Conf 2022(11月8日)期间正式发布. 经过长达一年时间的开发,.NET 7 规划的所 ...
- JPA入门学习集合springboot(一)
1.在pom.xml文件中添加相应依赖 SpringData jpa和数据库MySql <!-- Spring Data JPA 依赖(重要) --> <dependency> ...
- ZJOI2007报表统计
题目链接 比较简单的一道平衡树题. 第三个操作可以直接用map完成(加进去一个数只会让答案变小,于是与它的前面后面一个数做差更新答案即可),只考虑前两个操作. ·维护区间内的最大最小值,以及区间相邻两 ...