Servlet 笔记

一、Servlet 接口
实现Servlet借口,要实现五个方法destroy() , getServletConfig() , getServletInfo(),init(ServletConfig config), service(ServletRequest req, ServletResponse res) 。
Servlet 三个实现类:FacesServlet,GenericServlet, HttpServlet 。
新建的类只需继承HttpServlet这个实现类即可~

不用Eclipse工具 , 步骤:
1、编写一个类,继承HttpServlet类,重写方法;
2、编译、将class文件放到 WEB-INF的 classes文件下(注意要带包编译,classes文件下 要对应Package的路径 )
3、配置Servlet文件信息(web.xml)

    <servlet>
        <servlet-name>web1.ServletDemo1</servlet-name>
        <servlet-class>web1.ServletDemo1</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>web1.ServletDemo1</servlet-name>
        <url-pattern>/Demo1</url-pattern>
    </servlet-mapping>

二、Servlet的生命周期
生命周期:实例被创建,对外提供服务,销毁。
Servlet被创建后,然后调用init方法进行初始化: void init(ServletConfig config)
从客户端发送所有的请求是service方法进行处理的:void service(ServletRequest req, ServletResponse res)
Servlet的生命周期:第一次请求的时候,Servlet实例被创建,立即调用init方法进行初始化。实例通过service方法提供服务。服务器关闭或者移除服务时,调用destroy方法进行销毁。

三、查看源码,ctrl + 左键 GenericServlet
找到src.jar或者source.jar后,单击“Attach Source…”按钮,出现如下图所示的对话框,选择External Location单选框,之后单击”External File…“按钮,找到你src或者source-jar包的目录,选择jar包即可。 (apache-tomcat-9.0.0.M11-src.zip)

四、 Servlet 自动加载
Servlet默认是第一次访问时候创建实例。通过配置,服务器启动,创建实例。若init做初始化的操作非常消耗时间,那么很有必要设置自动加载。配置文件:

    <servlet>
        <servlet-name>web1.ServletDem5</servlet-name>
        <servlet-class>web1.ServletDemo5</servlet-class>
        <load-on-startup>3</load-on-startup>
    </servlet>

值越小,优先级越高。

五、配置虚拟路径(访问路径)
1.完全路径匹配: <url-pattern>/demo5</url-pattern>
2.目录匹配:<url-pattern>/*</url-pattern>
3.扩展名匹配 <url-pattern>*.do</url-pattern>
优先级:完全路径匹配 > 目录匹配 > 扩展名匹配

六、web开发中的路径
1. 相对路径
同一根目录下(1.html与2.html在同一目录下),
href=”2.html” 或href=”./2.html”都可以
如果1.html在2.html的上级目录 href=”../1.html”
2.绝对路径
http://localhost:8080/web1/1.html
或者简写 /web1/1.html

七、ServletConfig

八、ServletContext
1.WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
2.ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
3.由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

配置xml文件,例:

    <context-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </context-param>

实现数据共享
void setAttribute(String name, Object object) 存入数据
void removeAttribute(String name) 删除数据
Object getAttribute(String name) 获取数据
读取资源文件
InputStream getResourceAsStream(String path) 通过文件的地址获取输入流
String getRealPath(String path) 通过文件的地址获取文件的绝对磁盘路径

路径问题 ,待解决

String path = getServletContext().getRealPath("db.properties");
InputStream in = new FileInputStream("/db.properties");

上面的可以,下面的不行,为啥?

十、 Request 对象
Request 对象 实现了javax.servlet
Interface ServletRequest 接口

All Known Subinterfaces:
HttpServletRequest

All Known Implementing Classes:
HttpServletRequestWrapper, ServletRequestWrapper
1、获取客户机信息
getRemoteAddr() 获取IP地址
Returns the Internet Protocol (IP) address of the client or last proxy that sent the request.
getMethod() 获取请求方式
Returns the name of the HTTP method with which this request was made, for example, GET, POST, or PUT.
getContextPath() 获取虚拟路径(默认和项目名称相同)
Returns the portion of the request URI that indicates the context of the request.
getQueryString()
Returns the query string that is contained in the request URL after the path.
2、获取请求头
java.lang.String getHeader(java.lang.String name)
Returns the value of the specified request header as a String.
long getDateHeader(java.lang.String name)
Returns the value of the specified request header as a long value that represents a Date object.
int getIntHeader(java.lang.String name)
Returns the value of the specified request header as an int.
请求头
referer 记住当前网页的来源 User-Agent 判断浏览器 if-modified-since 控制缓存
获取请求参数
java.lang.String getParameter(java.lang.String name)
java.lang.String[] getParameterValues(java.lang.String name)
一个key对应多个value

java.util.Map<java.lang.String,java.lang.String[]>  getParameterMap() 

Map集合 键值对

*request获取中文数据乱码(总结:)
* post提交
* 设置request缓冲区的编码
request.setCharacterEncoding(“utf-8”);
* get提交
* String构造方法
username = new String(username.getBytes(“ISO-8859-1”),”utf-8”);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值