版权声明:文章为作者自己原创文章,转载请注明出处。 https://blog.csdn.net/qq_37128049/article/details/85273261
总体回顾:
Servlet – 实际应用很多,很重要。
* jsp本质是一个servlet,所以它不是前台的,而是后端的内容。
* 展示给用户的最好是html界面,效率高,完成的效果好,jsp可以用来公司管理系统,方便获取
* web四大域对象:
* ServletContext:生命周期是在服务器启动创建,关闭销毁(正常关闭)
* Session:浏览器第一次访问服务器servlet,如果servlet调用getSession则创建。
* 关闭方式:
1.默认时间 30分钟
2.seesion.invilidata()
3.服务器正常关闭
* HttpServletRequest:响应浏览器访问web服务器。(它是一个一次请求,浏览器触发,服务器接收。)
* PageContext:在jsp页面的一个类似于ServletContext的域对象,在html页面不使用
* Servlet
* 接口Servlet
* 生命周期方法:
1.init //只执行一次
2.service //每次访问都会被执行
3.destory //只执行一次
* 继承结构体系: Servlet-> GenericService->HttpServlet(分发在httpservlet中,将七种方法进行判断)
* http请求: 七种 get/post/put/delete
* Servlet配置方式:
1.xml
/WEB-INF/WEB.xml
* <servlet>
* <servlet-name>demo</servlet-name> (标识名)
* <servlet-class>com.itheima.itcast.Servlet</servlet-class> (全路径)
* </servlet>
* <servlet-mapping>
* <servlet-name>demo</servlet-name>
* <url-patter>/demo</url-pattern> (虚拟路径)
* </servlet-mapping>
2.注解
@WebServlet("/a")
3.url-pattern路径配置
* /a
* /user/a
* /user/*
* *.do
!! * /*.do(不能这么操作)
Request:
1.获取请求参数
* getParameter("参数名")
* getParameterMap("参数名")
* getParameterValues("参数名")
2.获取ServletContext
* getServletContext()
3.作为域对象进行存取数据
* setAttribute("键",值)
* getAttribute("键")
* removeAttribute("键")
4.能请求进行转发
* request.getRequestDispatcher("/服务端绝对访问路径").forward(request,response)
5.获取请求行:
* getRequestUri()
* getRequestUrl()
* getMethod()
* getCOntextPath()
6.获取请求头
* getHeader("请求头")
* 路径问题:
* 相对路径(不以/开头)
* ./ 当前目录
* ../上一级目录
* 绝对路径(用于请求转发)
* 服务端绝对路径(请求转发)
* /访问资源路径
* 浏览器端绝对路径
* /虚拟目录/访问资源路径
* response(响应)
* 设置响应行:
* setStatus(状态码)
1.200:连接正常
2.404:客户端异常
3.500:服务器端异常
4.其他的还有:302,304...
* 设置响应头
setHeader("响应头","头的内容")
setContentType("text/html;charset=utf-8")
* 设置响应内容
getWriter().Writer("")
getOutputStream().write("".getBytes())
* 重定向
sendRedirect("/浏览器端绝对路径")
* 重定向和请求转发的区别:
1.路径不一样
2.地址栏(转发不会发生改变,重定向会发生改变)
3.请求次数
4.共享数据
* 域对象/url重写 --将url地址拼接携带数据,参照response课程中重点图
会话技术 :1.多次请求和响应 – 面试经常考,很重要。
1.Cookie:
* cookie来自服务器,保存在浏览器端。
* Cookie相关api:
* 发送:
Cooke c=new Cookie("名字","值") -- 创建cookie
c.setMaxAge(10); //单位是秒 -- 设置存活时间
c.setPath("/虚拟目录") -- 这个的意思是cookie的作用范围。
* 如果要设置cookie的有效访问路径,必须以虚拟目录开头。
response.addCookie(cookie对象) 发送cookie
* 接收:
Cookie[] cookies=request.getCookies();
cookie.getName()
cookie.getValue()
* cookie原理:
请求头:
Cookie
响应头:
Set-Cookie
2.Session 基于服务器会话技术
* session依赖于cookie(set-cookie/请求头cookie)
* session创建
HttpSession session=request.getSession (一旦第一次执行该方法,会创建一个Session,Session对象会提供一个id,该id会以cookie的形式回写到浏览器JSESSIONID) 格式: Set-Cookie:JSESSIONID=2C23FF5CF6ABF728...
* 面试题:访问a.html/a.jsp/a.servlet 谁会在第一次访问的时候就会创建Session。
* 答:html不会创建Session。Servlet不会创建Session。jsp第一次访问一定会创建Session
* 域对象:
* setAttribute("键",值)
* getAttribute("键")
* removeAttribute("键")
* Seesion的持久化:
* 钝化活化
* 通过JSESSIONID=2C23FF5CF6AB...的cookie来进行持久化,setMaxAge()
* session的销毁:
* 默认销毁时间 30分钟
* 服务器正常关闭
* sessioninvilidate()
ServletContext
1.域对象:
* setAttribute("键",值)
* getAttribute("键")
* removeAttribute("键")
2.获取文件的mime类型
* getMimeType("文件名.后缀名")
3.获取文件的绝对磁盘路径
* getRealPath("文件名称")
* 文件名称
* web目录
getRealPath("1.txt")
* web-inf
getRealPath("/web-inf/1.txt")
* src
getRealPath("/web-inf/classes/1.txt")
jsp/el/jstl脚本
1. jsp:
* 常用标签:
* <% %>
* <%=%>
* <%!%>
* jsp指令:
* page
* taglib
* include
* jsp注释:
* <%-- 内容 --%>
* jsp 9大内置对象
* application
* session
* request
* pageContext
* config
* response
* page
* out
* exception
2.el表达式:
* ${pageContext.request.contextPath}
* jstl:taglib/jar
* <c:if>
-- test
* <c:foreach>
-- 普通for循环
* var
* begin
* end
* step
* varStatus
-- 增强for循环
* var
* items
* varStatus
动态代理:
1.创建:
* Proxy.new ProxyInstance(类加载器,实现接口,new invocationHander(){
* @Override
* public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
* //具体增强
* //增强前执行功能
* Object result=method.invoke(外部的对象,args);
* //方法执行后的增强
* return result;
* }
* })
案例
* 通过ajax去发送异步请求
* 获取要提交的表单的参数:
* var params=$("#表单").serialize();
* 在查询数据库的时候,如果查不到指定对象的内容则会直接报错,可以手动抓取。
* 先关闭掉tomcat再clean,不然关不掉,因为tomcat文件在target中,如果tomcat一直在运行则无法clean;
* tomcat很多版本,tomcat在默认处理编码集的时候默认utf-8,而tomcat7 的在处理的时候处理的编码集是iso-8859-1(拉丁文编码)
* String encodeName=URLEncoder.encode(name,"iso-8859-1") -- 将name编码为%E5%BC%E4...
* String encodeName=U
* domain中的user类和数据库中的user表必须一致。不能少。