个人网站设计及实现论文,国际知名设计公司有哪些,电商网页建设,wordpress 分类全文一)接受到JSON格式的数据:使用RequestBody来进行接收 ResponseBody表示的是返回一个非页面的数据 RequestBody表示的是后端要接受JSON格式的数据 一)接收单个格式的JSON格式的数据#xff0c;我们使用一个对象来进行接收 1)我们之前接受GET请求中的queryString中的参数的时候RequestBody来进行接收 ResponseBody表示的是返回一个非页面的数据 RequestBody表示的是后端要接受JSON格式的数据 一)接收单个格式的JSON格式的数据我们使用一个对象来进行接收 1)我们之前接受GET请求中的queryString中的参数的时候我们是使用在参数中创建一个对象来进行接收的但是如果我们要接受一个JSON格式的对象我们需要在对象前面加上RequestBody注解标识为要接受JSON格式的数据 2)加上RequestBody后表示要读取一个JSON数据加到对象前面就行了 3)我们前后端的一个交互过程相当于是:我们先通过一个URL来进行访问html界面当html界面进行加载的时候就会给服务器发送一个二次请求发送一个格式为json格式数据的post请求然后服务器会进行返回一个json格式的数据; 4)虽然我们现在已经把JSON格式的字符串发送给后端了但是如果我们使用对象来进行接受的时候不加上RequestBody注解那么最后的对象什么也不会接受到都是默认值 2)前端传来的是一个Json对象时:HashMap键值对的方式来进行接收 用POSTMMAN接受JSON格式的数据点击body点击raw点击Text再点击JSON就可以构建JSON格式的字符串发送 3)当前端传来这样一个Json数组:用List实体类RequestBody 下面我们来进行演示一下:前端传递一大堆JSON对象后端如何进行接受一个JSON数组 Controller
ResponseBody
RequestMapping(/Java100)
public class UserController {RequestMapping(/hello)public ListUser start(RequestBody ListUser list){return list;}
}二)接收表单提交的数据以及获取特殊url的参数: 1)获取表单提交格式: 2)获取到特殊URL地址中的参数:PathVariable是从地址部分获取参数而不是从URL地址中的参数部分来进行获取参数 我们先创建一个User类:
ToString
Setter
Getter
public class User {public String username;public String password;public int ClassID;public int UserID;
}
我们进行访问的地址:http://127.0.0.1:8080/host/李佳伟/12503487
RequestMapping(/host/{username}/{password})ResponseBodypublic Object Start(PathVariable String username,PathVariable String password){User usernew User();user.setUsername(username);user.setPassword(password);return user;//返回的是一个JSON格式的数据}三)上传文件 3.1)上传文件:我们想把文件传递给电脑上面用的方法是transferTo里面一共有两个参数一个是File一个是Path 3.2)MultipartFile是专门用来接收文件的一个注解在RequestPart注解里面,这个Key值可以任意设置里面填写的相当于是input标签里面的name属性transferTo方法的主要作用是把当前文件的二进制流放到一个目录底下 RequestMapping(/file)
ResponseBodypublic String upload(RequestPart(myfile)MultipartFile file) throws IOException {
//保存文件file.transferTo(new File(d:/loggs/test.jpg));//里面要创建一个新的文件对象return 上传成功;} 当我们想要上传头像的时候通常要加两个参数一个是上传图片文件另一个是这个图片是谁传递过来的相当于是图片的唯一身份标识不要去传递name属性因为name属性有可能重复 1)我们直接可以进行点击Body中的form-dataKey值选择myfile右键选择file就可以进行上传文件了 2)我们过来的文件一个是给开发环境用的一个是给生产环境用的 3)我们这里面的RequestMapping里面的参数表示路由地址表示的是url中的地址但是RequestPart里面的参数表示的是form-data中的Key值 4)假设你想要修改头像你要修改哪一个人的头像你要注意此时不可以传名字属性你要传入唯一的属性叫做ID我们要根据ID来进行查找到数据库中的唯一的语句然后进行头像修改 5)这里面要存放路径文件名称 1)但是从目前的情况来看当前写的上传图片的代码是有问题的 2)上传图片的路径是写死的图片内容是写死的况且后上传的图片会把前面的人上传的图片给覆盖掉 3)这里面传输图片的时候key相当于是form表单中的name属性idea天生支持yml的配置文件里面 那么我们如何来解决这个问题呢?主要就是从两个角度来出发: 1)文件目录怎么办 在程序里面写死本地上运行是没有问题的但是最终项目我们要是在linux服务器上面是有问题的linux没有C盘D盘就是我可以针对不同的环境写不同的配置文件上线的时候只需要改一个参数即可 2)图片名称每一个人的图片名称不能重复 3)获取原上传图片的格式不能写死.png万一是一个gnf导致图片上传而导致文件格式发生变化 1)目录:设置到配置文件里面一个设置开发环境的路径有C盘D盘一个是线上环境的路径设置为linux的路径这样就可以在不同的环境写不同的配置文件上线的时候只需要改参数就可以了甚至说有的公司还有开发平台生产平台测试平台每一个平台都对应着一个不同的路径 假设你要将100个图片放在100个不同的路径底下我们只需要进行修改配置文件里面就可以了这样就就可以保证我们每进行修改一次配置文件就换了一个不同的存放目录还要有主配置文件 2)图片名称一种是使用时间戳一种是使用UUID一种是用用户的唯一身份标识自增主键 3)获取到原图片上传的格式:先获取到文件的具体名字在进行字符串截取文件格式是文件名的一部分 因为在不同环境下面我们可以设置不同打印日志信息在开发环境我们可以日志级别是设置trace因为在开发环境争取看到更多的配置信息在生产环境我们就可以设置日志级别是warn这样就可以使在生产环境下看到主要的报错信息 application.properties里面的代码设置配置文件的活跃性:spring.profiles.activedev1
//开发环境就设置配置文件是dev1(windoes上面的路径),如果是生产环境就设置配置文件是dev2(linux环境上面的路径)
Controller
public class UserController {Value(${FilePath.url})//读取配置文件里面的urlprivate String url;PostConstructpublic void start(){System.out.print(url);}RequestMapping(/file)ResponseBodypublic String Upload(RequestPart(myfile) MultipartFile file) throws IOException {
//1上传文件路径,从配置文件中读取,小心文件名重复而造成覆盖String BasePathurl;
//2生成动态的文件名,没传过来一个文件都要生成动态的文件名xx.jpg
String filename UUID.randomUUID()(file.getOriginalFilename()
.substring(file.getOriginalFilename()
.lastIndexOf(.)));System.out.println(filename);file.transferTo(new File(BasePathfilename));return 上传成功;}
}1)我们在创建不同平台的yml配置文件 2)在主配置文件中设置运行的配置文件 application-dev.yml spring:profiles:active: dev1 application-dev1.yml里面的代码: #表示生产环境的配置文件,里面进行存放的是本地Windows系统上面的图片保存路径(父亲路径)
img:ImageFatherPath: D:/Data/ #表示要存放图片的父亲目录 application-dev2.yml里面的代码: #表示开发环境的配置文件,最终保存在linux服务器上面,我们在这里面是要进行指定图片的保存路径的(因为他们没有C盘D盘)
img:ImageFatherPath: /root/img //因为我们返回的是字符串,所以我们不光要添加对应的路由映射
还要添加返回的格式是一个字符串而不是一个页面
Controller
public class UserController {//从配置文件中读取我们上传的image图片保存的图片父亲路径Value(${img.ImageFatherPath})private String fatherPath;RequestMapping(/Java100)ResponseBodypublic String run(RequestPart(myfile)MultipartFile file) throws IOException {//1.获取到原来要进行保存的文件的父亲路径:fatherPath//2.获取到文件的名称//3.获取到原文件上传的格式UUID是全球唯一IDString filenamefile.getOriginalFilename();//xxx.png------得到原图片的名称filenamefilename.substring(filename.lastIndexOf(.));
//subString表示表示从指定位置开始截取到最后一个位置
Substring(参数1,参数2); 截取字串的一部分参数1为左起始位数,参数2为截取几位
//png---得到原图片的后缀filenameUUID.randomUUID().toString()filename;file.transferTo(new File(fatherPathfilename));return 上传成功;}
}4)获取到Cookie和Session和Header头 1)这些都是系统自己产生的不是用户进行自定义的 2)每一个方法都默认支持了两个隐藏参数所有的SpringMVC里面所有映射方法中都会内置两个参数HttpServletRequest和HttpServletResponse这两个参数 3)通过上面的方式就可以进行设置Cookie了 4.1)通过原生Servlet的方式来获取到Cookie 4.2)我们也是可以通过CookieValue(名字)名字就是Key值实现了读取特定名称的Cookie Controller
public class User1Controller {RequestMapping(/hello)ResponseBodypublic String run(CookieValue(username) String username,CookieValue(password) String password){
//上面的这种CookieValue的方式是根据Cookie种的Key来进行获取到valuereturn usernamepassword;}
}通过上述在浏览器控制台上面我们也是可以进行添加Cookie的随便加的 4.3)使用这种SpringMVC的专用方法也是可以获取到Cookie字段的通过RequestHeader(Cookie)的方式来一次性读取到所有的Cookie Controller
class UserController{RequestMapping(/Java)ResponseBodypublic String GetHeader(RequestHeader(Cookie) String Cookie){return Cookie;}
} Slf4j//这个注解是一个类注解,而不是一个方法注解
Controller
public class User1Controller {RequestMapping(/hello)ResponseBodypublic void run(RequestHeader(Cookie)String cookies){
//这个注解必须用一个字符串来进行接收,况且RequestHeader里面填写要获取到哪一个字段String[] stringscookies.split( );for(String s:strings){System.out.println(s);}}
}
//从上面结果也是可以看出,也是可以按照空格来进行分割的
usernameabc;
passwordcde 获取Header头: Controller
class UserController{RequestMapping(/Java)ResponseBodypublic String GetHeader(RequestHeader(Host) String userAgent){return userAgent;}
} Controller
public class UserController {RequestMapping(/Java100)ResponseBodypublic void run(HttpServletRequest req, HttpServletResponse resp) throws IOException {resp.setContentType(text/html;charsetutf-8);Cookie[] cookiesreq.getCookies();String usernamereq.getParameter(username);String passwordreq.getParameter(password);String datareq.getHeader(Host);//使用Servlet的方式获取Header头String acceptreq.getHeader(Accept);resp.getWriter().write(你好呀usernamepassworddataaccept);}
}Controller
public class UserController {RequestMapping(/Java100)ResponseBodypublic String run(RequestHeader(User-Agent) String UserAgent,RequestHeader(Host) String host) throws IOException {return UserAgenthost;//host127.0.0.1:8080}
}
设计登陆界面:-----存储Session获取Session我们在POSTman是无法模拟Session的因此Session非常安全
Controller
class UserController{RequestMapping(/Java100)ResponseBodypublic String login(HttpServletRequest req, String username, String password, HttpServletResponse resp) throws IOException {if(passwordnull||password.equals()||username||username.equals()){return 用户名或者密码错误;}if(!username.equals(李佳伟)||!password.equals(12503487)){return 用户名错误或者密码错误;}HttpSession httpSessionreq.getSession(true);
//自动根据SessionID去查找HttpSession
//没有回话就创建会话,r如果有回话就使用会话,没有回话就创建会话httpSession.setAttribute(username,username);resp.sendRedirect(/Java101);return ;}RequestMapping(/Java101)ResponseBodypublic String GetSession(HttpServletRequest req){HttpSession sessionreq.getSession();if(sessionnull||session.equals()){return 当前用户没有进行登录;}String username(String)session.getAttribute(username);if(usernamenull||username.equals()){return 当前用户没有进行登录;}return username当前用户已经登陆成功;}
}
下面写一种更加简单的获取Session的方法:(两种方法)
RequestMapping(/Java101)ResponseBodypublic String GetSession(SessionAttribute(valueusername,required false) String username){
//requiredfalse,表示如果不进行添加的话那么当Session中不存在该属性的时候会发生报错return username;}小结:SpringMVC进行获取用户的请求信息: Session:MapString,Object String:SessionIDObject:HttpSession 0)以后的SessionID返回给客户端之后下一次客户端再次访问浏览器的时候 Cookie:JSESESSIONID:一大堆字符串------等价于是SessionID 1)获取到单个参数:我们在方法里面进行获取到对应的参数就可以实现(方法名的参数和前端的参数要一致) 2)获取对象:在方法里面直接写对象就可以进行实现但是对象中的属性要和前端url或者表单的参数是一致的 3)获取到JSON对象:RequestBody加到方法的参数的前面表示服务器要进行读取JSON格式的数据 4)获取文件:RequestPart里面填写的是前端已经上传的key的属性MultipartFile自定义名字 5)获取用户的Cookie/Session/Header: CookieValue(里面填写的是已知Cookie字段中的Key)String XXX /SessionSttribute(value里面填写的是HttpSession中的Key)String xxx 1)会自动根据SessionID来进行获取到Session键值对中的HttpSession 2)还会自动根据里面填写的value中的值作为HttpSession中的Key 3)根据HttpSession中的Key来自动获取到Session字段并填充到咱们的String里面 4)如果说此时客户端请求的Http报文里面没有Session信息那么代码会直接报错返回400直接报错 /RequestHeader(里面填写的是HTTP请求报文中的原字段名)String XXX