MVC
- web.xml
- resources中的创的xml
- 在java中创建包
- 在包中创建相对应的controller
1:模型(dao,service),视图(jsp),控制器(Servlet)底层就是servlet
2.jsp:本质就是一个Servlet
3.为了安全,用户不可见就把jsp放在WEB-INF下面
可见则直接放在web下面
4.DispatcherServlet
5.SpringMVC原理图
6.重定向:
视图解析器对重定向不起作用,即没有下段代码也可以
注意:1.记得注意index.jsp前面的斜线/
2.重定向不走视图解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
return "redirect:/index.jsp";
//记得注意index.jsp前面的斜线/
//重定向不走视图解析器
重定向不能直接访问WEB-INF文件夹的文件
7.接收前端传的数据
项目列表:
创建controller包:创建一个UserController
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/u1")
public class UserController {
//localhost:8080/user/t1?name=xxx;
@GetMapping("/t1")
public String test1(String name, Model model){
//1.接收前端参数 通过String name就能接收了
System.out.println("接收到前端的参数:"+name);
//2.将返回的结果传递给前端 用Model 还有其他方法
model.addAttribute("msg",name);
//3.视图跳转
return "test";
}
}
创建一个pojo包:创建一个user
package pojo;
public class User {
private int id;
private String name;
private int age;
public User() {
}
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = 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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
启动tomcat,浏览器输入:http://localhost:8080/springmvc4_controller/u1/t1?name=abc即显示出abc
8.如果将UserController中的代码修改为:
public String test1(@RequestParam("username") String name, Model model)
则浏览器输入:http://localhost:8080/springmvc4_controller/u1/t1?username=abc即显示出abc
9.接收前端的对象
@GetMapping("/t2")
public String test2(User user){
System.out.println(user);
return "test";
}
http://localhost:8080/springmvc4_controller/u1/t2?id=4&name=abc&age=10
结果:User{id=4, name=‘abc’, age=10}
http://localhost:8080/springmvc4_controller/u1/t2?id=4&username=abc&age=10
结果:User{id=4, name=null, age=10}
10.乱码 过滤器filter
- 自己配置:
<filter>
<filter-name>encoding</filter-name>
<filter-class>filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
<url-pattern>/* </url-pattern>
与
<url-pattern>/ </url-pattern>
的区别
/*要过滤jsp
/不过滤jsp
- springmvc的配置:
<filter>
<filter-name>encoding</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>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
json
导包
<dependencies>
<!-- https: / /mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxm1.jackson.core</ groupId>
<artifactId>jackson-databind< / artifactId>
<version>2.10.e</version>
</ dependency>
</ dependencies>
乱码问题
< ! --JSON乱码河题配置-->
<mvc : annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson20bjectMapperFactoryBean">
<property name="fail0nEmptyBeans" value="false"/>
< / bean>
</property>
< / bean>
</ mvc:message-converters>
</mvc :annotation-driven>
11.`@ResponseBody
//添加这个注解后,它就不会走视图解析器了,会直接返回一个字符串`
配合@Controller使用的
12.@RestController
//不经过视图解析器,返回一个字符串`
13.ajax
必须在resources中的xml中,web.xml中添加静态资源过滤,只有加了,之后导入的jquery才会加载
<mvc:default-servlet-handler/>
js:函数 ,闭包()()
14.拦截器
mvc特有的
配置:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="config.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>
可用于不登录不能进入主页
15.文件上传
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>