Servlet简介
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。 最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。Eclipse JSP/Servlet 环境搭建:
Tomcat下载网址:http://tomcat.apache.org/download-70.cgi 解压文件夹如下:- bin:二进制执行文件。里面最常用的文件是startup.bat,如果是 Linux 或 Mac 系统启动文件为 startup.sh。
- conf:配置目录。里面最核心的文件是server.xml。可以在里面改端口号等。默认端口号是8080,也就是说,此端口号不能被其他应用程序占用。
- lib:库文件。tomcat运行时需要的jar包所在的目录
- logs:日志
- temp:临时产生的文件,即缓存
- webapps:web的应用程序。web应用放置到此目录下浏览器可以直接访问
- work:编译以后的class文件。
接着我们在浏览器中输入 http://localhost:8080/,如果弹出如下界面,表示tomcat安装成功并且启动起来了:
在Eclipse中window然后点击preferences然后选择server的RunTime Environment中的add添加刚才下载的Tomcat写相关servlet类
1.首先,配置Servlet要加入Servlet的api,将Tomcat全加进去可以 点击Add Library选择你的Tomcat文件的位置就可以 2.然后创建一个类继承HttpServlet,如下列代码所示extends HttpServletpackage com.demo; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class D extends HttpServlet{ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //respon的getWriter方法服务端回应客户端信息 response.getWriter().write("66"); } }配置映射文件(创建Web项目的时候一定要创建Web.xml)映射文件就在web.xml里面配置例如我的类名是D所以我的web.xml配置如下代码所示
<servlet> <servlet-name>D</servlet-name> <servlet-class>com.hzj.D</servlet-class> </servlet> <servlet-mapping> <servlet-name>D</servlet-name> <url-pattern>/D</url-pattern> </servlet-mapping>以上的代码意思就是一启动项目,就会启动Tomcat服务器,然后会根据映射文件来访问对应的Servlet,然后测试一下看能不能输出,运行可以输出 3.request的getParameter方法接受客户端传来的数据信息,如下列代码获取传来的name和age
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String name=request.getParameter("name"); String age=request.getParameter("age"); response.getWriter().write("nihao"); System.out.println(name+" "+age); } }然后控制台可以看到djm 21
Servlet的url配置方式,主要有以下方式
精确路径 :/abc,如LX03精确路径<servlet> <servlet-name>LX03</servlet-name> <servlet-class>com.demo.LX03</servlet-class> </servlet> <servlet-mapping> <servlet-name>LX03</servlet-name> <url-pattern>/LX03</url-pattern> </servlet-mapping>输出LX03 以do结尾的:*.do,以do结尾的去找LX04
<servlet> <servlet-name>LX04</servlet-name> <servlet-class>com.demo.LX04</servlet-class> </servlet> <servlet-mapping> <servlet-name>LX04</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>输出LX04 如果没有就是找这个所有的匹配的: /
<servlet> <servlet-name>D</servlet-name> <servlet-class>com.demo.D</servlet-class> </servlet> <servlet-mapping> <servlet-name>D</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>输出D
Servlet从创建到销毁所经历的方法,Servlet的生命周期
void init(ServletConfig) void service(ServletRequest,ServletResponse) void destory()init方法是单例只执行一次,并且只有程序执行的时候才会被调用,Tomcat启动不会调用 什么时候被调用: init()方法只会被调用一次,是在第一次访问(or 创建) Servlet 的时候被调用,在后续的每次请求时都不会再调用 init() 方法了。 作用: init()方法用于 Servlet 的初始化,可以简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
public LX03() { super(); System.out.println("---LX03---"); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(this); }
Servlet 调用inti方法的时间 -- 可以是用户第一次访问该 Servlet 时——web.xml 文件的<load-on-startup>标签 不配置或者配置为小于零的数; -- 也可以指定 Servlet 在服务器第一次启动时调用 init 方法——web.xml 文件 的<load-on-startup>标签配置为大于等于0的数。 当用户调用一个 Servlet时,会创建一个 Servlet 实例, 每个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或者 doPost 方法。只输出一次---Lx03---多次输出一样的内存地址,只执行一次,如下图
web.xml编码,设为utf-8
<servlet> <servlet-name>LX03</servlet-name> <servlet-class>com.demo.LX03</servlet-class> <init-param> <param-name>encode</param-name> <param-value>UTF-8</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>LX03</servlet-name> <url-pattern>/LX03</url-pattern> </servlet-mapping>写入以下代码获取
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletConfig config = this.getServletConfig(); String encode = config.getInitParameter("encode"); System.out.println(encode); }输出UTF-8
load-on-startup,如下图LX03的为3,LX04的为0
<servlet> <servlet-name>LX03</servlet-name> <servlet-class>com.demo.LX03</servlet-class> <init-param> <param-name>encode</param-name> <param-value>UTF-8</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>LX03</servlet-name> <url-pattern>/LX03</url-pattern> </servlet-mapping> <servlet> <servlet-name>LX04</servlet-name> <servlet-class>com.demo.LX04</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>LX04</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>当运行LX03的时候,会先输出LX04 如下图输出,所以load-on-startup值越小,优先级越高,默认是-1
Session会话,只要浏览器不关闭就是一次会话,不管开多少个窗口
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置session名字为djm HttpSession session = request.getSession(); session.setAttribute("name","djm"); } //另一个servlet @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //然后获取上个servlet设置的session HttpSession session = request.getSession(); Object object = session.getAttribute("name"); System.out.println(object); }首先启动LX03 地址栏在输入LX04,这时候就可以拿到LX03的Session
前台获取数据session
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); HttpSession session = request.getSession(); session.setAttribute("name",name); } //另一个servlet @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //然后获取上个servlet设置的session HttpSession session = request.getSession(); Object object = session.getAttribute("name"); System.out.println(object); }地址栏输入HHH获取HHH 这时候换为LX04,控制台会输出HHH,并且可以获取多次,缓存的原理
注意:session默认为true,true的时候,有的话返回,没有session创建新的session,false的话,有的话返回,没有返回null
application获取信息(和session差不多的方式)
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name=request.getParameter("name"); ServletContext application = request.getServletContext(); application.setAttribute("name",name); } //另一个servlet @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //然后获取上个servlet设置的application ServletContext application = request.getServletContext(); Object object = application.getAttribute("name"); System.out.println(object); }设置名字 访问
request,注意request在另一个servlet取不到,这个是可以自己传,自己收到
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name=request.getParameter("name"); request.setAttribute("name",name); Object object = request.getAttribute("name"); System.out.println(object); }如下图
标签:生命周期,name,void,request,session,LX03,Servlet From: https://www.cnblogs.com/YHSDDJM/p/16870148.html