javaweb阶段笔记
tomcat
一、回顾
1.软件架构:c/s b/s
2.资源分类:动态资源 静态资源
3.网络通信三要素:ip地址、端口、协议
4.协议:tcp、udp、http
二、web服务器
1.tomcat weblogic websphere jboss
2.tomcat安装、卸载、启动、关闭
3.tomcat配置 server.xml 三个端口
4.tomcat部署(练习)
(1)直接部署
(2)在server.xml中配置<context>标签
(3)在conf中写xml文件
5.web项目的目录结构
6.idea集成tomcat(练习)
Servelt
一、快速入门(练习)
1.创建JAVAEE项目(模块)
2.定义一个类,实现Servlet接口
3.实现接口中的方法
4.配置servlet
二、请求——响应的全过程
1.客户端(浏览器)发送请求
2.服务器接收请求,提取请求的URL
3.根据URL获取web应用,找到应用中的web.xml文件
4.根据URL找到<url-pattern>,找到<servlet-name>
5.根据<servlet-name>,找到<servlet-class>
6.判断服务器内存中是否有当前的servlet对象。如果没有,使用反射创建该类的一个对象。如果有,直接使用该对象。
7.该对象执行service方法。
8.服务器以流的形式把结果写到客户端。
三、servlet的生命周期(练习)
1.init:初始化servlet,创建servlet对象的时候执行的,只执行一次
通过load-on-startup控制创建servlet的时机,>=0服务器启动创建,否则第一次访问创建
2.service
3.destory:销毁servlet,正常关闭服务器时执行,只执行一次。
四、servlet3.0新特性:通过注解@WebServlet设置路径(练习)
五、tomcat在idea中的相关配置
1.idea会为每一个tomcat部署的项目单独建立一份配置文件。通过控制台的Using CATALINA_BASE来找
2.tomcat真正访问的是部署的项目,不是工作空间的项目。
3.WEB-INF下的文件不能被浏览器直接访问。(练习)
六、Servlet体系
Servlet
----> GenericServlet(将Servlet接口中其他方法做了空实现,只留Service方法)
----> HttpServlet(将HTTP协议做了封装,重写doget,dopost)
七、urlpattern配置
1.可以配置多个路径 {"/XXX","/XXX"....}
2.可以配置多层路径 "/XXX/XXX...."
3.*是通配符,代表任意路径 "/XXX/*" "*.XXX"
Http
1.特点:基于TCP/IP,默认端口80,一次请求对应一次响应,不同的请求之间相互独立。
2.请求消息的格式:请求行、请求头、请求空行、请求体(只有POST请求有)
get请求参数在请求行中,post请求参数在请求体中。
POST /login.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://localhost/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
username=zhangsan
3.响应消息的格式
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 101
Date: Wed, 06 Jun 2018 07:08:42 GMT
<html>
<head>
<title>$Title$</title>
</head>
<body>
hello , response
</body>
</html>
(1)响应行
状态码:
1XX:服务器等待客户端继续发送消息。
2XX:成功
3XX:重定向 302
4XX:客户端异常 404(路径错误) 405(请求方式错误)
5XX:服务器异常 500
(2)响应头
Content-type:本次响应的数据格式和编码格式。
Content-disposition:本次响应打开响应体数据的方式。
(3)响应空行
(4)响应体:传输的数据
Request
1.request是由服务器创建的,封装了http请求的数据。
2.ServletRequest ----> HttpServletRequest ----> RequestFacade(tomcat实现的)
3.Request里的方法。
(1)练习获取请求行的8个方法
String getMethod()
String getContextPath()
String getServletPath()
String getQueryString()
String getRequestURI()
StringBuffer getRequestURL()
String getProtocol()
String getRemoteAddr()
(2)练习遍历请求头的所有数据
Enumeration<String> getHeaderNames()
(3)练习获取浏览器版本
getHeader("user-agent")
(4)练习防盗链
getHeader("referer")
(5)练习获取请求体数据 ①BufferedReader getReader() ②br.readline()
(6)练习获取参数的四个通用方法
String getParameter(String name)
String[] getParameterValues(String name)
Enumeration<String> getParameterNames()
Map<String,String[]> getParameterMap()
(7)练习解决中文乱码:在获取参数前加request.setCharacterEncoding("utf-8");
(8)练习请求转发: request.getRequestDispatcher("路径").forward(request,response);
(9)练习request域
1. void setAttribute(String name,Object obj):存储数据
2. Object getAttitude(String name):通过键获取值
3. void removeAttribute(String name):通过键移除键值对
(10)练习BeanUtils
1. setProperty()
2. getProperty()
3. populate(Object obj , Map map)
Response
1.设置响应消息
(1)响应行 setStatus:设置状态码
(2)响应头 setHeader
(3)响应体
a.获取输出流
字符流:getWriter
字节流:getOutputSteam
b.使用输出流,将数据输出到客户端
解决乱码问题:response.setContentType("text/html;charset=utf-8")
2.重定向
(1)笨办法
setStatus(302)
setHeader("location","路径")
(2)巧办法
sendRedirect("路径")
******重定向与转发
重定向:是浏览器行为,本质上是两次请求,地址栏会发生改变,可以访问其他站点,不共享request域。
转发:是服务器行为,本质上是一次请求,地址栏不会变,不可以访问其他站点,共享一个request域。
3.路径
(1)相对路径:相对于当前资源的路径,以./(可以省略)开头。
(2)绝对路径:在网络环境中唯一的路径,以/开发
给客户端使用的加虚拟路径
给服务器使用的不加虚拟路径
ServletContext:代表整个项目,可以和服务器通信。
1.获取
request.getServletContext();
this.getServletContext();
2.功能
(1)获取Mime类型 getMimeType();
(2)共享数据。 范围:所有用户所有请求都可以访问数据。
(3)获取文件的真实路径 getRealPath();
会话技术:确保一次会话中共享信息的实现。
1.Cookie:客户端会话技术
(1)使用:response.addCookie()
request.getCookies()
(2)原理:浏览器向服务器发送请求时会把cookie封装到请求头中。
(3)注意事项:
A.一次可以发送多个Cookie。
B.存活时间:setMaxAge(int seconds)
正数:设置存活时间
负数:默认值(默认关闭浏览器销毁)
0:直接删除
C.存放中文:
tomcat8可以存放中文,但不能存放特殊字符。通过URLEncoder和URLDecoder来进行转码解决。
D.cookie共享:
①cookie默认不同项目不共享
②如果不同项目在同一个服务器中,通过setPath("/")共享。
③如果不同项目不在同一个服务器中,通过setDomain()设置一级域名共享。
(4)作用:存放少量不敏感数据,例如,网站配置。
2.Session:服务器会话技术
(1)使用
request.getSession();
session.setAttribute();
session.getAttribute();
session.removeAttrbute();
(2)原理:session的使用是依赖于Cookie的
(3)特点:
A.客户端关闭后再访问,session不是同一个,可以通过设置cookie的JsessionId的最大存活时间解决。
B.服务器关闭后,session默认销毁。但是tomcat会在服务器关闭前将session对象保存到硬盘中。
C.销毁:服务器关闭/session.invalidate()/session过期
可以通过web.xml配置session的过期时间。
(4)作用:可以将任意类型任意大小的数据存在服务器。
***session和cookie的区别
(1)session存储在服务器,cookie存储在客户端
(2)session存储没有大小限制,cookie有大小限制
(3)session数据安全,cookie相对不安全
JSP:一个既可以写java代码又可以写HTML标签的页面
1.本质:就是一个servlet
2.脚本
(1)普通脚本:<% java代码 %>:会被翻译为service方法中的普通代码
(2)声明脚本:<%! 方法或成员变量%>:会被翻译为方法或成员变量
(3)表达式脚本:<%=表达式%>:会被翻译为service方法中的out.print();
3.内置对象:不用新建可以直接使用的对象
一共有9个
request response out