博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java/severelet
阅读量:4289 次
发布时间:2019-05-27

本文共 4422 字,大约阅读时间需要 14 分钟。

telnet命令需要先开启才能使用;可以在dos窗口中请求服务器。

在dos窗口编译:javac -d .helloServlet.java(-d表示编译,.表示当前目录)
设置临时环境变量,一次有效,支队当前窗口有效,set classpath=%classpath%;jar包路径/servlet-api.jar

实现Servlet的两种方法:1.implements Servlet接口,实现5个接口;2.extends  HttpServlet.

servlet的配置信息:在web.xml中:

servlet-name:名称必须唯一;
servlet-class:包名.类名
servlet-mapping:配置servlet的映射,即访问路径,其中的servlet-name必须和上面的一样。
url-pattern:访问路径,/路径名。

Servlet的生命周:都是服务器来调用的。

init方法:在第一次访问的时候被调用。一个生命周期中只调用一次。也可以配置服务器一启动就调用。不同的客户端访问的是同一个servlet。通过service方法中的request和response来处理不同的请求和响应。
service方法:有一次请求就调用一次这个方法。
destroy方法:服务器关闭或者手动移除时调用一次,一个生命周期只执行一次。

Servlet的运行过程:web浏览器发送http请求到web服务器;服务器调用Servlet的service方法,把rrequest和response赋值到方法的参数中,

在service方法中可以读取request的请求,response可以做出响应。服务器读取响应的信息,发送给浏览器(对浏览器做出响应)。
 

服务器端重定向:response.sendRedirect("listEmploy.html");重定向前response缓存的所有数据被清空,response.getWrite().println()就不起作用;重定向前,不能够有 out.close()戒者 out.flush()操作。重定向后浏览器的地址就改变了。

下面是直接在html内重定向

 

转发:一个 web 组件(jsp/servlet)将未完成的处理转交给另一个 web 组件继续处理。转发的各个组件会共享 request 和response 对象。转发是一次请求,重定向是两次请求。转发后浏览器的地址不变。转发的地址必须是同一个应用内的某个组件,不能跨应用,跨服务器。request是一个域对象,作用范围是一次请求;

     *****1.绑订数据

request.setAttribute(String name,Object obj); 跟绑订相关的另外两个方法

//如果 name 对应的值不存在,返回 null。

Object request.getAttribute(String name);

request.removeAttribute(String name);

      *****2.获得转发器,转发

RequestDispatcher rd = request.getRequestDispatcher(String uri);

rd.forward(request,response);

在tomcat/conf/web.xml中有一个servlet的默认配置(一般当程序出错的时候,如果我们没有配置出错的页面,

会跳到这个路径下的servlet),虚拟路径是/;所以我们平时配置路径的时候不要用/。
response.setContentType("text/html;charset=UTF-8");//设置浏览器打开文件时的编码
response.setHeader("Content-Type","text/html;charset=UTF-8");

 

request.getContextPath();//获取工程的虚拟目录,项目的路径
request.getRemoteAddr();//获取ip地址
request.QueryString();//获取url?后面的内容,
refer:记住当前网页来源
User-Agent判断浏览器
if-modified-since 控制缓存

获取请求参数;

String  getParameter(String name);
 String[] getParameterValues(String name) 
Map getParameterMap();//获取所有参数键值对

request获取中文乱码解决:
post请求:request.setCharacterEncoding("UTF-8");
get请求:方法一:new String(username.getBytes(ISO8859-1),"utf-8");
方法二:在服务器中的server.xml中修改Connector标签中的URIEncoding为utf-8;
 方法三:逆向编码9-1
username=URLEncoder.encoding(username,"ISO885");
usename=URLDecoder.decode(username,"utf-8");

 

***利用response.getOutPutStream()向浏览器输出时乱码的解决:

******利用response.getWrite().write()来向浏览器输出乱码的解决办法:

resopnse有一个缓冲区,缓冲区有默认的编码:ISO-8859-1;可以重新设置:

设置缓冲区的编码response.setCharacterEncoding("UTF-8");
设置浏览器打开文件采用的编码response.setHeader("Content-type","text-html;charset=utf8");
或者简写,这一句等于上面的两句:response.setContentType("text-html;charset=utf8");

 

*****问题:

禁用浏览器缓存:

resopnse.setHeader("Cache-Control","no-cache");
resopnse.setHeader("Prama","no-cache");
resopnse.setDateHeader("Expires",-1");//注意这是个日期类型的

****@WebServlet("/Helloworld")的解释:

第一个serverlet:部署到tomcat:

httpServlet中如果实现了service方法,就不会执行doGet和doPost方法。

如果只实现doGet和doPost方法,服务器会默认实现service的两个方法。

servlet模板修改:找到myeclipse安装路径;找到plugin.com.genuitec.eclipse.wizards.xxxx.jar(千万不要解压,右键用压缩工具打开);

找到templates->servlet.java复制到外面修改后再拖到原来的位置(拖进去之前先关闭myeclipse)。

servlet自动加载:默认是第一次访问的时候才创建实例(执行init方法);可以通过配置,启动服务器就创建实例;

在web.xml中的<servlet>中加入<load-on-startup>正整数</load-on-startup>;(配置文件中可能有多个servlet标签)正整数的值越小,优先级越高。
一般在servlet的init方法中执行数据库的连接等需要初始化的东西。

web.xml中配置虚拟访问路径:在下面的标签中配置

<servlet-mapping><url-pattern>/lambo</url-pattern></servlet-mapping>
有三种配置访问路径的方式:1.完全路径匹配:以/开的头,如/lambo;
2.目录匹配:/*
3.扩展名匹配:(不要以/开头),如*.do    *.action
优先级:完全匹配  > 目录匹配 > 扩展名匹配

****配置初始化参数:

ss
First.ss
 
userName
Tommy
E-mail
Tommy@163.com
在servlet中能够调用getServletConfig().getInitParameter("url")获得参数名对应的值。

******ServletContext:

一个项目在服务器启动的时候就会创建一个ServletContext;一个项目只会有一个ServletContext,项目中的所有Servlet共用一个ServletContext;

ServletContext有三个作用:

1.获取全局出示化参数:在web.xml开始添加 

<context-param>
    <param-name>test</param-name>
    <param-value>400</param-value>
  </context-param>\
在程序中用request.getSession().getServletContext().getInitParamter("test")即用servletContext可取得.;

getInitParamterNames();获取所有全局初始化参数的名字;

2.servletcontext实现数据共享:

request.setAttribute(String name,Object obj); 

 request.getAttribute(String name);

request.removeAttribute(String name);

 

3.读取资源文件:

获取绝对磁盘路径:

String path=getServletContext().getRealPath("/WEB-INF/classes/xx.properties");

Inputstream fs=getServletContext().getReaourceAsAtream("/WEB-INF/classes/xx.properties");注意目录

 

HttpServlet中request和reponse的相关使用:

你可能感兴趣的文章
搜集的动植物分类、检索网站
查看>>
ffmpeg源码分析之媒体打开过程
查看>>
Ubuntu/centos/redhat/SUSE sipp安装(带rtp支持,3.5.1版本)
查看>>
周鸿祎:很多程序员聪明,但我一看就知道他不会成功
查看>>
编译程序遇到问题 relocation R_X86_64_32 against `.rodata' can not be used when making a shared object;
查看>>
Const指针 、 指向const的指针 、引用、指针
查看>>
GDB调试命令
查看>>
常见数据类型的字节数
查看>>
gcc/g++ 编译常见问题
查看>>
【设计模式】 工厂模式实例 C++ , 利用工厂模式写一个计算器
查看>>
opencv
查看>>
【图像处理】 一、OSTU分割
查看>>
Android常用的框架有哪些
查看>>
SSL 证书创建与部署
查看>>
学习搭建人工智能环境遇到的问题
查看>>
自己编写的计算器
查看>>
视频物体检测
查看>>
Tomcat启动遇到的问题
查看>>
Gradle-gradlew
查看>>
grpc-整合gradle与代码生成
查看>>