文章目录
一、Spring
二、Spring MVC
2.1、第一个Spring MVC应用
1、创建项目导入jar包
2、配置前端控制器
web.xml
<!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>
<display-name>Archetype Created Web Application</display-name>
<!-- 配置前端过滤器springMVC-->
<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_main.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<!-- /会将所有的url拦截,并提交有DispatcherServlet-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3、创建Controller类
//继承controller成为一个servlet
public class LoginController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
//创建ModelAndView对象
ModelAndView modelAndView=new ModelAndView();
//向modelAndView对象中添加数据
modelAndView.addObject("msg","传输成功");
//设置逻辑视图名
modelAndView.setViewName("/WEB-INF/jsp/login.jsp");
//返回modelAndView对象
return modelAndView;
}
}
4、Spring MVC配置文件
Springmvc_config.xml
首先定义映射,FirstController映射到 /firstController,然后配置处理器映射器和处理器适配器,处理器映射器用于将处理器进行处理器查找,处理器适配器用于方法调用,显示view
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 配置处理器Handle,映射LoginController请求-->
<bean name="/LoginController" class="com.example.text.controller.LoginController"/>
<!-- 处理器映射器,将处理器Handle的name 作为url进行查找-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 处理器适配器,配置对处理器中handleRequest()方法的调用-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 视图解析-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>
5、/WEB-INF/jsp/login.jsp
<%@page isELIgnored= “false” %> 版本问题,加上这句否者el表达式失效
<%@page isELIgnored= "false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
2.2、核心类和注解
1、Controller注解
该注解在使用时不需要在实现Conroller接口,只需要将@Controller注解加入到控制器上,然后通过Spring的扫描机制找到标注该注解的控制器
2、RequestMapping注解
2.1标注在方法上
当标注在一个方法上时,该方法将成为一个请求处理方法,它会在程序接收到对应的url请求被调用,
3、代码案例
url:http://localhost:8080/javaee_war_exploded/firstController/main
如果上述代码没有@ResponseBody这一行,会报错,因为没有指定模板
@RestController =@Controller+@ResponseBody
@Controller
@ResponseBody
@RequestMapping("/firstController")
public class FirstController extends AbstractController {
@RequestMapping("/main")
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//创建ModelAndView对象
ModelAndView modelAndView=new ModelAndView();
//向modelAndView对象中添加数据
modelAndView.addObject("msg","666");
//设置逻辑视图名
modelAndView.setViewName("/WEB-INF/jsp/first");
//返回modelAndView对象
return modelAndView;
}
}
2.2.1、ViewResolver(视图解析器)
1、springmvc_config.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--自动扫描--><!-- 指定需要扫描的包-->
<context:component-scan base-package="com.example.text.*"/>
<!-- 页面配置不需要配置跳转页面,直接自动匹配到页面-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
前缀指定访问路径/,后缀指定文件格式.jsp
modelAndView.setViewName("/WEB-INF/jsp/first");
2.3、数据绑定
1、绑定简单数据类型
@RestController自带@ResponseBody,导致SpringBoot底层选择handle时选择的是-RequestResponseBodyMethodProcessor
url:http://localhost:8080/javaee_war_exploded/selectUser?id=10
@Controller
public class UserController {
@RequestMapping("/selectUser")
public String selectUser( HttpServletRequest request ){
String id=request.getParameter("id");
System.out.println(id);
return "jsp/success";
}
}
2、绑定POJO类型
2.1User
package com.example.text.vo;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
2.2、UserController
@Controller
public class UserController {
@RequestMapping("/toRegister")
public String toRegister(){
return "jsp/register";
}
@RequestMapping("/registerUser")
public String registerUser(User user){
String username=user.getUsername();
String password=user.getPassword();
System.out.println(username);
System.out.println(password);
return "jsp/success";
}
}
返回成功页面ok
2.4、JSON数据交互
1、web.xml
<!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>
<display-name>Archetype Created Web Application</display-name>
<!-- 配置前端过滤器springMVC-->
<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_config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<!-- /会将所有的url拦截,并提交有DispatcherServlet-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2、springmvc_config.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--自动扫描--><!-- 指定需要扫描的包-->
<context:component-scan base-package="com.example.text.*"/>
<!-- 配置注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置静态资源的访问映射,此配置文件,不被2前端控制器拦截-->
<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
<!-- 页面配置不需要配置跳转页面,直接自动匹配到页面-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
3、json.jsp
<%--
Created by IntelliJ IDEA.
User: Dell
Date: 2022/9/30
Time: 16:57
To change this template use File | Settings | File Templates.
--%>
<%@page isELIgnored= "false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<script type="text/javascript"></script>
<%--<script src="../js/jquery.js"></script>--%>
<script type="text/javascript" src="../js/jquery02.js"></script>
<%--<script src="../js/jquery-ui.min.js"></script>--%>
<body>
<script type="text/javascript">
function json(){
// //获取用户名密码
var username=$("#username").val();
var password=$("#password").val();
$.ajax({
url:"${pageContext.request.contextPath}/testJson",
type:"post",
//发送的数据
data:JSON.stringify({username:username,password:password}),
//发送的格式
contentType:"application/json",
//回调响应的字符串
dataType:"json",
success:function (data){
if (data!=null){
alert(data.username+""+data.password);
}
},
error:function (){
alert("error");
}
})
}
</script>
<form id="form">
账号:<input name="username" type="text" id="username"/><br>
密码:<input name="password" type="text" id="password"/><br>
<input type="button" value="测试json交互" onclick="json()"/>
</form>
</body>
</html>
4、UserController
@Controller
public class UserController {
@RequestMapping("/testJson")
@ResponseBody
public User testJson(@RequestBody User user){
System.out.println(user);
return user;
}
}