文章目录
动态,静态网页
1.不能和是否有"动态"混为一谈
2.是否随着时间,地点,用户操作的改变而改变是主要区别。
动态网页需要使用到服务端脚本语言(JSP)
构架(分为两种(cs和bs))
cs:client server(QQ ,微信)
cs不足:
- 如果软件升级,那么全部软件都要升级
- 维护麻烦:需要维护每一台 客户端软件
- 每一台客户端 都需要安装客户端软件
BS :Broswer Server(网页版:京东)
客户端可以通过浏览器 直接访问服务器
tomcat解压后目录:
- bin:可执行文件(startup.bat shutdown.bat)
- conf:配置文件(server.xml)
- lib:tomcat依赖的jar文件
- log:日志文件(记录出错等信息)
- temp:临时文件
- webapps: 可执行的项目(将我们开发的项目 放入到该目录)
- work: 存放有jsp编译的java,以及编译的class文件
访问后常见状态
200:一切正常
404:资源不存在
403:权限不足(如果访问a目录,但a目录设置看不见)
300/301页面重定向
500: 服务器内部有问题
现在对jsp有一个宏观的了解:
jsp就是在html中嵌套的java代码
在项目/web-inf/web.xml中设置的初始页面
<welcome-file-list>
<wlecome-file>index.jsp</welcome-file>
</welcome-file-list>
虚拟路径
它的用处:是把web项目配置到webapps以外的目录。
虚拟路径的配置地点
方式一:
conf下的server.xml包里有一个
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
如果想要在外部配置需要在上面这个代码里面加一个
docBase:实际路径
path:虚拟路径(绝对路径,相对路径)
方式二:
在conf/catlina/localhost里面新建一个:项目名.xml文件
这种方法的好处: 不用再重新启动tomcat了,非常的方便,非常的好用!
(如果改成root.xml就不用些路经了)
虚拟主机
具体步骤如下:
- 在conf/server.xml文件里找
// 先找下面这个东西
<Engine name = "Catalina" defaultHost="这里面改成你要配的地址">
//在找<host>,在host标签上面加个这玩意。
<Host appBase = "实际路径" name = "上面你改的玩意" >
<Context docBase = "实际路径" path="虚拟路径">
//虚拟路径最好写成"/",
- 将本机的host文件修改
C:\windows\System32\drivers\etc\host
增加映射:
例如:127.0.0.1 www.test.com
对于无法向hosts文件写ip的问题:
- 首先按下windows+x键,在电脑桌面右下角弹出来的菜单里选择Windows Powershell(管理员)
- 在打开的powershell 界面输入notepad,按回车,就会出现记事本的界面。
- 在记事本界面点击文件,然后点新建,在弹出来的窗口里找到路径c:\windows\system32\drivers\etc\,找到后可以看到目录里面是空白。点击右下角的选择文件,点击所有文件。
- 此时hosts文件就会出现在你眼前,点击hosts文件,然后点右下角的打开。就会弹出hosts文件的编辑页面,可以在里面添加你需要的IP地址和主机名了。
- 添加完毕以后,可以直接按ctrl+s保存,也可以直接点击记事本左上角的文件,然后点保存。Hosts文件就修改成功了。
解决startup闪退问题
jsp的执行流程
第一次访问:服务端将jsp翻译成java,在将java编译成class文件
第二次访问:直接访问class文件
jsp执行流程
jsp -java(servlet文件) -class
jsp和servlet可以相互转换
因为第一次请求服务器 会有翻译 和编译过程,因此比较慢;后续访问,可以直接访问,若服务端修改了代码,会重新编译。
Eclipise环境下配置tomcat
Eclipse环境下如何配置Tomcat,并且把项目部署到Tomcat服务器上
如果eclipse版本过低没有想要的tomcat版本解决方法
Eclipse配置Tomcat8.5(显示Servers设置)
在eclipse中创建项目:
浏览器可以直接访问WebContent中的文件,如:http://localhost:8848/myProject/index1.jsp
但是web-inf中的文件,无法直接访问,只能通过请求转发来访问
注意:并不是任何的内部跳转都能访问 ,原因是跳转有两种方式:请求转发,重定向
配置tomcat运行时的环境
- 将tomacat/lib中的servlet-api.jar加入项目的构建路径中
- 右键项目->Build path ->Add library ->Server Runtime
统一字符集编码
- 设置jsp文件的编码(jsp文件中pageEncoding属性)
- 设置浏览器读取jsp文件的编码(jsp文件中content属性)
- 一般将上述设置改成一致的编码,推荐使用UTF-8
文件编码:
- 将整个eclipse中的文件统一设置
- 设置某一项目
- 设置单独文件
jsp页面元素:
a.脚本Scriptlet(java代码)
有三个方式:
- 方式一:
<%
局部变量,java语句
%> - <%!
全局变量,定义方法
%> - <%=
输出表达式
%>
注意:一般而言,修改web.xml,配置文件,java需要重启tomcat服务,但是如果是修改jsp/html/css/js,则不需要重启
b.指令
如page指令:
<%@ page …%>
page指定的属性;
language:jsp页面使用的脚本语言
import:导入类
pageEncoding:jsp文件自身编码
contentType:浏览器解析jsp的编码
c.注释:
html
java//
jsp <%–jsp注释–%>
JSP内部对象
(自带的,不new也能使用)
jsp九大内置对象:
名称 | 注 |
---|---|
pageContext | jsp页面容器 |
request | 请求对象 |
response | 响应对象 |
session | 会话对象 |
appliation | 全局对象 |
config | 配置对象 |
out | 输出对象 |
page | 当前jsp页面对象 |
exception | 异常对象 |
request:请求对象:存储“客户端向服务端发送请求信息”
常见方法:
String getParameter (String name):根据请求字段名KEy,返回字段值value
get提交方式:method= “get”和地址栏,超链接()请求方式默认都属于get提交方式
get与post请求方式的区别:
a.get()方式在地址栏显示信息(如果请求数据存在大文件,会存在容纳不下而出错);post不会
b.文件上传,必须用post
推荐方式 post
,response
统一请求的编码request
get方式请求,如果出现乱码,解决:
a.统一每一个变量的编码(不推荐)
new String(旧编码,新编码);
name = new String(name.getBytes(“iso-8859-1”),“utf-8”)
b.修改server.xml,一次性更改tomcat默认get提交方式的编码(utf-8) (在写的端口后面加上URIENcoding = “UTF-8”)
请求转发和重定向转发的区别
选项 | 请求转发 | 重定向转发 |
---|---|---|
地址栏是否改变 | 不变 | 改变 |
是否保留第一次请求数据 | 保留 | 不保留 |
请求次数 | 1 | 2 |
跳转的位置 | 服务端 | 客户端发生两次跳转 |
举例了解:
请求转发: 张三(客户端) -》【服务窗口A(服务端)-》服务端b】
重定向: 张三(客户端)-=》 服务端窗口A(服务端)——》去找b
张三(客户端)==》服务端窗口B(服务端)–结束
session
cookie(客户端,不是内置对象)
COOkie是由服务端产生,在发送给客户端保存,相当于本地缓存
作用:提高访问服务端效率,但是安全性较差
cookie:是在javax.servlet.http.Cookie所在的包里
response:相应对象
提供的方法:
void addCookie(Cookie cookie);服务端向用户端增加cookie对象
void sendRedirect(Stirng location):页面跳跳转的方式(重定向)
void setContetType(String type)设置服务端响应编码(设置响应端contentType属性)
Public Cookie(String name,String value)
常用方法:
String getName():获取name值
String getValue():获取vlaue
void setMaxAge(int expiry);最大有效期(秒)
服务端准备Cookie:
response.addCookie(Cookie cookie)
页面跳转(转发,重定向 )
客户端获取cookie:
request.getCookies();
{
客户端增加cookie:response对象;客户端获取对象:request对象
不能直接获取某个单独对象,只能一次性将全部cookie拿到
除了自己设置的Cookie对象外,还由一个name为JSESSIONID的cookie
}
(客户端向服务端发出个请求,然后服务端把请求内容放在cookie里面返回给客户端)
//服务端产生一个cookie发送给客户端代码
Cookie cookie = new Cookie("uname",name);
response.addCookie(cookie);
response.sendRedirect("A.jsp");
//客户端响应
Cookie[] cookies = request.getCookies();
for(COokie cookie: cookies){
if(cookie.getName.equals("uname")){
uname = cookie.getValue()
}
}
session:会话
会话的概念(
- 浏览网页:开始-关闭
- 购物:浏览到支付到退出
- 电子邮件:浏览,写邮件,退出
)这些事件的整个过程就是session
session机制
客户端第一次请求
客户端时,服务端会产生一个session对象(用于保存该客户信息);
并且每个session对象都有一个唯一的sessionId(用于区别其他session);
服务端会产生一个cookiea,并且该cookie的名字=JSESSIONID,value= 服务端sessionid的值;
然后 服务端会在响应客户端的同时 将该cookie发送给客户端,至此 客户端就有了一个cookie(JSESSIONID),因此客户端的cookie就可以和服务端session一一对应了
第n次请求
服务端会先根据客户端cookie中的JESSIONID去服务端session中匹配,如果匹配成功,说明此用户已不是第一次访问,无需登录;
cookie和session的区别
菜单 | session | cookie |
---|---|---|
保存的位置 | 服务端 | 客户端 |
安全性 | 较安全 | 较不安全 |
保存的内容 | object | String |
四种范围对象
(四种范围对象(小-大)(page对象)
pageContext jsp页面容器 (当前页面有效)
request 请求对象 (同一次请求有效)
session 会话对象 (同一次会话有效)
appliation全局对象 (全局有效(整个项目))
)
四个对象共有都的方法:
方法名 | 属性 |
---|---|
Object getAttribute(String name) | 根据属性名,或者属性值 |
void setAttribute(String name,Object obj) | 设置属性值(新增,修改) |
setAttribute(“a”,“b”) | 如果a对象之前不存在,则新建一个a对象;如果a之前已经存在,则将a的值改为b |
void removeAttribute(String name); | 根据属性名,删除对象 |