提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是MVC?
1.什么是MVC
MVC:
| M:Model模型层,指工程中的JavaBean,作用是处理数据 |
|---|
| V:View,视图层,指工程中的Html或JSP等页面,作用是与用户进行交互,展示数据 |
| C:Controller,控制层,指工程中的Servlet,作用是接受请求和响应浏览器 |
JavaBean分两类:
| 一类称实体类Bean: | 专门存储业务数据,如Student,User等 |
|---|---|
| 一类称业务处理Bean: | 指Service或Dao对象,专门处理业务逻辑 |
MVC工作流程:
视图层发送请求到服务器,被Controller接受后,调用Model请求处理;再将结果返回给Controller,Controller再找到View视图,最后响应服务器。
2.HelloWorld
1.配置Web.xml
- 默认配置方式
<!--配置 SpringMVC 的前端控制器,对浏览器发送的请求进行统一处理-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!--
1、设置 SpringMVC 的核心控制器所能处理的请求的请求路径
2、/ 所匹配的请求可以是 /login 或 .html 或 .js 或 .css 方式的请求路径,
但 / 不能匹配 .jsp 请求路径的请求
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
- 扩展配置方式
<!--配置 SpringMVC 的前端控制器,对浏览器发送的请求进行统一处理-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--通过初始化参数指定 SpringMVC 配置文件的位置和名称-->
<init-param>
<!-- contextConfigLocation 为固定值-->
<param-name>contextConfigLocation</param-name>
<!--使用 classpath 表示从类路径查找配置文件,例如maven工程中的 src/main/resources -->
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<!--
服务器启动时就初始化 DispatcherServlet :
作为框架的核心组件,在启动过程中有大量的初始化操作要做
而这些操作放在第一次请求时才执行会严重影响访问速度
因此需要通过此标签将启动控制 DispatcherServlet 的初始化时间提前到服务器启动时
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
- 配置SpringMVC.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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 注解扫描 -->
<context:component-scan base-package="com.example.controller" />
<!-- 开启注解驱动 -->
<mvc:annotation-driven />
<!-- 静态资源处理 -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
- 配置java文件
@Controller
public class HelloController{
@RequestMapping("\")
public String indenx(){
return "index";
}
}

二、@RequestMapping
1.用在类上和方法上
用法:地址是类上value+方法上value
@RestController
// 映射到类上
// localhost:8080/user
@RequestMapping("/user")
public class UserController {
// 映射到方法上
// localhost:8080/user/login
// localhost:8080/user/page
// localhost:8080/user/pageabc 三种均可访问
// 此处通常用 @GetMapping("/user/login") 表明GET请求方式的映射
@RequestMapping(value={"/login",
"/page",
"page*"})
public String login() {
return "user login";
}
// 映射到方法上
// localhost:8080/user/register
// 此处通常用 @PostMapping("/user/login") 表明POST请求方式的映射
@RequestMapping("/register")
public String register() {
return "user register";
}
}
以列表的形式存储,相互之间是或的关系,有一个满足就可以
2.method
@RestController
@RequestMapping("/home")
public class IndexController {
@RequestMapping(method = RequestMethod.GET)
String get() {
return "Hello from get";
}
@RequestMapping(method = RequestMethod.POST)
String post() {
return "Hello from post";
}
@RequestMapping(method = {RequestMethod.POST, RequestMethod.GET})
String method() {
return "Hello method";
}
}
相当于@GetMapping、@PostMapping、@PutMapping、@DeleteMapping
3.params
必须要满足的参数
@RestController
@RequestMapping("/home")
public class IndexController {
@RequestMapping(value = "/fetch", params = {
"personId=10"
})
}
相互间是与的关系,要全部满足
4.headers
限制浏览器的头信息
@RestController
@RequestMapping("/home")
public class IndexController {
@RequestMapping(value = "/head", headers = {
"content-type=text/plain"
})
}
三、控制台从浏览器获得值
1. @PathVariable
将浏览器获得值与属性值进行绑定,返回到控制台中
@RequestMapping("/getUserById/{name}")
public User getUser(@PathVariable("name") String name){
return userService.selectUser(name);
}
2.通过ServletAPI获取
通过HttpServletRequest作为控制器方法的形参获取
@RequestMapping("/testParam")
public String testParam(HttpServletRequest request) {
String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println("name"+name+"age"+age);
return "success";
}
3.通过控制器方法的形参获取请求参数
需要设置和请求参数同名的形参
@RequestMapping("/param")
public String getParam(String username,String password,String[] hobby){
System.out.println("username = " + username+",password = " + password+",hobby"+Arrays.toString(hobby));
return "success";
}
}
4. @RequestHeader
用于请求参数和形参不一致的情况
@RequestMapping("/param")
public String getParam(@RequestParam(value = "userName", required = true, defaultValue = "hello") String username,
@RequestParam("password") String password){
System.out.println("username = " + username+",password = " + password);
return "success";
}
}
5. @RequestHeader和@CookieValue
暂时没有什么用
@RequestMapping("/param")
public String getParam(@RequestHeader("referer") String referer,
@CookieValue("JSESSIONID") String jsessionId){
System.out.println("jsessionId = " + jsessionId);
System.out.println("referer = " + referer);
return "success";
}
}
6. 通过实体类获取请求参数
实体类中属性和表单中属性一致即可
User
package demo.bean;
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String sex;
private String email;
public User() {
}
public User(Integer id, String username, String password, Integer age, String sex, String email) {
this.id = id;
this.username = username;
this.password = password;
this.age = age;
this.sex = sex;
this.email = email;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", email='" + email + '\'' +
'}';
}
}
ParamController
@RequestMapping("/testBean")
public String testBean(User user){
System.out.println(user);
return "success";
}
四、向域对象共享数据
三种域对象:
| request | 一次请求 |
|---|---|
| session | 浏览器开启到浏览器关闭 |
| application | 服务器开启到服务器关闭 |
1.使用 servletAPI 向 request 域对象共享数据
@Controller
public class ScopeController {
@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request){
request.setAttribute("testScope", "hello,servletAPI");
return "success";
}
}
2.使用 ModelAndView 向 request 域对象共享数据
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView() {
ModelAndView mav = new ModelAndView();
mav.addObject("testRequestScope", "Hello ModelAndView");
mav.setViewName("success");
return mav;
}
3.使用 Model 向 request 域对象共享数据
@RequestMapping("/testModel")
public String testModel(Model model){
model.addAttribute("testScope", "hello,Model");
return "success";
}
4.使用 map 向 request 域对象共享数据
@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
map.put("testScope", "hello,Map");
return "success";
}
5.使用 ModelMap 向 request 域对象共享数据
@RequestMapping("/testModelMap")
public String testModelMap(ModelMap modelMap){
modelMap.addAttribute("testScope", "hello,ModelMap");
return "success";
}
6.向 session 域共享数据
@RequestMapping("/testSession")
public String testSession(HttpSession session){
session.setAttribute("testSessionScope", "hello,session");
return "success";
}
7.向 application 域共享数据
@RequestMapping("/testApplication")
public String testApplication(HttpSession session){
ServletContext application = session.getServletContext();
application.setAttribute("testApplicationScope", "hello,application");
return "success";
}
基本上都是.addAttribute,方便记忆;Model、ModelMap、Map有共同的父类
五、视图(略)
1.转发(默认转发)
@RequestMapping("/testForward")
public String testForward(){
return "forward:/testThymeleafView";
}
2.重定向
@RequestMapping("/testRedirect")
public String testRedirect(){
return "redirect:/testThymeleafView";
}
3.视图控制器(可以不创建类)
<!--配置SpringMVC的视图控制器-->
<!--path: 设置处理的请求地址 view-name:设置请求地址所对应的视图名称-->
<mvc:view-controller path="/" view-name="index"></mvc:view-controller>
<!--开启SpringMVC的注解驱动(当使用视图控制器后,其他的请求映射将会失效)-->
<mvc:annotation-driven/>
4.jsp
如果没有必要的话,Thymeleaf不建议先学,后面要用的时候再学,jsp建议学一下,因为学校里面要用
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>我是首页</h1>
<%--${pageContext.request.contextPath}代表上下文--%>
<a href="${pageContext.request.contextPath}/success">success.jsp</a>
</body>
</html>
六、RESTful
1.RESTful
Resource:资源,即数据(这是网络的核心);
Representational:某种表现形式,比如用JSON,XML,JPEG等;
State Transfer:状态变化。通过HTTP的动词(get查询、post新增、put修改、delete删除)实现。
2.资源
七、报文转换(没看懂)
1.资料
应该就是将返回对象直接显示到浏览器,和从浏览器得到头信息。
添加链接描述
八、拦截器
1.资料
就preHandler有用,返回false拦截,拦截顺序顺逆逆。
添加链接描述
九、异常处理器
1.SpringMVC配置
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props >
<!--properties的键表示处理器方法执行过程中出现的异常 properties的值表示若出现指定异常时,
设置一个新的视图名称,跳转到指定页面 -->
<!--key设置要处理的异常,value设置出现该异常时要跳转的页面所对应的逻辑视图-->
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
<!--exceptionAttribute属性设置一个属性名,将出现的异常信息在请求域中进行共享 -->
<!--设置共享在请求域中的异常信息的属性名-->
<property name="exceptionAttribute" value="ex"></property>
</bean>
2.注解配置异常处理器
//@ControllerAdvice将当前类标识为异常处理的组件
@ControllerAdvice
public class ExceptionController {
//@ExceptionHandler用于设置所标识方法处理的异常
@ExceptionHandler(ArithmeticException.class)
//ex表示当前请求处理中出现的异常对象
public String handleArithmeticException(Exception ex, Model model){
model.addAttribute("ex", ex);
return "error";
}
}
总结
只听尚硅谷的课,感觉有点不够用,下次会试试别的课。
笔记
58万+

被折叠的 条评论
为什么被折叠?



