servelt学习
1.http协议:http消息遵循http协议 (1)要先建立连接(2)发送请求(3) 响应请求 无状态 1.1连续发送消息
2.tomacat后面的8080会自动带上自己在那个盘装着
3.tomacat在启动的时候回自动加载xml文件跟class文件
4.反射技术在servlet里面启动
5.servelt的生命周期从服务器开启到服务器关闭
不可以写成员变量
6.同一个对象创建多个线程(service 参数不一个) 共享资源
7web.xml详解
优先执行的是tomcat下的web.xml文件,如果没有执行成功则会到指定的项目下执行web.xml文件,如果还没有成功则404(记住)
<load-on-startup>5</load-on-startup>--服务器启动初始化指定的Servlet
8.外部部署 把webroot扔在tomacat下面的app
9.冷部署 在myecplipse下面配置服务器 重写servelt需要重新启动服务器
. 热部署 重写servelt不需要重启服务器只需要在tomcat下面的conf文件下面的serve.xml的host标签里面加入一句话
servelt对象
reqest:学习
一个请求是一个对象
每次客户端请求发送到服务器,服务器就会创建一个request对象来封装此次的请求信息。
* 一个请求会封装一个。会将封装的request对象,以实参的形式传递给将要执行的Servlet
* request的使用:
* 获取请求行信息:
* getMethod()
* getRequestURL()
* getRequestURI()
* getQueryString()
* getSchema()
* 获取请求头信息:
* getHeader(String name)
* getHeaderNames()--返回键的枚举,需要遍历枚举
* 获取请求实体:
* getParameter(String name)--根据键获取用户的请求数据
* getParameterValues(String name)--获取同键不同值的数据
* getParameterNames()-------返回键的枚举,遍历枚举获取所有的键,参照下面的示例代码
* 获取网络信息
* req.getRemoteAddr();------获取ip
req.getRemotePort();------获取端口号
req.getRemoteHost();------获取主机地址
req.getLocalAddr();-------获取服务器ip
req.getLocalPort();-------获取服务器端口号
/*
*
response对象学习:
* 操作响应头信息:
* setHeader(name,value)----同键的只可以有一个值
* addHeader(name,value)----同键可以有不同的值
* 操作响应实体:
* resp.getWrite().write("响应内容");
* 响应字符编码格式设置
* resp.setHeader("content-type","text/html;charset=utf-8");--设置浏览器解析接受数据的编码格式
* text/html---响应html数据
* text/plain---响应普通文本
* text/xml----响应xml数据
* resp.setContentType("text/html;charset=utf-8");--设置浏览器解析接受数据的编码格式
* resp.setCharacterEncoding("utf-8");----设置服务器响应数据的编码格式
resp.sendDirect();请求重定向
*
cookie学习:
* cookie解决了不同请求之间信息共享的问题
cookie的特点:
* cookie是一种客户端的信息存储技术
* 设置有效期的cookie会存放在客户端的硬盘中,不管是否关闭浏览器,在有效期期间请求会附带此cookie信息
* 没有设置有效期的cookie会存放在浏览器端的内存中,关闭浏览器即失效
* 设置了有效路径的cookie只有在访问指定的路径的时候才会附带此cookie信息
* cookie的使用:
* 1、创建cookie
* Cookie 名字=new Cookie(键名,值)
* 2、设置cookie
* setMaxAge(秒为单位)
* setPath(uri)
* 3、响应cookie信息
* resp.addCookie(Cookie c)
* 4、获取cookie信息
* req.getCookies()---返回Cookie[]数组
* Cookie.getName()---Cookie.getValue()
session学习:
/ * 1、session机制:
* 解决的是业务处理数据共享的问题。
* 创建一个session对象,存储共享数据。
* 如果有sessionID, 并且session没有失效,则不管在项目的任何位置都会拿到同一个session对象。
* 如果有sessionID,但是seesion已经失效,则会创建一个新的session对象并响应sessionID
* 如果没有sessionID,则直接创建一个session对象,并响应sessionID
* 2、session的使用:
* 创建/获取session对象
* req.getSesssion();
* 设置session对象
* hs.setMaxInactiveInterval(秒为单位);-----session的有效期,默认是30分钟
* hs.invalidate();-----强制销毁session
* 注意:
* session的生命周期:本次会话
*
* 3、session的作用域:
* sessionID不丢失,不销毁,作用域是本项目内
* 使用:
* setAttribute(key,value);
* getAttribute(key);
* */
/*
* ServletConfig学习:
* 1、创建ServletConfig对象
* ServletConfig sc=this.getServletConfig();
* 2、使用ServletConfig对象,操作Servlet在web.xml中的初始化信息
* sc.getInitParameter("键名")
*
* 配置Servlet的初始化信息,放在servlet标记里面
* <init-param>
<param-name>name</param-name>
<param-value>zhangsan</param-value>
</init-param>
*
*
* */
/*
*
* ServletContext对象学习:
* 1、又名application对象
* 2、创建ServletContext对象
* ServletContext sc=this.getServletContext();
ServletContext sc1=this.getServletConfig().getServletContext();
ServletContext sc2=req.getSession().getServletContext();
3、使用:
获取web.xml中的全局配置信息
操作作用域
获取文件的绝对路径--getRealPath()
*
* */
jsp学习:
为什么需要jsp?
Servlet对于逻辑处理是非常方便的,但是对于页面的展现是非常麻烦的。JSP的诞生是为了解决Servlet页面展现麻烦的问题的。
JSP的特点:
Jsp页面展现非常方面,但是业务逻辑处理非常麻烦
总结:
一般我们需要将两门技术结合使用,Servlet做业务处理,jsp做页面的展现
jsp具体内容:
jsp原理:(jsp就是Servlet)
在我们访问jsp文件的时候,并没有直接去执行JSP文件,而是被服务器所拦截执行了jspServlet的类。此类会将jsp文件
转译成对应的Servlet文件并执行。所以jsp本质还是Servlet。
jsp的使用:
1、常用指令集:
page
language
import
pageEncoding
session
errorPage
include:
静态引入:
转译成一个Servlet类,耦合性高
动态引入:
转译成两个Servlet类,耦合性低
请求转发(自带return):
<jsp:forward page="要转发的文件路径">
<jsp:param value="值" name="键"/>
</jsp:forward>
2、java代码段声明
<%java代码%>---会被转译到_jspService方法中,局部代码
3、全局代码段声明
<%!声明方法%>----会被转译成全局代码
4、表达式语句
<%=变量名/方法 %>---后面不能加分号
5、九大内置对象 :
四个作用域:
pageContext
request
session
application
两个输出:
out
response
三个打酱油:
page
config
exception
el表达式
1、作用:
主要是用来获取作用域中的数据的,不需要导包,不需要强转
2、语法:
$+{}
获取用户数据:$+{param.键名} $+{paramValues.键名}
获取作用域中的数据:$+{键名}
获取作用域中集合数据:
list:$+{键名[角标].属性}
map:$+{键名.key.属性}
3、使用:
作用的查找顺序:
pageContext--request---session---application:从小到大依次查找,找到了就不再找了
指定作用域查找:${域名Scope.键名}
不能获取普通变量的值,如果四个作用域中都没有对应的值,则什么都不显示,并不会报错
EL表达式的逻辑运算:
${1+2}--${1==1}--${2>1}--${1+"3"}--${1==1?"男":"女"}
关键字empty:
${empty s2}
JSTL标签库
内容:
核心标签库:
输出标签:
<c:out value="数据"></c:out>(很少用)
设置作用域标签:
c:set var="键名" value="值" scope="作用域名" /c:set
相当于我们写的java代码中的作用域名.setAttribute(键名,值);
往指定作用域中存储数据,默认是pageContext
删除标签:
c:remove var="键名" scope="作用域名" /c:remove
删除指定作用域中的数据,默认四个作用域全部删除
逻辑标签:
c:if test="$+{逻辑判断}" /c:if---想当于java中的if判断
c:choose------------------------相当于java中的if(){}else if(){}...else{}
c:when test="" /c:when>
c:when test="" /c:when>
c:otherwise /c:otherwise
/c:choose
<c:forEach items="要遍历的对象,使用el表达式获取" var="记录每次的循环结果"
begin="开始" end="结束" step="步长" varStatus="记录每次循环的状态">
${i}-${vs.index}-${vs.count}-${vs.first}-${vs.last}