关于springMVC的执行流程、配置方式和一些基本操作 ,推荐一篇帖子:https://www.cnblogs.com/tonghun/p/6914515.html
本次记录一个springmvc的简单入门小测试,和简单的接收表单数据
1.创建maven项目,点击Create from archetype,并选中maven-archetype-webapp原型。
2.构建好后,目录结构如下
3.创建源码文件夹和资源文件夹
在src/main创建好文件夹后,还需要设置java为源码文件夹,resources为存放资源的文件夹。
3.maven添加依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
4.在web.xml中添加springMVC的入口
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<!--入口-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--springmvc的默认配置文件是放在WEB-INF下的,
并且要命名为*-servlet.xml,*为servlet的name,比如现在就为"pringmvc"。
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
5.根据web.xml中设置的路径,添加springMVC的配置文件
5.在springmvc配置文件中添加视图定位和需要扫描的包的位置
<!--扫描指定包下的bean 交由spring管理-->
<context:component-scan base-package="com.byh.controller" />
<!--视图定位-->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
6.创建好路径com.byh.controller,在其下创建Hello.java
/*@Controller定义一个控制器
*@RequestMapping 定义访问路径
*/
package com.byh.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Hello {
@RequestMapping("/hello")
public String hello(){
//这里因为springmvc配置文件中定义好了视图定位器,返回hello就是返回到/WEB-INF/page/hello.jsp
return "hello";
}
}
7.配置tomcat,测试。
接下来做接收表单数据的例子
1.创建好一个实体,用以接收表单数据,也可以单个接收表单数据,但是个人觉得比较麻烦
package com.byh.pojo;
public class Student {
private int id;
private String name;
private String age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
2.在WEB-INF/page下创建addStudent.jsp、showStudent.jsp
//这里之所以没有创建在webapp下是因为按照习惯只有index和login才能被直接访问。
//所以单独写一个只用于跳转的控制器,如下:
package com.byh.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class PageController {
@RequestMapping("showAdd")
public String addStudent(){
return "addStudent";
}
}
(1)addStudent.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="addStudent">
学生姓名 :<input type="text" name="name" value=""><br />
学生年龄: <input type="text" name="age" value=""><br />
<input type="submit" value="录入">
</form>
</body>
</html>
(2)showStudent.jsp,这里注意添加了isELIgnored="false",不然EL表达式无法解析。
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
录入的姓名:${student.name},年龄:${student.age}
</body>
</html>
3.接下来写控制器
package com.byh.controller;
import com.byh.pojo.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class StudentController {
@RequestMapping("addStudent")
public String add(Student student, Model model){
model.addAttribute("student",student);
return "showStudent";
}
}
4.测试。浏览器地址栏输入http://localhost:8080/showAdd。
这里中文应该乱码的,但是没有,忘记为什么了,如果出现乱码,则做如下修改:
1.修改addStudent.jsp的form表单的提交方式为post
2.web.xml中添加一个解决中文乱码的filter
<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> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>