1 Tomcat问题
1 今天用了Ecplise和MyEcplise想着用同一个路径下的Tomcat,但是却发现配置完Ecplise后MyEcplise却不能用了,并且后面在bin里启动Tomcat还是有问题,最后把压缩包里的复制替换原来的才解决了问题。
2 在启动Tomcat时发现提示超时,需要修改Tomcat的启动时间限制。
2 JavaWeb基础
1 在MyEcplise里创建webproject项目
MyHtml是自己创建的静态html界面。web.xml则是一系列规范的限制。在src下创建servlet类,实现操作动态资源。
2 静态web和动态web的区别:静态web是代码不会改变的,而动态web的代码会发生变化。静态web常用技术有:HTML、XML。动态web常用技术有:ASP PHP JSP ASP.NET
3 Tomcat是一个web服务软件,作用:把本地的资源共享给外部访问。在电脑上安装了这个软件后,那么这台电脑就可以叫做服务器。
4 在访问的时候访问路径是:http://localhost:8080/first/hello
在刚建好的工程中会自动生成一个虚拟的hello路径,需要去修改自己认为合适的。
只写一个工程名会出现如下情况:
3 HTTP协议
浏览器发出请求,数据库进行响应。一个请求有且仅有一个响应
http协议: 对浏览器客户端 和 服务器端 之间数据传输的格式规范。
TCP/IP:关注的是客户端与服务器之间的数据是否传输成功。HTTP:在TCP/IP的基础上有关注数据传输的格式是否规范。
HTTP请求:
GET /day09/hello HTTP/1.1 -请求行
下面就是多个键值对
Host: localhost:8080 --请求头(多个key-value对象)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3 --浏览器接受的语言
Accept-Encoding: gzip, deflate --浏览器接受的数据压缩格式
Connection: keep-alive
--- 一个空行
name=eric&password=123456 --(可选)实体内容
HTTP请求的格式: 一个请求行,多个请求头,一个空行,一个实体内容
HTTP1.1表示版本
http1.0:当前浏览器客户端与服务器端建立连接之后,只能发送一次请求,一次请求之后连接关闭。
http1.1:当前浏览器客户端与服务器端建立连接之后,可以在一次连接中发送多次请求。(基本都使用1.1)
注:在一个网页中有三个图片则需要发送四次请求;第一个请求是加载网页,后面三个是加载图片。因为图片加载时<img src="路径"/>,每加载一次资源就重新发送一次请求,不加在资源时则不发送请求。当三张图片一样时则发送两次请求,因为浏览器内部做了优化,把第一次加载的图片缓存了下来,后面当再使用这个图片时,就会把请求给拦截了。
/day09/hello:资源标记符
URL: 统一资源定位符。http://localhost:8080/day09/testImg.html。只能定位互联网资源。是URI 的子集。
URI: 统一资源标记符。/day09/hello。用于标记任何资源。可以是本地文件系统,局域网的资源(//192.168.14.10/myweb/index.html), 可以是互联网。
GET:请求方式
(1)GET方式提交 :
a)地址栏(URI)会跟上参数数据。以?开头,多个参数之间以&分割。
GET /day09/testMethod.html?name=eric&password=123456 HTTP/1.1
b)GET提交参数数据有限制,不超过1KB。
c)GET方式不适合提交敏感密码。
d)注意: 浏览器直接访问的请求,默认提交方式是GET方式
get 提交的内容在url后。
2)POST方式提交
a)参数不会跟着URI后面。参数而是跟在请求的实体内容中。没有?开头,多个参数之间以&分割。
b)POST提交的参数数据没有限制。
c)POST方式提交敏感数据。
post提交的内容在实体中。
注:(1)实体内容:浏览器直接可以看到的内容。(2)在获取参数的过程中当遇到中文字符时会出现乱码问题,这是因为在传输数据时服务器把字节转换为字符采用的是字符集iso-8859-1,而web页面和Java程序内采用的是uts-8造成的。
解决方法:对于post方式
request.setCharacterEncoding("utf-8"); ---直接全局修改
对于get方式
String name = new String(name.getBytes("iso-8859-1"),"utf-8"); ---手动修改不一致的对象
服务器发送给浏览器出现中文乱码
对请求和相应乱码问题的总结:
4 Servlet
(1)在servelet加载中是先找动态资源再找静态资源,如两个资源名重复则会把静态资源覆盖。
(2)servlet的生命周期
(3)web应用路径:部署到Tomcat应用的项目名称。
在写web项目时有时需要改一下项目名称,在MyEcplise中rename修改只是修改了在MyEcplise的项目名称,但是Tomcat中还是没有修改,就会早成无法访问,需要在项目properties--MyEcplise---web中在配置。(比较高的版本好像没有这个,我不知道怎么改了,只能在web.xml中修改配置了)。
(4) 域对象:作用是用于保存数据,获取数据。可以在不同的动态资源之间共享数据。
(5)转发和重定向的区别:
1)转发
a)地址栏不会改变
b)转发只能转发到当前web应用内的资源
c)可以在转发过程中,可以把数据保存到request域对象中
2)重定向
a)地址栏会改变,变成重定向到地址。
b)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。
c)不能再重定向的过程,把数据保存到request中。
注:两个servlet之间共享数据通常考虑域对象,context是全局的,可能会覆盖;request域对象必须要使用转发技术,在打开新的网页时不会发送数据。
5 Cookie和Session
Cookie技术:会话数据保存在浏览器客户端。
Session技术:会话数据保存在服务器端。
Cookie原理
1)服务器创建cookie对象,把会话数据存储到cookie对象中。new Cookie("name","value");
2) 服务器发送cookie信息到浏览器
response.addCookie(cookie);举例: set-cookie: name=eric (隐藏发送了一个set-cookie名称的响应头)
3)浏览器得到服务器发送的cookie,然后保存在浏览器端。
4)浏览器在下次访问服务器时,会带着cookie信息 举例: cookie: name=eric (隐藏带着一个叫cookie名称的请求头)
5)服务器接收到浏览器带来的cookie信息 request.getCookies();
6 JSP
Servlet的作用: 用java语言开发动态资源的技术!!!
Jsp的作用:用java语言(+html语言)开发动态资源的技术!!!
JSP的特点:
1)jsp的运行必须交给tomcat服务器!!!! tomcat的work目录: tomcat服务器存放jsp运行时的临时文件
2)jsp页面既可以写html代码,也可以写java代码。 (html页面不能写java代码 。而jsp页面可以写java代码)
Jsp就是一个servlet程序!!! servlet的技术可以用在jsp程序中 jsp的技术并不是全部适用于servlet程序!
Servlet技术: 开发动态资源。是一个java类,最擅长写java代码
jsp技术: 开发动态资源。通过java代码最擅长输出html代码。
各取所长: 在web项目中涉及到逻辑:
1)接收参数 servlet做
2)处理业务逻辑,返回结果 servlet做
3)显示数据到浏览器 jsp做
4)跳转到其他页面 servlet做
servlet+jsp模式
servlet: Jsp:
1)接收参数 1)从域对象取出数据
2)处理业务逻辑 2)把数据显示到浏览器
3)把结果保存到域对象中
4)跳转到jsp页面
7 JavaBean
JavaBean就是一个普通的java类。只有符合以下规定才能称之为javabean:
1)必须提供无参数的构造方法
2)类中属性都必须私有化(private)
3)该类提供公开的getter 和 setter方法
JavaBean的作用: 用于封装数据,保存数据。 访问javabean只能使用getter和setter方法
8 一个小技巧
直接在dao包下创建impl包,只需要把包名创建成dao.impl的形式即可。
选择下三角标志 然后选择package presention--->第二个,选择后并不会立即显示成包下包的结构,只需要在新建一个包就会立刻刷新显示了。
9
使用过滤器时千万不要忘了在web.xml中进行配置
12213