web部分笔记(1)servlet/jsp
来源:互联网 发布:淘宝培训班杭州 编辑:程序博客网 时间:2024/06/16 02:22
web部分笔记
2017/8/1
流程
创建动态Web项目
选择Dynamic Web module version
对应Tomcat版本: tomcat6.0对应2.5,tomcat7.0对应3.0,tomcat8对应3.1
输出路径: eclipse中新建web项目的时候默认路径为build\classes, 服务器的Class Loader类加载器默认加载/WEB-INF/classes目录下的.class文件 , 创建时应该设置为WebContent/WEB-INF/classes
创建JSP文件
注意编码格式UTF-8
配置tomcat服务器
选择tomcat版本
创建servlet
从而响应客户端的链接访问
在servlet里获取请求
service层进行逻辑操作
dao层进行数据操作
这三层紧密关联,上层可以获取下层并且进行操作
在服务器上运行
Servlet
使用Servlet的目的:接收客户端的请求并且做出响应
解析HTTP请求: URI 包括 URL 和 URN,后者不可以定位到资源
http请求:
GET / HTTP/1.1Host: www.baidu.comUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Connection: Keep-Alive
请求方式 /uri地址 http协议版本Host:主机地址Connection:(默认持续)连接方式其它键值对包括:响应格式、浏览器版本、cookie等等
get和post
get 参数键值对 uri?key=value&key=value 明文
post 参数同样是键值对,但不在uri后,而在请求正文
http响应:
协议版本 响应状态码
设置tomcat的server.xml文件
path web:应用的url入口
docBase web:应用的文件路径
reloadable :是否自动加载更新的web应用
tomcat首先会到conf/context.xml查找Context.xml
写一个Servlet的方法
创建Servlet类
继承HttpServlet
重写doPost() doGet()方法
直接使用eclipse的创建Servlet选项
2017/8/31
使用web.xml文件配置servlet
<web-app><servlet><servlet-name> Servlet 的名字</servlet-name><servlet-class> Servlet (包括包在内)的类名</servlet-class></servlet><servlet-mapping><servlet-name> Servlet 的名字</servlet-name><url-pattern> 访问Servlet的url的相对路径 </url-pattern></servlet-mapping><welcome-file-list><welcome-file> 作为默认主页的页面 </welcome-file></welcome-file-list></web-app>
使用注解
@WebServlet(“/uri路径”)
(name=”ServletName”,
urlPatterns={“/url”})
不需要在web.xml文件中配置节点
2017/9/1
Servlet的通配符匹配
Servlet内置对象
HttpRequest对象
假如url是:localhost:8080/ServletProject/Login
获取uri信息:地址+端口/后的所有部分 getRequestURI() /ServletProject/Login获取Servlet的url路径 getServletPath() /Login获取工程的站点名 getContextPath() /ServletProject获取绝对路径(不使用) getRealPath() 文件系统的路径D:\webapp\..获取请求方法 getMethod()获取请求头 getHeader()获取客户端ip getRemoteAddr() 获取所有参数名 getParameterNames()获取所有参数键值对 getParameterMap()根据参数名获取参数值 getParameter(String key)获取有多个参数值的数组 getParameterValues(String key)
@MultipartConfig注解获取区域的数据 getPart(name)
得到Part类型的对象,分为头部信息getHeader(“信息的类型”)、数据部分getInputStream()等,获得InputStream 就可以保存文件
路径使用ServletContext getRealPath("相对路径")获取分隔符Filie.separator文件名使用part.getSubmitedFileName()直接获取(tomcat7不行,只能正则处理)
RequestDispatcher对象
getRequestDispatcher(“servlet链接url”)获取
转发对象也可以是一个jsp
转发:将请求通过forward(request,response)方法转发给另一个servlet处理
接入:使用include()将另一个servlet的内容在当接入当前servlet
这两个概念可以跟jsp里的概念比较
另外通过response.sendRedirect(“目标”)可以进行重定向
不同之处是request会失效, 相当于重新做一次请求,因此这个路径不同于转发,必须是绝对路径!!!
或者直接去掉“/” ,直接重定向到另一Servlet
(转发方式的先天优势:
在getRequestDispatcher(url)方法中封装了
ServletContext.getRealPath()以获得相应的项目根路径)
HttpResponse对象
实现响应处理
添加响应头信息 addHeader(name,value) 获取打印流(输出字符用html/json/xml) getWriter() 获取输出流(用来输出文件) getOutputStream()
设置响应头,让浏览器下载文件,而不是直接打开文件
getResource() getResourceAsStream()
ServletContext对象 和 ServletConfig对象
ServletConfig 初始化对象
获取初始化数据 getInitParameter(key) (传统方法)这些数据在web.xml文件中使用<init-param></init-param>初始化配置 (注解) @WebServlet(initParams={ @WebInitParam(name="键",value="值"), @WebInitParam(name="键",value="值") 获取所有初始化参数 getInitParameterNames()ps:得到的是一个Enumeration枚举对象 获取Servlet名 getServletName() 获取ServletContext对象 getServletContext()
ServletContext 与容器的通信接口 每个web应用都有一个
所有Servlet共享一个ServletContext
保存数据到对象中 setAttribute(name, object) 获取数据 getAttribute(name)
2017/9/6
web会话管理
1 、网址重写:
url ? token 的形式
每次请求的时候,主动把token加到http header里面或者url后面
2 、使用隐藏域:
将上一个页面传递过来的数据写到一个不显示的input标签中
就是使用隐藏域进行会话管理
(页面太多时就太过复杂)
3 、基于cookie(存在浏览器)
是键值对
创建cookie对象
添加addCookie()
使得用户不需要在每次进入网站时都进行登陆操作
4 、基于session(存在服务端)
(HttpSession) getSession()
session.setAttribute( “key” , value )
(Object)session.getAttribute( “key” )
页面保护
数据保存
2017/9/7
Servlet处于多线程环境下,因此不要共享变量
过滤器
配置filter过滤器
<filter><filter-name></filter-name><filter-class></filter-class><inti-param><param-name></param-name><param-value></param-value></init-param></filter><filter-mapping><filter-name>'filter的名字'</filter-name><url-pattern>'访问的链接地址'</url-pattern></filter-mapping>或者使用注解@WebFilter
创建自定义过滤器类,实现FIiter接口
复写三个方法
初始化方法: init(FilterConfig)获取在web.xml中设置的初始化参数 使用FilterConfig.getInitParam("参数名")获取参数过滤方法doFilter( ServletRequest , ServletResponse ,FilterChain)销毁方法destory():
可以用来处理中文乱码:在过滤方法中设置request和response的编码格式
可以用来对访问者身份进行判断拦截,编辑页面的保护
监听器
监听web容器的有效事件
针对session/request/context对象的行为进行监听
实现Listener接口+(在需要监听的Servlet前添加)注解@WebListener
或者在web.xml中做监听声明
ServletContextListener 监听WEB 应用启动和销毁的事件 (在应用启动时读取历史访问人数)写一个监听用户访问次数的实例ServletContextAttributeListener 监听WEB应用属性改变的事件HttpSessionListener 监听HttpSession的创建销毁操作 一个客户端访问时会创建一个session 在线人数:已登录未注销的人数进行统计HttpSessionBindingListener 监听对象加入session或被移除的操作HttpSessionActivationListener 主要用于同一个Session转移至不同的JVM的情形 感知自己何时随着HttpSession钝化/激活。HttpSessionAttributeListener 监听HttpSession中的属性的操作ServletRequestListener 监听request的创建和销毁ServletRequestAttributeListener 监听request中的属性的操作
会实现监听到变化时自动执行后的方法
2017/9/8
JSP
本质是一个Servlet,html+JAVA
自动编写java文件进行
指令标识
<%@ 指令名 属性=”属性值” %>
page指令,设置页面属性
include指令,静态包含另一页面
taglib指令,引用标签库
脚本标识
<%! 声明的变量或方法%>定义全局的变量或方法<%= 表达式%>向页面输出信息<% java代码或脚本代码%> 在这里定义的变量是局部的,都在service()方法内
注释
///**//***/<%- %>
动作标识
<jsp:include page="url">动态包含<jsp:forward page="url">请求转发,将页面跳转<jsp:param name="参数名" value="参数值"/>
2017/8/2
JSP内置对象
request对象
在连接url后面加上 ?对象名=”值”
向目标连接发送一个对象
访问请求参数在目标jsp使用request.getParameter("对象名")获取值在作用域中传递参数request.setAttribute(String name ,Object obj)在转发前的页面保存数据request.getAttribute(String name )在转发后的页面读取数据获取cookiecookie 是键值对Cookie cookie=new Cookie(key,value);中文乱码将值进行编码转换UTF-8request请求都是IOS-8859-1 获取客户端信息
2017/8/3
response对象
重定向
response.sendRedirect(String path)
处理http响应报头禁用缓存、设置自动刷新、定时跳转网页设置输出缓冲
session对象
会话,在页面跳转时一直保存,直到关闭浏览器,或者长时间没动作
比request里所保存的数据存活更久
session.setArttibute(String name ,Object obj)session.getArttibute(String name)removeArttibute(String name)移除变量session.invalidate()销毁sessionsetMaxInactiveInterval(秒数)设置生命周期
application对象
全局变量,在服务器启动时创建,停止时销毁
标签在web.xml文件配置应用程序初始化参数
application.getInitParameter(String name)
( Enumeration ) application.getAttributeNames 获取所有初始化参数名
其余与session类似,生命周期更长
out对象
输出信息print()
其它对象
pageContext对象
config对象
page对象
exception对象
2017/9/11
EL表达式
${key}直接访问已经存在四个作用域中的对象${作用域.key}${key.属性}${list[1]}${set.iterator().next()}${}<jsp-config></jsp-config>
用来代替复杂的request.get。。。。。。
param参数
paramValues存储多数据,chekbox 复选框
2017/8/7
JavaBean
例子1:将数据通过JSP的request对象传递,使用这个数据实例化一个对象
调用方法进行判断,然后在页面进行输出
属性定义为私有,提供公有访问方法
使用<jsp:useBean>标签获取属性 <jsp:useBean id=" " class=" " > <jsp:getProperty property="变量名" name=""> <jsp:setProperty property="变量名" name="" value="值">
2017/9/12
jstl标签库
需要jar包
在文件头部导入库比如c标签 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><c:out/>输出内容<c:forEach/>遍历集合、数组 items=“” el表达式表示的集合对象 var=“” 取出来的一个对象的名字 step=“” 间隔 varStatus="" 当前行的名字,用来取出count之类的值last first begin end<c:forEach var="每个变量名字" items="要迭代的list" varStatus="每个对象的状态" begin="循环从哪儿开始" end="循环到哪儿结束" step="循环的步长"> 循环要输出的东西</c:forEach>
2017/9/13
标签库实现国际化
页面的文字多语言显示
http请求头有语言
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%><fmt:setLocale value="zh_CN"/><fmt:bundle basename="text"><center> <table> <tr> <td><fmt:message key="text2"/></td> </tr> </table> </center> </fmt:bundle>
创建一个存储文本数据的文本.properties
中文自动转换为UNICODEtext1=\u8FD9\u4E2A\u662F\u7B2C\u4E00\u53E5\u6587\u5B57text2=\u8FD9\u4E2A\u662F\u7B2C\u4E8C\u53E5\u6587\u5B57
自定义标签
创建tld文件定义标签
<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <description>newtag</description> <tlib-version>1.0</tlib-version> <short-name>newtag</short-name> <uri>http://com.gec.myfirsttag</uri> <tag> <!-- 标签名 --> <name>newtag</name> <!-- 标签对应的类 --> <tag-class>web.rz.tag.NewTag</tag-class> <!-- 主体内容 --> <body-content>empty</body-content> <attribute> <name>collection</name> <required>true</required> <rtexprvalue>true</rtexprvalue> 支持动态数据 </attribute> </tag></taglib>
NewTag继承SimpleTagSupport
doTag()输出标签的内容
前提:提供对象的set/get方法然后doTag方法里操作getJspContext().getOut().println("new tag<br/>");for (Iterator iterator = collection.iterator(); iterator.hasNext();) { Object object = (Object) iterator.next(); getJspContext().getOut().println(object+"<br/>");}
在jsp文件里使用
<%@ taglib uri="/WEB-INF/newtag.tld" prefix="easy"%>
- web部分笔记(1)servlet/jsp
- [Web基础笔记]JSP部分
- JSP&Servlet学习笔记(1)Web开发基础理论
- JSP&Servlet学习笔记(1): Web应用程序简介
- JSP/Servlet Web 学习笔记 DayOne
- JSP/Servlet Web 学习笔记 DayTwo
- JSP&Servlet学习笔记1
- 马士兵servlet&jsp视频教程——第二部分jsp笔记及源代码、servlet和jsp的通信
- 【Web开发】Servlet&Jsp
- 【Web开发】Servlet&Jsp
- JSP&&SERVLET学习笔记(二):Web.xml
- Servlet和Jsp 重点部分
- JSP/Servlet-----1、Web应用和web.xml文件
- Head First Servlet/JSP 学习笔记(1)
- servlet和jsp学习笔记1
- Servlet与jsp笔记
- JSP/Servlet学习笔记
- Servlet&JSP 笔记
- 遗传算法
- 自定义带箭头圆圈,自定义点击事件可以加减速,暂停继续,自动旋转
- Impala简介
- Tyvj1147
- Redis常用数据类型介绍、使用场景及其操作命令
- web部分笔记(1)servlet/jsp
- 为什么类和接口不能使用private和protected?接口的方法不能使用private、protected、default
- HDU 6194 String String String (后缀数组+线段树, 2017 ACM/ICPC Asia Regional Shenyang Online)
- Java的线程池
- Java常量池详解之Integer缓存
- 关于Js事件函数结尾return false的思考
- Python 性能优化【2】 -- 高效的使用序列与字典、集合
- 形式参数和实际参数
- 怎么给视频加密、选用隐大师U盘