📄 day01.txt
字号:
Servlet_day01 langna 2007-9-21 星期五
刘新福:
servlet 5天
jsp 5天
struts 4天
C/S 架构
B/S: Web
js: 运行在客户端的脚本;
构造交互式网页:
标签: input
select
textarea
动态网页:是由程序控制的;根据用户的不同而显示的内容不同;
servlet/jsp -- struts: jsp是一个简易的语法;
将jsp转换成servlet 发送过去;
struts是servlet的开源框架;
jdbc -- hibernate: pojo/javabean/value object;
hibernate是jdbc的开源框架;
学习: 多动手, 才能掌握住;
一, 课程概要:
1 , 基础知识; 1
2 , form表单的解析; 2
3 , servlet的生命周期; 1,2
4 , 访问资源;和jdbc和hibernate结合起来; 3
5 , servlet的维护持久化状态;cookie和session技术; 3, 4
6 , filter:过滤器 5
7 , listener:监听器 5
二, servlet 基础知识:
1, CGI: 公共网关接口程序; 基于http协议的, 运行在服务器端,web服务器的发起者是客户端;
CGI访问数据库;生成动态页面;
HTTP: serversocket/socket: serversocket(port)先启动,监听客户端的请求;
客户端 socket发送请求;访问CGI程序(基于进程的);
服务器给一个响应;
http是一次性连接的;非持续性的连接;
进程之间耗资源,并且进程之间通信没有线程间通信方便;
CGI是基于进程的,允许客户端执行服务器端的一个程序;
content-type:text/html : 头部信息,传递的信号;header;
url:统一资源定位; (协议)http://ip:port(80)/resource_path;
servlet 是module ; 运行在服务器中,增强了服务器的功能;
访问数据库;写一个程序并部署到服务器端;
webserver: 买一个, 或 用开源的;
2, 如何安装tomcat:
linux下:
将tomcat考到自己的主目录(/home/xjh0704)下;解压缩就是安装好了; (chmod 777 tomcat -R)
目录不要放的太深; 必须保证自己的操作系统中有jdk; tomcat只是一个webserver;没有带jvm;
在.bash_profile下:
JAVA_HOME=jdk的安装路径;
CATALINA_HOME=tomcat的安装路径;
path=$JAVA_HOME/bin:$CATALINA_HOME/bin
export JAVA_HOME CATALINA_HOME
window下:
环境变量:
新建一个CATALINA_HOME=d:\tomcat的安装路径不包括bin目录
在path中加上 %CATALINA_HOME%\bin
检验变量是否定义对了:
linux:(终端中)
echo $CATALINA_HOME
echo $JAVA_HOME
windows:(cmd中)
set catalina_home
set java_home
测试tomcat是否安装成功:
进入到tomcat安装目录下: 启动: bin /startup.sh 或 catalina.sh run /关闭:shutdown.sh
windows下是: startup.bat / 关闭:shutdown.bat
打开浏览器:输入 http://127.0.0.1:8080 或(localhost)
显示tomcat的主页就表示已经启动成功;
3, webapps/root 默认访问的就是这个root应用;
访问远程的应用: http://192.168.106.102:8080/admmes.html
ip地址可以和域名绑定起来;
在webapps中建立一个文件夹 , 就是一个应用; serv-app/WEB-INF(必须有这个目录)
WEB-INF/web.xml(必须有这个文件,合法的xml文件)
ISO-8859-1;
xsd : 跟dtd作用一样;
服务器要先关闭再启动,应用才会装载进来;
应用放在哪里: 应用 (serv-app 或子目录下)下,但是放到WEB-INF下,不能访问;这是受服务器保护的文件;
http://127.0.0.1:8080/serv-app/admmes.html
在应用中再建其他文件夹:js/img/style/等;
tomcat 根据环境变量找到安装目录,找到web-apps,
servlet 类 放到WEB-INF/classes 目录下;
看servlet文档:
tomcat-docs/servletapi/javax.servlet/javax.servlet.http
随便买一本servlet书看看,越薄越好;
三, 第一个应用:
1, javascript 是在客户端执行的,显示的时间是客户端的;
2,System.out.println("<html>");发字符串过去;命令行输出, js不认, 只认方法;
类要是有包的话必须将类放在目录结构下; 或者, javac DynamicHtml.java -d . ;放到当前目录下;
然后在当前目录下 java 包名.DynamicHtml(类名)
3,servlet 的api: servlet必须运行在webserver中,可以接受来自客户端的请求, 基于http协议;
apache-tomcat-5.5.20\webapps\tomcat-docs\servletapi\index.html
一个servlet必须有一个缺省构造器, 系统会调用,init(),service(),destroy();
在classpath上加上servlet-api.jar;
或在eclipse上配置library;
实现Servlet 接口,覆盖service方法;
{
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out.println("<html>");
out.println(new java.util.Date());
out.println("<html>");
}
写web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>servlet的名字</servlet-name> <time>
<servlet-class>servlet类全名</servlet-class> <com.tarena.serv.TimeServlet>
</servlet>
<servlet-mapping>
<servlet-name>servlet的名字(要和servlet标签中的相同)</servlet-name> <time>
<url-pattern>指定servlet相对于应用目录的虚拟路径名</url-pattern> </basic/time>
</servlet-mapping>
</web-app>
Servlet的调用过程:
1,用户通过浏览器向web服务器发送请求
http://serverip:port/apppath
2,服务器为用户定位资源
静态资源:/a.html /a/b.html (这里的路径是针对web应用文件夹目录)读文件并把内容发送到客户端
动态资源:解析web.xml定位Servlet类的名字
装载类(WEB-INF/classes|WEB-INF/lib/*.jar)
创建该对象的实例
Servlet ser=(Servlet)(Class.forName("servle的类名")).newInstance();
//我们写的Servlet一定要实现Servlet接口或者继承实现了Servlet接口的类
先构造器,init(),service(),
内存中同一时间只有一个servlet实例,只有一个被销毁后再创建新的实例;
servlet不是一个线程,而是工作在多线程中;
销毁时调用 destroy();
getServletConfig()/getServletInfo() 服务器不会调这两个方法;
3, HttpServlet继承了GenericServlet
继承HttpServlet时,只需要实现:
doGet() 服务于get请求;
doPost() 服务于post请求;
如果两种请求都需要服务的话,都实现就行;
也可以覆盖service方法;
再HttpServlet: doGet() , doPost() , service(HttpServletRequest,...) , service(ServletRequest,...)(这个是继承的)
创建一个HttpServlet实例时, 调过init()方法后, 会调用哪个方法?
service(ServletRequest,..)调用service(HttpServletRequest,...) ; 再 根据请求类型调用doGet或doPost
如果覆盖了service方法,就会服务于所有类型的请求;自己调用doGet或doPost;
4, webserver: apache web server ; sunone web server
支持java的都支持servlet ;
<url-pattern>/time(必须以/开头)</url-pattern>
今天对servlet有一个大概的理解就行,在以后的学习中逐渐理解和加深印象;
练习作业:
<h1>1</h1>
<h2>2</h2>
<h3>3</h3>
<h4>4</h4>
<h5>5</h5>
<h6>6</h6>
继承HttpServlet 就行;
public class HeadingServlet extends HttpServlet{
public void doGet(HttpServletRequest, HttpServletResponse) throws IOException,ServletException{
//子类不能比父类多抛异常,只能少抛;
response.setContentType("text/html");
PrinterWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>heading</title></head>");
out.println("<body>");
for(int i=1;i<=6;i++){
// out.println("<h"+i+" align=\"center\"> " +i +"<h" + i +">");
out.print("<h");
out.print(i);// h 和 i 之间不能换行;否则出不了效果
out.println(" align=\"center\"> ");
out.println(i);
out.print("<h");
out.print(i);
out.println(">");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -