Java Servlets
-----------------------------------------------------------------------------------------------------------------------------------------
Servlet2.4:是sun公司提出的一个标准,作为容器提供商和我们开发人员必须按照这个标准来开发容器和
开发web应用;开发人员实现Servlet的接口,service方法是由容器调用的,并且会传进来request和
WEB应用的目录结构;
servlet中的方法由所处的容器来调用;
<form method="post" action="helloservlet">
</form>
Http请求:包括请求头和请求体
Get请求:浏览器提交的数据是放在请求头部的;
Post请求:浏览器提交的数据是放在请求体部的;
Web application server:
Tomcat:
opt/jakarta_tomcat5.0.28
一、tomcat和servlet介绍
Tomcat的目录结构
1) bin:主要存放tomcat的一些可执行文件,比如:startup.bat,shutdown.sh;
2) common:主要用来存放tomcat以及所有的web应用都可以用的一些类或则.jar文件;
3) conf:其中包含着Tomcat的配置文件,主要是server.xml、web.xml和tomcat-users.xml等;
conf/server.xml:修改Tomcat的端口
conf/web.xml:设置默认主页
conf/tomcat-users.xml:添加Tomcat的Admin和Manager用户
conf/Catalina/../新建xml文件,指定docBase,可以设定Tomcat应用的
路径,默认是在Tomcat/webapps目录
4) logs:包含着Tomcat的日志文件以及应用的日志文件;
5) server:存放只有tomcat能使用的类或者jar文件以及tomcat自带的web应用,包含着运行Catalina
容器所需要的文件以及类库;
6) shared:存放所有的web应用共享的.class和.jar,但是tomcat不能使用;
7) temp:用来存放临时文件;
8) webapps:存放我们开发的web应用;
9) work:通过jsp生成的servlet类存放的目录;
-------------------------------------------------------------------------------------------
在windows下配置tomcat:
CATALINA_HOME=
-------------------------------------------------------------------------------------------
home目录下:
1.打开控制台;
2.vi .bashrc
3.export JAVAHOME=/opt/java/jdk/jdk1.5.0_06
export CATALINA_HOME=/opt/jakarta-tomcat-5.0.28
4.保存配置文件;
5.source .bashrc;
-------------------------------------------------------------------------------------------
启动tomcat
1、在命令行窗口启动;需要配置环境变量;JAVA_HOME(必须),CATALINA_HOME(必须),
PATH(可选)
执行%CARALINA_HOME%\bin下startup.bat启动tomcat,shutdown.bat关闭tomcat;
2、在eclipse中启动;无须配置系统环境变量;通过myeclipse插件集成tomcat;
-------------------------------------------------------------------------------------------
WEB应用的目录结构:
Servlet
--WEB-INF
--classes存放开发的java类,比如说是servlet类
--lib 存放第三方的jar包,比如说ojdbc14.jar
--web.xml 对servlet进行描述
--.htm .html .jsp
就编写好的上述程序放入%CATALINA-HOME\webapps\中;
url-pattern
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
----------------------------------------------------------------------------------------------------------------------------------
Http协议:是应用层的协议,他是无状态的。它是架在tcp/ip传输层协议之上的,对传输数据的格式做
了一个定义。
-------------------------------------------------------------------------------------------
CGI和Servlet的优缺点:
CGI程序可以有多种语言编写,但是服务器端处理请求使用进程,消耗服务器端资源;
Servlet只能由java编写,服务器端处理请求使用线程,移植性好;
-------------------------------------------------------------------------------------------
什么是Servlet?
JEE规范的一部份,是用java语言编写的服务器端程序,
用于创建动态web页面,不依赖于具体的协议,必须运行于web容器中。
-------------------------------------------------------------------------------------------
在tomcat根目录下的conf目录下修改:
配置tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="tomcat" roles="admin,manager"/>
</tomcat-users>
-------------------------------------------------------------------------------------------
配置server.xml
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" />
-------------------------------------------------------------------------------------------
在CATALINA/localhost下面配置一个新的文件:admin.xml
其中path里面填写的是你的工程名字,docBase里面填写的是WEB-INF的路径;
<Context path="/admin" docBase="/home/briup/works/Servlet/WebRoot"
debug="0" privileged="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_admin_log." suffix=".txt"
timestamp="true"/>
</Context>
-------------------------------------------------------------------------------------------
本来面目:
<url-pattern>/hello</url-pattern>
访问时在地址栏只能写
http://127.0.0.1:8080/Servlet/hello
为了加强灵活性和易用性,方法如下:
后通配:
<url-pattern>/hello/*</url-pattern>
访问时在地址栏里写
http://127.0.0.1:8080/Servlet/hello/asdasd/asdasd/asdasd
都是可以的;
前统配:
<url-pattern>*.hello</url-pattern>
http://127.0.0.1:8080/Servlet/*.hello
http://127.0.0.1:8080/Servlet/a.hello
http://127.0.0.1:8080/Servlet/abc/a.hello
都是可以的;
-------------------------------------------------------------------------------------------
HttpServlet继承自GenericServlet,其中的service方法自动实现;
GenericServlet的调用方法:
容器
——————>service(ServletRequest req,ServletResponse res)
————>service(HttpServletRequest req,HttpServletResponse res)
——METHOD="GET"——>doGet(HttpServletRequest req,HttpServletResponse res)
——METHOD="POST"——>doPost(HttpServletRequest req,HttpServletResponse res)
-------------------------------------------------------------------------------------------
表单的处理:
<FROM METHOD="POST" ACTION="servlet/FormServlet">
-------------------------------------------------------------------------------------------
获取客户端提交的信息:
1)HttpServletRequest.getParameterNames():获取所有表单信息
2)HttpServletRequest.getParameter(key):获取指定key的信息
3)HttpServletRequest.getParameterValues(key):表单项有多个值,用此方法
客户端向服务器端提交信息
1)使用表单,即<form>
2)在URL后追加 ?name=value&name=value
获取HTTP请求的头部信息:
1)HttpServletRequest.getHeaderNames()
2)HttpServletRequest.getHeader(...)
如referer可以取到上一个网页的URL
localhost:8888/servletjd0710/ch2/RequestServlet?name=briup&age=10
request.getContextPath():/servletjd0710
request.getQueryString():name=briup&age=10
request.getRequestURI():/servletjd0710/ch2/RequestServlet
request.getRequestURL():http://localhost:8888/servletjd0710/ch2/
request.getServletPath():/ch2/RequestServlet
二、servlet的生命周期
1)由容器装载并实例化,产生一个实例
2)由容器调用init()方法,不需要考虑多线程
只被调用一次
init(ServletConfig config)先被调用
init()后被调用
设置初始化参数:
1, 全局的
<context-param>
<param-name>age</param-name>
<param-value>20</param-value>
</context-param>
通过ServeltConfig.getServletContext().getInitParameter(...)取
2,局部的
<servlet>
<servlet-name>helloservlet</servlet-name>
<servlet-class>com.briup.ch3.HelloServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>zhangsan</param-value>
</init-param>
</servlet>
通过ServletConfig.getInitParameter(...)取
3)根据用户的每一次请求,调用一次服务方法doGet/doPost等,需要考虑多线程
service(ServletRequest,ServletResponse)
service(HttpServletRequest,HttpServletResponse)
doGet()/doPost()
多线程处理
1)implements SingleThreadModel
每个请求创建一个Servlet实例为其服务,性能低,不建议使用
2)建议在servlet类用不要使用实例变量,
如果用,使用synchornized进行同步
4)由容器调用destroy()方法,不需要考虑多线程
只被调用一次
clean shutdown(无损关机)
-------------------------------------------------------------------------------------------
容器实例化servlet的顺序:
1.当load-on-startup为负数的时候,servlet会在第一次访问的时候被实例化,默认情况下load-on-startup为-1;
2.当load-on-startup为正数的时候,在tomcat装载web应用的时候servlet就会被实例化;
3.load-on-startup为0的时候,最晚被实例化;
4.load-on-startup>0的时候,值越小就越早被实例化;
-------------------------------------------------------------------------------------------
GenericServlet:重载有参的init()方法,调用无参的init()方法.无参的init()方法用于初始化程序.
-------------------------------------------------------------------------------------------
request范围:
java Servlets(一)
最新推荐文章于 2024-05-08 23:46:18 发布