软件两大架构 B/S C/S
C/S
C:客户端 S:服务器 eg:QQ,LOL,WPS,就是桌面应用程序
特点
- 软件使用前必须安装
- 软件更新时,客户端和服务端也要更新
- 不能跨平台,就类似于手机版qq不能在电脑上安装
- cs软件通信采用自有协议,比较安全
B/S
B:浏览器, s 服务器 eg:淘宝网,京东网等网站
特点:
- 软件使用前不需要安装
- 软件更新时,只是服务端进行更新
- 能跨平台,必须有浏览器
- bs软件通信采用的是通用的HTTP协议,相对不安全
Tomcat
D:\apache-tomcat-8.0.21\conf\server.xml 可以修改端口号(默认8080),还要改eclipse→servers文件夹→server.xml
startup.bat 运行(前提是环境变量里有jAVA_HOME)
javaWeb
tomcat 放到javaweb中
首先javaEE→server →new→server→tomcat 8.0→tomcat根目录→finish
打开:start
错误404:找不到资源
错误500:服务器程序出错(空指针)
servelet
功能
- 接收用户请求的http协议,解析
- 返回一个http的响应协议,让浏览器去解析
workset结构
src放类
WebContent放页面,html,图片,js
WEB_INF受保护文件,配置文件,不能放页面文件
实现一个servlet
实现servlet接口
1 | package com.hpe.servelet; |
映射:让一个类在浏览器中运行,配置和映射servlet,给servlet一个浏览器的地址,方法如下(以后🙅自己配):
1 | <!-- 配置和映射servelet --> |
运行过程:访问路径→映射的访问地址→映射的name→注册名→全类名
生命周期
- 加载阶段:若是第一次请求加载并实例化(创建servlet实例)
- 初始化阶段:若是第一次请求,调用init()方法
- 响应客户请求阶段:无论第几次请求都调用service(),实际用于获取请求响应结果
- 终止阶段:destory(),当servlet所在项目被卸载或者服务器被关闭时执行,用于释放资源
<load-on-startup>1</load-on-startup>
0和正数,加载的时候就创建实例,执行初始化,多个servlet时,数字越小,越先创建;负数,第一次访问时再创建实例初始化
config接口
servletConfig接口,代表当前servlet,可以获取当前servlet所有配置信息
- getServletName():获取注册名
- getServletContext():一般做全局数据共享,必须由servletConfig来获取,一个项目就一个context实例,每个servlet都可以访问到它
1 | public void init(ServletConfig config) throws ServletException { |
零散知识点
url格式:/aaa和*.aaa或者 /aaa/星,其中星代表所有字符
./ :代表文件所在的目录(可以省略不写)
../ :代表文件所在的父级目录
../../ :代表文件所在的父级目录的父级目录
/ :代表文件所在的根目录
相对路径变绝对路径:
request.getContextPath()+"admin/main.jsp';"
项目中路径写绝对路径
初始化参数在loadup标签前面
创建的项目是项目,没有添加到workset里
workset中添加项目:右键workset→proper…→选择→add→OK
浏览器访问地址以/开头
servlet是单例的,只创建一次实例
配置文件改了,就必须重启服务器
加入jar包:项目右键→build path→library→add library→sever runtime→tomcat…→finish
html是根标签,所有的都在html中
title:浏览器上面的小框框的内容
head:帮浏览器解析整个页面
body:页面显示内容
h2:标题
1
<base href="<%=request.getContextPath()%>/">
用来表明当前页面的相对路径所使用的根路径的。
httpservlet-不需要配置文件实现servlet
action:发送数据的服务器地址,method 默认get
id作用:正则表达式,判断用户输入的用户名是否符合规则,通过属性写正则表达式
三大域对象
✪把值存在域对象里,在别的页面通过域对象的方法获取域对象的值
获取web应用的初始化参数
获取项目的真实路径
✪作为域对象,保护多个用户共享的数据
1.(少)servletcontext:同一项目
类似一个全局变量,服务器开始就存在,服务器关闭才释放,一个项目就一个servletContext实例
ServletContext cxt = getServletContext();
1 | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { |
getContextPath()一般用于获取当前项目名
2.httpsession:在同一次会话中
3.httpservletrequest:在同一次请求中
httpservletrequest是servletrequest(🙅获取http)的子接口
域对象三方法
setAttriubute():放一个数据到servlContext中,便于后面取出
getAttriubute():根据域对象名获取值
removeAttriubute():根据域对象名删除值
1 | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { |
request和response
两种请求方式:
get方式(默认)
1.以地址栏的方式传输
2.会把用户输入的值显示在地址栏,不安全
3.速度快 查询用get()
post
1.文件形式传输
2.安全,传输数据大,增删改用post()
doget和dopost被service方法调用
两个方法改变了参数,针对http请求
request
获取用户参数,转发,作为域对象也可以存放数据
getParameter(String):根据参数获取值,返回类型为String[]
getparameterValues(String):根据名获取一组值,返回类型为String[]
getParameterNames ()方法 :获取所有参数的名字,返回类型为Enumeration
setCharacterEncoding(“utf-8”);
getContextPath()
response
getWriter()
:输出对象
response.setContentType("text/html;charset=utf-8");
输出对象
1 | PrintWriter out = response.getWriter(); |
把内容输出到浏览器上
servlet对象
Request和response在每一次访问时都被创建。由容器创建的
Serlvet只会被创建一次,由用户来开发,由容器来创建,单一的实例。
ServletConfig会为每一个Servlet创建一个Config对象,且由Servlet维护。就是声明成了成员变量。
ServletContext对象,代表web应用,这一个项目就只有一个此对象。
解决乱码问题:
页面,类,浏览器,tomcat编码格式必须相同
第一种
针对于get和post
1 | response.setContentType("text/html;charset=utf-8"); |
第二种(推荐)
只对post有效
1 | response.setContentType("text/html;charset=utf-8"); |
对于get方式,tomcat8.0默认配置转成UTF-8,8.0之前,默认ISO-8859-1,在改端口号的两个server.xml中的Connector节点加入URIEncoding=utf-8
✪请求转发,请求重定向
请求转发:地址栏还是初次请求的地址栏,
请求重定向:地址栏是最后一次响应的地址栏
本质区别:请求转发只发送一次一次请求,而重定向发送多次
请求转发:在最终的servlet中,request和中转的request是同一个request
重定向:不是同一个request
请求转发:/代表的是当前web应用的根目录,代表绝对路径http://localhost:8080/servlet02
请求重定向:/代表的是当前web站点的根目录http://localhost:8080
请求转发只能转发内部资源,请求重定向可以转发外部资源
外包是转发,还给服务器并告诉服务器谁可以完成任务为重定向
session
- 一次会话:浏览器打开到浏览器关闭
- 在服务器端保持http状态信息的方案
- 客户请求里是否包含session标识表明是否是第一次访问
- 如果当前已经创建了session,则直接返回,如果没有创建,就创建一个session
- 数据共享:在同一个会话中