Servlet_note
2015/8/24
- Web项目目录结构:总目录my,中有WEB-INF目录,中有classes、lib两目录和web.xml文件。classes保存编译好的java文件,lib保存库文件,web.xml为此web app的配置文件。
- 为与tomcat连接,classes中的java文件需要引入tomcat/lib中的servlet-api.jar。
- 用户访问时,输入网址后,web.xml中相关语句将网址与相关java文件连接;
<!--相同name的servlet标签与servlet-mapping标签对应,用户访问url-pattern中的网址,servlet-class中的java文件起作用。name随便起,url-pattern起始为斜杠/,sevlet-class为classes目录中class文件的名字。一个servlet可对应多个servlet-mapping-->
<servlet>
<servlet-name>myfirstservlet</servlet-name>
<servlet-class>HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myfirstservlet</servlet-name>
<url-pattern>/HelloWorldServlet</url-pattern>
</servlet-mapping>
java文件中为一个extends HttpServlet的类,含有doGet或doPost等方法(用于处理用户请求)方法有用户请求与服务器应答两个参数,接受请求,做出应答。
2015/8/25
- WEB_INF中的classes相当于java的classpath,里面的java的class文件要有与之所在包对应的目录结构。
- 为使页面支持中文,需要在传输数据之前resp.setContentType("text/html;charset=gbk");
- servlet的生命周期:classLoader:加载class;
new:实例化servlet,在第一次用户请求此servlet时;
init(ServletConfig):实例化后,执行它,仅在实例化时执行一次,为servlet中的方法;
service doGet…:处理请求,每一个用户的请求,在多线程中执行,各线程均调取上面已在第一次时实例化出的对象,不新实例化;
destroy():最后会退出。
整个过程中只有一个实例化出的对象,init()只执行一次。
所以不要在servlet中设计成员变量,否则不同用户只能有同一个成员变量。
2015/8/26
- 地址栏中输入htm文件地址(/ThreeParams.htm),则浏览器显示htm展示的页面。htm文件中可设置跳转,如下。按“提交“按钮,参数被提交到req对象中,页面跳转至(/ThreeParams),接下来执行xml,class文件。
<form id="form1" name="form1" method="post" action="ThreeParams">
<table width="343" border="1">
<tr>
<td width="92">param1</td>
<td width="94"><input name="param1" type="text" id="param1" /> </td>
</tr>
<tr>
<td> </td>
<td><label>
<input type="submit" value="提交" />
</label></td>
</tr>
</table>
</form>
- 也可以地址栏中输入/ThreeParams,则直接-xml-class,此时req的参数为空。
2015/8/27
- Cookie分两种,没生命周期的,有生命周期的;没生命周期的仅在此窗口和子窗口有效,有生命周期的在生命周期内一直存在。
- 父路径设置的Cookie子路径可以读取,子路径的父路径不能读取,同目录下可以;/servlet/SetCoolies中设置的,/ShowCookies中不能读取,反之可以。(路径只是URL,写在web.xml中的servlet-map,和class所在的包无关)
- form
form提交中action的路径可以为虚拟路径,
也可以为绝对路径,/代表http://127.0.0.1/
web.xml
web.xml中url-pattern为webapplication根路径,/代表http://127.0.0.1/Test/。
- jsp中 <%!..%>中声明的变量为servlet的成员变量(可用于访问次数计数器等作用),方法为类的方法;
<%...%>(没有叹号)中声明的变量为类似doGet()方法的_jspService()方法的局部变量,声明方法将出错,因为方法中不能再定义方法。
2015/8/28
- html的注释<!-->里含有的jsp代码(<%>)会正常运行。<!-->的内容会传到客户端html页面,为正常的html注释。所有的jsp代码均不会在客户端显示,只在服务器端运行。
- jsp中的out.println()表示在html页面中输出,System.out.println()表示在服务器的标准输出上输出。
- jsp中的变量是存在于服务器中的,不能直接在javascript中使用,因为javascript是客户端中的语句,这点要注意。所以jsp变量需要被html调用时,全是out.println(),而不是直接写。
- jsp编译指令<%@... > 在编译时发生作用,包含三种,page、include、taglib。
page:<%@page 属性=”值”%> 说明jsp程序的有关信息,如import、extends、是否可用session、页面编码、出错后链接到哪个页面;
include(静态包含):<%@include file=”fileURL”%> file为jsp文件,此条命令相当于把指定jsp文件中的内容取代这条指令,两个jsp文件将整合为一个。此命令不能为file传参数,”fileURL?name=val”是错的。
taglib:以后补充。
5. jsp动作指令<jsp:…>
include:<jsp:include page=”name.jsp”>
<jsp:param name=”name1” value=”val1”>
<jsp:param name=”name2” value=”val2”>
</jsp:include>
|
|
静态包含 |
动态包含 |
|
编译时间 |
与父文件一起编译 |
运行到它时再编译 |
|
是否生成独立class |
与父文件结合生成一个父文件名称的java及class |
独立java及class |
|
可否传参数 |
不能单独传参数 |
可传参数,其request含有父文件request的参数及单独传的参数。 |
|
调用方式 |
直接在父文件java中的_jspService方法中加入相关语句 |
父文件java调用一个方法,指定动态包含的jsp文件名,并传入父文件的req等参数 |
forward:<jsp:forward page=”name.jsp”>用于转到某个页面,与动态包含一样可传参数且包含父文件的参数,有独立的java及class,但forward后的语句不会继续执行。另它与response.sendRedirect(“name.jsp”);需要区分,sendRedirect是由response传给客户端,客户端再连到新地址,而forward是服务器内部转到;且sendRedirect后的语句还能执行,而forward是阻断式的:
|
Sendredirect |
Forward |
|
是不同的request |
虽然是不同的对象,但是,可以取到上一个页面的内容 |
|
send后的语句会继续执行,除非return |
forward后的语句不会继续发送给客户端 |
|
速度慢 |
速度快 |
|
需要到客户端的往返,可以转到任何页面, |
服务器内部转换, |
|
地址栏有变化 |
地址栏没有变化 |
|
可以传参数,直接写在url后面 |
可以传参数 |
|
/代表的是http://127.0.0.1/ <%response.sendRedirect("/test/ServletToJSP");%> <form action="/test/ServletToJSP"> <a href="/test/ServletToJSP">test</a> |
/代表的是http://127.0.0.1/test webapp地址 this.getServletContext().getRequestDispatcher ("/servlet_jsp/ServletUseJsp.jsp") 并且只能以/开头 |
useBean: <jsp:useBean id=”实例名” class=”类名”>。useBean的scope,page只在当前此html页面有效;request相当于new出的是request的attribute,request不变则均有效,包含及forward均不变;session相当于new出session的attribute,session同理于cookie;application相当于new出application的attribute。
2015/8/30
- eclipse连接数据库步骤(连接oracle为例):
1)
将JDBC的jar包引入;
2)
Class.forName(“oracle.jdbc.driver.OracleDriver”);或new
oracle.driver.OracleDriver();
3)
Connection conn =
DriverManager.getConnection
(“jdbc:oracle:thin:@192.168.0.1:SXT:1521”,
“scott”, “tiger”);
4)
Statement stmt =
conn.createStatement(); 创建语句对象
5)
ResultSet rs =
stmt.executeQuery(“select * from dept”); 通过具体语句获得结果集合,rs类似于iterate,rs.next()返回boolean值,rs.getString(String
columnName)以String类型拿到元素
6)
rs.close(); stmt.close();
conn.close();
Servlet_note的更多相关文章
随机推荐
- appium 常用API使用总结!
将常用函数进行适用总结,后期在使用的过程中直接查找调用即可 获取界面属性.控件属性 1.current_activity:获取activity名称 device.current_activity 2. ...
- FPGA学习笔记(七)——FSM(Finite State Machine,有限状态机)设计
FPGA设计中,最重要的设计思想就是状态机的设计思想!状态机的本质就是对具有逻辑顺序和时序规律的事件的一种描述方法,它有三个要素:状态.输入.输出:状态也叫做状态变量(比如可以用电机的不同转速作为状态 ...
- 学习笔记02(随便看看mybatis源码)
两个很有名的持久层hibernate和mybatis应该很熟悉不过了,两者最大相同点是底层都是对jdbc的封装,最大的不同点是前者是自动生成sql语句,后者是需要我们在映射文件中写出sql. 其实从以 ...
- 我们为什么要搞长沙.NET技术社区(二)
我们为什么要搞长沙.NET技术社区(二) 某种意义上讲,长沙和中国大部分内地城市一样,都是互联网时代的灯下黑.没有真正意义上的互联网公司,例如最近发布的中国互联网企业一百强中没有一家湖南或者长沙的公司 ...
- C# 替换Word文本—— 用文档、图片、表格替换文本
编辑文档时,对一些需要修改的字符或段落可以通过查找替换的方式,快速地更改.在C# 在word中查找及替换文本一文中,主要介绍了在Word中以文本替换文本的方法,在本篇文章中,将介绍如何用一篇Word文 ...
- 解决小米手机USB安装apk时AS报错:INSTALL_FAILED_USER_RESTRICTED
今天,直接用AS在小米手机上运行安装的时候总是报错:INSTALL_FAILED_USER_RESTRICTED,于是乎,通过以下方式解决: 在开发者选项将USB安装打开,然后,哈,解决了.记录一下.
- Mysql使用中文字段排序的实现--order by
在处理排序规则的时候,有时候我们会需要选择用一些中文字段来排序,实现我们在工作中的需求,下面是在处理排序的时候,适用的方式展示. SELECT t.lawcheckcolumnid AS id,t.c ...
- Kafka系列2-producer和consumer报错
1. 使用127.0.0.1启动生产和消费进程: 1)启动生产者进程: bin/kafka-console-producer.sh --broker-list 127.0.0.1:9092 --top ...
- 【死磕 Spring】----- IOC 之 注册 BeanDefinition
原文出自:http://cmsblogs.com 获取 Document 对象后,会根据该对象和 Resource 资源对象调用 registerBeanDefinitions() 方法,开始注册 B ...
- javascript中apply、call和bind的区别及方法详解
文章目录 apply.call apply.call 区别 apply.call实例 数组之间追加 获取数组中的最大值和最小值 验证是否是数组(前提是toString()方法没有被重写过) 类(伪 ...