栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MVC框架基本使用及中文乱码问题学习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MVC框架基本使用及中文乱码问题学习笔记

在SpringMVC中,我们把接受用户请求、处理用户请求的类称之为Controller(控制器)
3.1创建控制器
3.1.1
1.创建名为com.qfedu.controllers的包(这个包需要在spring注解扫描的范围内)
2.创建一个类(无需做任何的继承和实现)
3.在类上添加@Controller 声明此类为spring的控制器
4.在类上添加@RequestMapping(“url”) 声明此控制器类的请求url

@Controller
@RequestMapping("/book")
public class BookContoller {


}

3.1.2
在控制器类中定义处理请求的方法

在一个控制器类中可以定义多个方法处理不同的请求
在每个方法上添加@RequestMapping(“url”)用于声明当前方法请求的url

@Controller
@RequestMapping("/book")
public class BookContoller {
@RequestMapping("/add")
public void add()
{
System.out.println("bookadd");


}
@RequestMapping("/list")
public void list()
{
System.out.println("booklist");

}

3.1.3访问
在浏览器中输入:http://localhost:8080/springmvc_demo02/book/add
可以在idea控制台得到:

3.2静态资源配置
静态资源:html、css、js、 图片 字体 等
3.2.1
web.xml中/*和/的区别:
/*是拦截所有的http请求 包括.jsp的请求 都作为控制器类的请求路径来处理
/ 是拦截所有的http请求 不包括.jsp的请求 但不会放行静态资源请求 htms/css/js图片
3.2.2静态资源放行配置
在springmvc的配置文件配置:



3.3前端提交数据到控制器
3.3.1创建前端页面
book-add.jsp表单中的action属性设置控制器类的url和对应方法的url组合路径
book-add.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


Title


添加图书

图书名称:

图书作者:

图书价格:

3.3.2前端页面提交数据
1.表单提交:输入框需要提交name属性,springmvc控制器是通过name属性取值的


添加图书

图书名称:

图书作者:

图书价格:

2.url提交:

3.AJAX提交:请求行、请求头、请求体都可以用来传值
3.4控制器接受前端数据提交的数据
3.4.1请求行传值

表单提交

url提交

ajax请求的url传值

. p o s t ( ) / .post()/ .post()/.get()的传值

@RequestParam注解用于接受请求行传递的数据

前端提交数据

图书名称:

图书作者:

图书价格:

控制器接受数据

@RequestMapping("/add")
public void add(@RequestParam("name") String name,
@RequestParam("author") String author,
@RequestParam("price") double price)
{
System.out.println("bookadd");
System.out.println(name);
System.out.println(author);
System.out.println(price);
}

若控制器方法中接受数据的参数名与请求行传值的key一致,则可以省略RequestParam注解

3.4.2请求头传值

ajax封装的请求头数据

$.ajax({

headers:{

}

})
实例:
前端:



控制器:

@RequestMapping("/list")
public void list(@RequestHeader("token") String token)
{
System.out.println("booklist");
System.out.println(token);

}

@RequestHeader 用于接受请求头传递的数据

3.4.3请求体传值

ajax封装的请求体数据

$.ajax({

data:{

}

})
实例:
前端:



控制器:

@RequestMapping("/update")
public void update(HttpServletRequest request) throws IOException {
System.out.println("bookupdate");
ServletInputStream is=request.getInputStream();
StringBuffer buffer=new StringBuffer();
byte[] bs=new byte[1024];
int len=-1;
while((len=is.read(bs))!=-1)
{
String s=new String(bs,0,len);
buffer.append(s);
}
System.out.println(buffer.toString());


}

前端发送的是一个json对象 需要用HttpServletRequest接收(古老方法)

@RequestBody 注解用于接受请求头传递的数据 将前端请求体提交的json格式转换成java对象
依赖于jackson包(maven导入)

前端:



bean实体类:

public class book {
private int bookId;
private String bookName;
private String bookAuthor;
private double bookPrice;
set get tostring
}

控制器:
@RequestMapping("/update")

public void update(@RequestBody book book) throws IOException {
System.out.println("bookupdate");
// //servlet的处理方式,使用request的输入流接受请求体数据
// ServletInputStream is=request.getInputStream();
// StringBuffer buffer=new StringBuffer();
// byte[] bs=new byte[1024];
// int len=-1;
// while((len=is.read(bs))!=-1)
// {
// String s=new String(bs,0,len);
// buffer.append(s);
// }
// System.out.println(buffer.toString());
System.out.println(book.toString());
}

3.5 控制器响应前端请求
3.5.1 控制器响应同步请求
同步请求:form 超链接
处理同步请求的方法的返回类型定义为String或者ModelAndView,以实现页面跳转
返回类为String
转发

@RequestMapping("/add")
public String add(@RequestParam("name") String name,
@RequestParam("author") String author,
@RequestParam("price") double price)
{
System.out.println("bookadd");
System.out.println(name);
System.out.println(author);
System.out.println(price);

return "/tips.jsp";
}

重定向

@RequestMapping("/add")
public String add(@RequestParam("name") String name,
@RequestParam("author") String author,
@RequestParam("price") double price)
{
System.out.println("bookadd");
System.out.println(name);
System.out.println(author);
System.out.println(price);

return "redirect:/tips.jsp";

返回类型为ModelAndView
转发

@RequestMapping("/add")
public ModelAndView add(@RequestParam("name") String name,
@RequestParam("author") String author,
@RequestParam("price") double price)
{
System.out.println("bookadd");
System.out.println(name);
System.out.println(author);
System.out.println(price);
ModelAndView modelAndView = new ModelAndView("/tips.jsp");
return modelAndView;
}

重定向

@RequestMapping("/add")
public ModelAndView add(@RequestParam("name") String name,
@RequestParam("author") String author,
@RequestParam("price") double price)
{
System.out.println("bookadd");
System.out.println(name);
System.out.println(author);
System.out.println(price);
ModelAndView modelAndView = new ModelAndView("redirect:/tips.jsp");
return modelAndView;

3.5.2控制器相应异步请求
异步请求:ajax请求参数
1。使用response中的输出流进行相应
控制器方法的返回类型为void
控制器方法添加HttpServletResponse response参数
在方法中通过responce获取输出流,使用流响应ajax请求

@RequestMapping("/update")

public void update(@RequestBody book book,HttpServletResponse response) throws IOException {
System.out.println("bookupdate");
System.out.println(book);
String s=new ObjectMapper().writevalueAsString(book);
response.setCharacterEncoding("utf-8");
response.setContentType("application/json");
PrintWriter out=response.getWriter();
out.println(s);
out.flush();
out.close();
}

2.直接在控制器方法返回响应的对象(MVC特别提供)
控制器方法的返回类型设置为响应给ajax请求的对象类型
在控制器方法前添加@ResponseBody注解 将返回的对象转换成json响应给ajax请求

**@RequestMapping("/update")
@ResponseBody
public List update(@RequestBody book book) throws IOException {
System.out.println("bookupdate");
List books=new ArrayList();
books.add(new book(1,"java","里斯",2.22));
books.add(new book(3,"1","2",4.44));
return books;
}**

3.5.3 控制器响应同步请求的数据传递
对于同步请求的转发响应,我们可以传递参数到转发的页面,
返回类型是String
在控制器方法中定义一个Model类型的参数
在return页面之前,向model添加键值对,添加的键值对就会被传递到下一个页面

@RequestMapping("/add2")
public String add2(@RequestParam("name") String name,
@RequestParam("author") String author,
@RequestParam("price") double price
, Model model)
{
System.out.println("bookadd2");
System.out.println(name);
System.out.println(author);
System.out.println(price);
model.addAttribute("key1","value1");
model.addAttribute("book",new book(1,"1","1",1));

return "/tips.jsp";
}

除了使用Model对象传值外,还可以直接使用HttpServletRequest对象
返回类型是ModeAndView

public ModelAndView add(@RequestParam("name") String name,
@RequestParam("author") String author,
@RequestParam("price") double price)
{
System.out.println("bookadd");
System.out.println(name);
System.out.println(author);
System.out.println(price);
ModelAndView modelAndView = new ModelAndView("/tips.jsp");
modelAndView.addObject("key1","value1");
modelAndView.addObject("book",new book(1,name,author,price));
return modelAndView;
}

3.6解决中文乱码问题
乱码途径:前端编码 后端编码 传输过程
3.6.1前端编码:
1.JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>

2.HTML页面


3.6.2服务器编码
tomcat/conf/server.xml -》 connector -》 URIEncoding=“UTF-8”
3.6.3设置SpringMVC的编码方式
在web.xml中配置SpringMVC编码过滤器的编码方式


EncodingFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
utf-8


forceEncoding
true



EncodingFilter
/*

若控制台出现乱码
则需要在tomcat设置的VM options项添加:-Dfile.encoding=utf-8

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/748973.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号