通用
-
路径分类:
url路径:在cookie等中/代表url路径http://localhost:8081/,对应物理路径tomcat的webapps/
file路径:File对象的路径是物理路径,不要与url路径混淆 -
可以使用request.getContextPath()获取应用根路径,如/photo_gallery_war_exploded
-
使用HttpServletRequest获得json字符串数据时需要使用request.getInputStream()获得输入流后进行处理
-
cookie的path需要注意设置,若不设置默认设置为cookie路径的上一级路径,例如在/user/login下生成的cookie,在不设置path情况下cookie可以在该应用/user下发挥作用而不能在/picture发挥作用
示例:假设tomcat/webapps下面有俩个应用webapp_a和webapp_b
1)若要使cookie只在webapp_a下所有路径适用,setPath(“/webapp_a”),可以设置为request.getContextPath()
2)若要使cookie在webapps下的所有路径适用,setPath(“/”)
ps:”/”指的是相对路径:tomcat根路径,如http://localhost:8081/
3)删除cookie时一定要保证path正确 -
常见方法命名:
- controller层:register、login、list、delete、add
- service层:与controller层大体一致
- dao层:findXxx、deleteXxx、updateXxx、insertXxx
-
设置tomcat静态资源路径映射(将物理存储路径映射为url,可通过浏览器访问)
在tomcat的conf/server.xml的host节点下添加<Context path="/datafile" docBase="F:\webapp-datafile" reloadable="false" ></Context>
-
跨域问题:
@CrossOrigin只能解决不携带cookie的跨域问题,因为使用cookie时Access-Control-Allow-Origin不能是*,因此最好通过拦截器向响应添加以下响应头来解决跨域问题String origin = request.getHeader("Origin"); response.addHeader("Access-Control-Allow-Origin", origin); response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); response.addHeader("Access-Control-Allow-Headers", "Content-Type, Authorization"); response.addHeader("Access-Control-Allow-Credentials", "true"); response.addHeader("Access-Control-Max-Age", "3600");
如果不解决跨域问题,尽管后端可以接收到请求并进行处理,但前端使用axios时会catch到Network Error错误
-
后端对预检请求的处理:后端对先发送的options请求一定要返回2xx(成功)状态码,这样才会触发真实请求
if("OPTIONS".equals(request.getMethod())){ //“预检”请求中,是不会携带cookie的 //若鉴权拦截中要使用到cookie,可以是在遇到OPTIONS请求时,先放行,然后再第二次的正式请求中,则再去对用户鉴权 return true; }
经常会触发预检请求的前端操作:
使用了PUT、DELETE方法
设置了自定义的请求首部字段
使用application/json -
服务器部署:
-
处于WEB-INF目录下的资源是服务器级的,用户不能直接访问(即无法直接通过该资源的url访问),用户只能通过先访问用户级的资源(放在WEB-INF外的)再通过该资源内部转发获取受保护资源。因此,我们可以将除首页/登陆界面外的jsp资源放到WEB-INF/jsp下,这样我们可以保证用户在未登录或其他情况下无法访问到受保护资源【简述:无法通过重定向方式访问WEB-INF下的资源,只能通过转发方式访问】
-
资源部署示例:
/
|—首页/登陆界面
|—jsp(放可直接访问的资源)
|—css
|—js
|—images
|—META-INF
|__WEF-INF
|—jsp(放受保护的敏感资源)
|—classes
|—lib
|__web.xml
-
SSM框架
- 使用file.transferTo转存图片时,若图片名冲突,会覆盖掉原来的图片
- @PathVariable参数为空处理:指定多个匹配路径、required = false
- 使用request.setAttribute()添加的参数无法直接映射到controller方法中,可以使用3种方式将attribute注入到springmvc
参考:https://my.oschina.net/u/1244775/blog/497437
①使用@ModelAttribute注释一个注入方法,在注入方法中将request.getAttribute得到的属性添加到model中,再在使用到属性的方法参数列表中使用@ModelAttribute注入
②使用HttpServletRequest的getAttribute
③实现WebArgumentResolver接口
④使用HttpServletRequestWrapper来包装request,然后使用filter的chain.dofilter - @Autowired注入首先根据byType注入,当类型大于1时在根据byName注入
- @Autowired最好放在构造函数或者setter上,不建议放在字段上(final字段会出问题)
- controller的一般、少见异常可以统一管理,用户错误操作产生的错误(如用户密码错误)异常可以用response设置错误响应信息
- 跳转与重定向:
- 跳转到动态页面需要访问特定的controller,这个controller一般是list,且与动态页面名相似
- 数据响应:
- 需要跳转到jsp页面时一般使用ModelAndView携带对象数据
- 客户端使用Ajax发送的请求使用”mvc注解驱动+@ResponseBody+return对象“的方式返回json数据
- 获取数据:
- 前端传输json格式数据时,可以使用@RequestBody将json数据自动封装到一个对象中,这个对象可以是POJO、Map、List等
- 前端通过请求参数传数据时,使用@RequestParam、@PathVariable映射到变量中
- 使用@RequestHeader、@CookieValue获得请求头数据