web项目的目录结构
1.web项目的名字就是web项目的文件夹
2.web_test文件夹下面,必须要有一个固定的文件夹:WEB-INF
4.WEB-INF文件夹下面,有俩个固定的文件夹和一个固定的文件
文件夹:classes:编译好的class文件
lib:web项目在运行的时候所需要的第三方jar包
文件 :web.xml:web项目的配置文件,文件内容是让tomcat服务器在启动期间来自动读取的
tomcat能自动读取web项目中的web.xml原因
1.web项目是在tomcat中部署的
2.web项目结构是固定的
Servlet
Java Servlet的简称,称为小服务程序或服务连接器,主要功能是交互式地浏览和修改数据,生产动态web内容
Servlet 接口 有五个抽象方法 实现接口中的service方法
GenericServlet抽象类 有一个抽象方法
HttpServlet 抽象类 没有抽象方法 doGet方法和doPost方法
HttpServlet-继承->GenericServlet-实现->Servlet接口
1.在web.xml文件中配置自己编写好的servlet
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.briup.test.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
2.写注释
servlet生命周期
servlet单例多线程的,在web项目运行期间,一个servlet只会创建一个对象
产生:servlet对象是在用户第一次访问它的时候,由tomcat服务器来创建的(可以通过配置进行改变,在<servlet>标签中,添加一个子标签<
load-on-startup>,<load-on-startup>标签里面需要放一个正整数,数值的大小可以决定servlet对象被创建的先后顺序,数值越小就
越先被创建。(如果有多个servlet对象需要在tomcat启动期间被创建的话))
销毁:1.服务器【正常】关闭的时候
2.服务器重新加载web项目的时候(reloading)
servlet的访问
1.get方式的访问和post方式的访问
(1)get方式访问,参数在uri后面,不安全,传参受url地址栏的限制 url?参数=值
(2)post方式访问,参数在请求正文(中间有空行),较安全,参数长度是要看服务器一次性最多能够接受并且处理多少数据
1.表单提交数据method="post"
2.ajax中设置本次请求为post方式
2.servlet接收参数来讲,俩种情况都是一样的接收
2.1 接收单一的值(一个参数名对应一个值): request.getParameter("name")
2.2 一个参数名对应多个值(比如多选框):request.getParameterValues("like")
2.3 获得本次传参中的所有参数名:Enumeration<String> names = request.getParameterNames();
2.4 获得本次传参中的所有参数及对应的值:Map<String, String[]> map = request.getParameterMap();
//3.客户端传参过程中,出现中文乱码
3.1 get方式传参,中文乱码:需要在tomcat服务器中server.xml文件中进行配置
3.2 post方式传参,中文乱码:request.setCharacterEncoding("UTF-8");写入servlet中
3.3 servlet中使用io流写数据到浏览器,浏览器里面显示中文乱码:设置response中的编码为UTF-8
response.setCharacterEncoding("UTF-8");
设置响应头部,告诉浏览器响应内容编码为utf-8
response.setContentType("text/html;charset=utf-8");
servlet中的跳转和重定向
4.1 服务器内部跳转:request.getRequestDispatcher(url).forward(request, response);
1.需要使用request对象来完成
2.服务器内部跳转期间,其实就是把请求request和响应response转发到一下资源中,所以在整个跳转期间所有涉及到的资源使用的都是同一个request和response。(我们可以利用这个特点将来在多个资源之间进行数据的传递)
3.服务器内部跳转,【不会】改变浏览器地址栏中的地址
4.在设置跳转的资源地址的时候,路径的前面一般要加上/
4.2 客户端重定向
1.需要使用response对象来完成
2.每一个客户端重定向,浏览器都会发出新请求,也就意味着在服务器内部会产生新的request对象和response对象
3.客户端重定向,【会】改变浏览器地址栏中的地址
4.在设置重定向的资源地址的时候,路径的前面一般不加/
request session application
2.1 这三种对象可以在服务器内部帮我们保存数据以及传递数据.
类型(接口) 对象名
HttpServletRequest request 在doGet或者doPost方法的参数中
HttpSession session request.getSession();可传true(有就返回,没有就创建新的)false(返回null)
ServletContext application request.getServletContext()或this.getServletContext();
2.2 这三种对象的生命周期及作用范围
request对象 每次发送请求都会创建新的对象,访问结束就销毁,使用request存/取数据只能在一次请求之内起作用,如内部跳转
session对象 (会话) 第一次调用时创建,默认时间30分钟,可在web.xml中设置
application对象 启动服务器就会创建,关闭就销毁,在项目运行时有且只有一个对象(单例),所有用户共用
会话追踪技术:cookie
1.http协议的访问是无状态的访问:http协议的访问是不会帮我们保存访问的记录/痕迹的
2.会话追踪技术来解决这个访问无状态的问题
3.session和cookie的位置:session是服务器端的对象,cookie在客户端和服务器端都会有,客户端以本地文件的形式存在(浏览器管理的文件),服务端以java对象的形式存在,一般说的是指客户端文件的这种
4.session和cookie的作用:session在服务器端保存用户信息,cookie在客户端保存用户信息,同时还能保存session信息如id
5.session和cookie之间的关系:与店铺会员类似session是会员在店里的信息,cookie是会员卡
6.服务器端向浏览器写回cookie:new一个cookie对象,设置有效时间(没有设置就是会话cookie,关闭浏览器失效),添加到response中
7.servlet中拿到从浏览器发送过来的cookie文件中的数据:Cookie[] cookies = request.getCookies()
URL重写 (也属于会话追踪技术的一种)
Filter(过滤器):对请求进行筛选判断
1.编写filter过滤器:实现javax.Servlet.Filter接口
2.在web.xml中配置filter过滤器
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.briup.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<url-pattern></url-pattern>有四种配置方式:
第一种 精确匹配:<url-pattern>/test_servlet</url-pattern>
第二种 扩展名匹配:<url-pattern>*.html</url-pattern>
第三种 路径匹配:url-pattern>/test/*</url-pattern>
第四种 匹配任意的url:<url-pattern>/*</url-pattern>
JSP:java server page属于动态网页技术的一种
1.html标签
2.css
3.javascript
4.java代码
5.EL表达式
6.jstl标签
jsp的特点:1.jsp页面其实就是一个servlet,2.jsp页面的运行需要服务器的支持。首先jsp页面要被翻译成.java文件,然后再编译成.class文件,最后再运行这个.class文件
一、页面脚本元素
1.表达式:<%= %> <%=s.getName() %> out.print(s.getName());
2.脚本:<% ... %> 脚本中的代码将来会被直接翻译到_jspService这个方法中
3.声明:<%!.....%> 一个类中写什么,就可以在声明中写什么 注意:这里面的代码,定义变量的时候要加;号,定义方法的时候不用加;号
二、指令元素
1.<%@指令名字 属性="值" .. %>
1.page指令 2.include指令 3.taglib指令
2.jsp的动作元素
day2s
1.在jsp页面代码中可以直接使用的对象
类型 名字
PageContext pageContext
HttpServletRequest request
HttpSession session
ServletContext application
Object page
HttpServletResponse response
JspWriter out
ServletConfig config
Throwable exception
4.EL表达式
形式:${ } 从一个范围里面取值或者从一个对象中取值或是向页面输出值
5.JSTL标签库
把JSTL标签库导入到某一个jsp页面中:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:forEach>标签:
1.遍历List集合:
students是放进request对象中的一个List集合,集合中存放的是Student类型的对象.
items=""属性值是要遍历的集合
var="" 属性值是每次遍历到的对象用什么名字的变量去接收。
<c:forEach items="${students}" var="stu">
<tr>
<td>${stu.id }</td>
<td>${stu.name }</td>
<td>${stu.age }</td>
</tr>
</c:forEach>
2. 遍历Map集合:
<c:forEach items="${map}" var="entry">
${entry.key }-->${entry.value.id } ${entry.value.name } ${entry.value.age }<br>
</c:forEach>
3.<c:out>标签:向页面输出内容
<c:out value="hello"></c:out>
<c:out value="${students[2].id}"></c:out>(students是放在request中的List集合,集合里面是Student对象)
4.<c:set>标签:<c:set var="name" value="zhangsan" scope="request"></c:set>(向某一个范围对象中存放一个值。)
5.<c:remove>标签:<c:remove var="name" scope="request"/>
6.<c:if>标签:条件判断
<%
request.setAttribute("score",40);
%>
<c:if test="${score>85 }">
<font color="red">你的分数超过了85分</font>
</c:if>
<c:if test="${score>95 }">
<font color="red">你的分数超过了95分</font>
</c:if>
7.<c:choose>标签 <c:when>标签 <c:otherwise>标签
<c:choose>
<c:when test="${score>=90 }">优</c:when>
<c:when test="${score>=80 }">良</c:when>
<c:when test="${score>=70 }">中</c:when>
<c:when test="${score>=60 }">及格</c:when>
<c:otherwise>差</c:otherwise>
</c:choose>
1.web项目的名字就是web项目的文件夹
2.web_test文件夹下面,必须要有一个固定的文件夹:WEB-INF
4.WEB-INF文件夹下面,有俩个固定的文件夹和一个固定的文件
文件夹:classes:编译好的class文件
lib:web项目在运行的时候所需要的第三方jar包
文件 :web.xml:web项目的配置文件,文件内容是让tomcat服务器在启动期间来自动读取的
tomcat能自动读取web项目中的web.xml原因
1.web项目是在tomcat中部署的
2.web项目结构是固定的
Servlet
Java Servlet的简称,称为小服务程序或服务连接器,主要功能是交互式地浏览和修改数据,生产动态web内容
Servlet 接口 有五个抽象方法 实现接口中的service方法
GenericServlet抽象类 有一个抽象方法
HttpServlet 抽象类 没有抽象方法 doGet方法和doPost方法
HttpServlet-继承->GenericServlet-实现->Servlet接口
1.在web.xml文件中配置自己编写好的servlet
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.briup.test.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
2.写注释
servlet生命周期
servlet单例多线程的,在web项目运行期间,一个servlet只会创建一个对象
产生:servlet对象是在用户第一次访问它的时候,由tomcat服务器来创建的(可以通过配置进行改变,在<servlet>标签中,添加一个子标签<
load-on-startup>,<load-on-startup>标签里面需要放一个正整数,数值的大小可以决定servlet对象被创建的先后顺序,数值越小就
越先被创建。(如果有多个servlet对象需要在tomcat启动期间被创建的话))
销毁:1.服务器【正常】关闭的时候
2.服务器重新加载web项目的时候(reloading)
servlet的访问
1.get方式的访问和post方式的访问
(1)get方式访问,参数在uri后面,不安全,传参受url地址栏的限制 url?参数=值
(2)post方式访问,参数在请求正文(中间有空行),较安全,参数长度是要看服务器一次性最多能够接受并且处理多少数据
1.表单提交数据method="post"
2.ajax中设置本次请求为post方式
2.servlet接收参数来讲,俩种情况都是一样的接收
2.1 接收单一的值(一个参数名对应一个值): request.getParameter("name")
2.2 一个参数名对应多个值(比如多选框):request.getParameterValues("like")
2.3 获得本次传参中的所有参数名:Enumeration<String> names = request.getParameterNames();
2.4 获得本次传参中的所有参数及对应的值:Map<String, String[]> map = request.getParameterMap();
//3.客户端传参过程中,出现中文乱码
3.1 get方式传参,中文乱码:需要在tomcat服务器中server.xml文件中进行配置
3.2 post方式传参,中文乱码:request.setCharacterEncoding("UTF-8");写入servlet中
3.3 servlet中使用io流写数据到浏览器,浏览器里面显示中文乱码:设置response中的编码为UTF-8
response.setCharacterEncoding("UTF-8");
设置响应头部,告诉浏览器响应内容编码为utf-8
response.setContentType("text/html;charset=utf-8");
servlet中的跳转和重定向
4.1 服务器内部跳转:request.getRequestDispatcher(url).forward(request, response);
1.需要使用request对象来完成
2.服务器内部跳转期间,其实就是把请求request和响应response转发到一下资源中,所以在整个跳转期间所有涉及到的资源使用的都是同一个request和response。(我们可以利用这个特点将来在多个资源之间进行数据的传递)
3.服务器内部跳转,【不会】改变浏览器地址栏中的地址
4.在设置跳转的资源地址的时候,路径的前面一般要加上/
4.2 客户端重定向
1.需要使用response对象来完成
2.每一个客户端重定向,浏览器都会发出新请求,也就意味着在服务器内部会产生新的request对象和response对象
3.客户端重定向,【会】改变浏览器地址栏中的地址
4.在设置重定向的资源地址的时候,路径的前面一般不加/
request session application
2.1 这三种对象可以在服务器内部帮我们保存数据以及传递数据.
类型(接口) 对象名
HttpServletRequest request 在doGet或者doPost方法的参数中
HttpSession session request.getSession();可传true(有就返回,没有就创建新的)false(返回null)
ServletContext application request.getServletContext()或this.getServletContext();
2.2 这三种对象的生命周期及作用范围
request对象 每次发送请求都会创建新的对象,访问结束就销毁,使用request存/取数据只能在一次请求之内起作用,如内部跳转
session对象 (会话) 第一次调用时创建,默认时间30分钟,可在web.xml中设置
application对象 启动服务器就会创建,关闭就销毁,在项目运行时有且只有一个对象(单例),所有用户共用
会话追踪技术:cookie
1.http协议的访问是无状态的访问:http协议的访问是不会帮我们保存访问的记录/痕迹的
2.会话追踪技术来解决这个访问无状态的问题
3.session和cookie的位置:session是服务器端的对象,cookie在客户端和服务器端都会有,客户端以本地文件的形式存在(浏览器管理的文件),服务端以java对象的形式存在,一般说的是指客户端文件的这种
4.session和cookie的作用:session在服务器端保存用户信息,cookie在客户端保存用户信息,同时还能保存session信息如id
5.session和cookie之间的关系:与店铺会员类似session是会员在店里的信息,cookie是会员卡
6.服务器端向浏览器写回cookie:new一个cookie对象,设置有效时间(没有设置就是会话cookie,关闭浏览器失效),添加到response中
7.servlet中拿到从浏览器发送过来的cookie文件中的数据:Cookie[] cookies = request.getCookies()
URL重写 (也属于会话追踪技术的一种)
Filter(过滤器):对请求进行筛选判断
1.编写filter过滤器:实现javax.Servlet.Filter接口
2.在web.xml中配置filter过滤器
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.briup.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<url-pattern></url-pattern>有四种配置方式:
第一种 精确匹配:<url-pattern>/test_servlet</url-pattern>
第二种 扩展名匹配:<url-pattern>*.html</url-pattern>
第三种 路径匹配:url-pattern>/test/*</url-pattern>
第四种 匹配任意的url:<url-pattern>/*</url-pattern>
JSP:java server page属于动态网页技术的一种
1.html标签
2.css
3.javascript
4.java代码
5.EL表达式
6.jstl标签
jsp的特点:1.jsp页面其实就是一个servlet,2.jsp页面的运行需要服务器的支持。首先jsp页面要被翻译成.java文件,然后再编译成.class文件,最后再运行这个.class文件
一、页面脚本元素
1.表达式:<%= %> <%=s.getName() %> out.print(s.getName());
2.脚本:<% ... %> 脚本中的代码将来会被直接翻译到_jspService这个方法中
3.声明:<%!.....%> 一个类中写什么,就可以在声明中写什么 注意:这里面的代码,定义变量的时候要加;号,定义方法的时候不用加;号
二、指令元素
1.<%@指令名字 属性="值" .. %>
1.page指令 2.include指令 3.taglib指令
2.jsp的动作元素
day2s
1.在jsp页面代码中可以直接使用的对象
类型 名字
PageContext pageContext
HttpServletRequest request
HttpSession session
ServletContext application
Object page
HttpServletResponse response
JspWriter out
ServletConfig config
Throwable exception
4.EL表达式
形式:${ } 从一个范围里面取值或者从一个对象中取值或是向页面输出值
5.JSTL标签库
把JSTL标签库导入到某一个jsp页面中:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:forEach>标签:
1.遍历List集合:
students是放进request对象中的一个List集合,集合中存放的是Student类型的对象.
items=""属性值是要遍历的集合
var="" 属性值是每次遍历到的对象用什么名字的变量去接收。
<c:forEach items="${students}" var="stu">
<tr>
<td>${stu.id }</td>
<td>${stu.name }</td>
<td>${stu.age }</td>
</tr>
</c:forEach>
2. 遍历Map集合:
<c:forEach items="${map}" var="entry">
${entry.key }-->${entry.value.id } ${entry.value.name } ${entry.value.age }<br>
</c:forEach>
3.<c:out>标签:向页面输出内容
<c:out value="hello"></c:out>
<c:out value="${students[2].id}"></c:out>(students是放在request中的List集合,集合里面是Student对象)
4.<c:set>标签:<c:set var="name" value="zhangsan" scope="request"></c:set>(向某一个范围对象中存放一个值。)
5.<c:remove>标签:<c:remove var="name" scope="request"/>
6.<c:if>标签:条件判断
<%
request.setAttribute("score",40);
%>
<c:if test="${score>85 }">
<font color="red">你的分数超过了85分</font>
</c:if>
<c:if test="${score>95 }">
<font color="red">你的分数超过了95分</font>
</c:if>
7.<c:choose>标签 <c:when>标签 <c:otherwise>标签
<c:choose>
<c:when test="${score>=90 }">优</c:when>
<c:when test="${score>=80 }">良</c:when>
<c:when test="${score>=70 }">中</c:when>
<c:when test="${score>=60 }">及格</c:when>
<c:otherwise>差</c:otherwise>
</c:choose>