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"%>


原创粉丝点击