对JSP和Servlet的理解

********************************Servlet*************************************
1、路径
不管用什么方式提交,我们都在doGet()里面接收,再在doPost里调用doGet()方法
客户端跳转,进行了两次,
服务端跳转进行了一次,可以传递数据!!!!!!!!!!!!!******


2、web.xml
<servlet>
    <servlet-name>类名</servelet-name>
    <servlet-class>包名+类名</servelet-class>
</servlet>
<servelet-mapping>
    <servlet-name>与上面,上面的名字相同</servlet-name>
    <url-pattern>/访问的路径</url-pattern>
</servlet-mapping>
通过前端的路径访问找到对应的类,通过无参的构造函数,实例化一个对象


Servlet的周期
实例化——初始化(调用init)——服务(service)——销毁(destroy)重启tomcat,


服务端跳转和客户端跳转
服务端:request.getRequestDispatcher("路径").forward(request,response);-----setAttribute(),getAttribute服务端跳转的时候,不同的Servelet之间共享数据
客户端:response.sendRedirect("路径");

web.xml
优先启动servlet自启动,<load-on-startup>1-99</load-on-startup>//数字越小,优先级越高



请求,和响应Servlet
PrintWriter ps=response.getWriter();
ps.print();


request
request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)"
request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名"
request.getQueryString(): 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
request.getRemoteHost(): 浏览器所处于的客户机的主机名
request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
request.getLocalAddr(): 服务器的IP地址
request.getLocalName(): 服务器的主机名
request.getMethod(): 得到客户机请求方式一般是GET或者POST

request.getHeader() 获取浏览器传递过来的头信息。
比如getHeader("user-agent") 可以获取浏览器的基本资料,这样就能判断是firefox、IE、chrome、或者是safari浏览器
request.getHeaderNames() 获取浏览器所有的头信息名称,根据头信息名称就能遍历出所有的头信息
在本例,修改HelloServlet,使其获取头信息
访问HelloServlet获取如下头信息:
host: 主机地址
user-agent: 浏览器基本资料
accept: 表示浏览器接受的数据类型
accept-language: 表示浏览器接受的语言
accept-encoding: 表示浏览器接受的压缩方式,是压缩方式,并非编码
connection: 是否保持连接
cache-control: 缓存时限

response
1.设置响应内容
reponse.getWriter()//获取对象PrintWriter
println,write,append,format,
2.设置响应格式
response.setContentType("text/html")
3.设置响应编码
response.setContentType("text/html;charset=UTF-8");响应给浏览器的内容编码方式是utf-8,也提醒浏览器以utf-8的形式显示
response.setCharacterEndcoding("UTF-8");响应给浏览器的内容编码方式是utf-8,浏览器什么编码就是什么编码
4.客户端跳转
response.setStatus()
301,服务端跳转
302,临时性跳转
先设置跳转类型,再response.setHeader("Location","目标地址");
5.设置不不适用缓存
response.setHeader("Cache-Control","no-cache")
response.setHeader("pragma","no-cache");


********************************JSP*************************************
1.jsp动作<jsp:....>
jsp动作包含页面的话会生成多个.class文件
因为生成多个类文件涉及到了传参数的问题
<jsp:param name="'" value="" />
2.jsp指令<%@...%>
jsp指令会生成一个.class文件,

************************Cookie**********************************
Cookie
是服务端和浏览器之间的交互,是服务端给的进门卡。保存在服务端
Cookie c=new Cookie(“name”,“Tom”);
c.setMaxAge(24*60*60)//保存一天,如果为0,那么就退出浏览器就销毁
c.setPath("/")这表明访问服务器的所有的应用都会提交这个cookie到服务端,
c.setPath("/a")表明访问服务器的/a的时候提交cookie
response.addCookie(c);//返回响应给客户端


************************Session**********************************
session有内置对象直接session.setAttribute("","");
取得时候是直接取



************************pageContext作用域**********************************
四大作用域

pageContext.setAttribute();//当前页面,其他页面不奏效

requestContext
request.setAttribute()//一次会话就可以,如果是服务端跳转就可以获取值,
假如是客户端的跳转就取不到值

sessionContext
session.setAttribute("","");//一次会话,只要在该网页内什么时候都可以取到值





全局,所有的用户共享同个数据
application==request.getServletContext();//指的是web应用本身
这两者是相同的


************************jsp隐式对象**********************************
request,reponse,out,
pageContext,session,application
page,config,exception




/////////////////////////////////////////////////////////
访问servlet有两种方式,/和*
request.getRequestDispatcher("/Servelet").forward(request,response);
/ 相对当前项目路径  绝对路径   即http://localhost:8080/项目名
什么都没写就是相对当前页面路径  相对路径


客户端路径 form表单和链接
以/开头 相对于  即主机localhost:8080
还需要加上项目名字


3. getContextPath():获取项目的根路径 ************************************
4. getRequestURI:获取根路径到地址结尾 ***************************************
5. getRequestURL:获取请求的地址链接(浏览器中输入的地址) **********
6.request.getServletContext()//和application相同可以自主设置


Filter
用来过滤,先于servlet
可以设置中文
获取URI,判断后面访问的页面
是的话就放行
访问的其他页面的话就判断他的Session的值

posted @ 2019-03-25 08:22  吴yR  阅读(355)  评论(0编辑  收藏  举报