与平台的无关性。
动态页面与静态页面分离。
Tomcat是一个JSP引擎(统一管理并运行jsp的web应用程序)。
安装了JSP引擎的计算机被称为JSP服务器。
测试Tomcat是否能启动成功:打开bin/startup.bat后,输入localhost:8080(或者127.0.0.1)
修改Tomcat端口:打开conf/server.xml,修改Connector标签下的port
当修改为80时,网址可以不输入“:80”(80是http默认端口)
部署jsp项目:将整个工程文件放入webapps下
访问jsp项目:localhost:8080/工程名/jsp名
当单个的jsp放在Root目录下时,可以不用输入包名直接访问,即localhost:8080/jsp名
可以在conf/server.xml下修改jsp目录而不用放在webapps下
<Context path="路径名" docBase="项目的绝对路径" debug="0" reloadable="true"/>
jsp引擎把jsp页面转译为java文件,java文件通过编译后生成字节码文件(.class),用字节码文件响应用户需求。
当多用户访问同一jsp时,Tomcat服务器会为每一个用户开一个线程。
1.处理html标记符号并显示
2.处理jsp标记
3.处理“<%”、“%>”之间的java程序片并显示
1.普通的HTML标记符
2.JSP标记
3.变量、方法<%! %>(定义的变量与方法在整个jsp内都有效(全局变量、全局方法))
4.java程序片<% %>(定义的变量为jsp页面的局部变量)
5.java表达式<%= %>("<%="是一个完整的符号,以字符串形式返回)
HTML注释:<!-- 注释内容 -->
JSP注释:<%-- --%>
多种属性:<%@ page 属性1="XXX" 属性2="XX" ...%>
单条属性:<%@ page 属性="xxx" %>
用HTML解析器执行:<%@ page contentType="text/html;charset=UTF-8"%>
用本地MS-word执行:<%@ page contentType="application/msword" %>
默认值:"text/html ; charset=ISO-8859-1",不允许多次给contentType指定不同的值!
<%@ page language="java" %>
多个import:<%@ page import="XXX", "XXX" %>
单个import:<%@ page import="XXX" %>
JSP页面默认import属性:"java.lang.*"、"javax.servlet.*"、"javax.servlet.jsp.*"、"javax.servlet.http.*"
<%@ page session="true/false" %>(true时可以使用session)
eg:<%@ page buffer= "24kb" %>
当该值为false时,如果out缓存区填满,就会出现缓存溢出异常。
当buffer的值为none时,autoflush只能是true。
若isThreadSafe为false时,其他用户只能排队等待。
<%@ page info= "we are students" %>
调用getServletInfo()
<%@ page ErrorPage="true"%>
<%@ page isErrorPage="true"%>
<%@ include file= "文件的URL " %>
<jsp:include page= "文件的URL"/>
或者 <jsp:include page= "文件的URL">
param子标记
</jsp:include>(将param的值传给文件里)
<jsp:param name= "名字" value= "指定给param的值"/>
<jsp:forward page="要转向的页面" />
或
<jsp:forward page="要转向的页面" >
param子标记
</jsp:forward> (将param的值传到页面)
信息编码:request.setCharacterEncoding("UTF-8");
getProtocol():获取用户向服务器提交信息所使用的通信协议
getServletPath():获取用户请求的JSP页面文件的目录。
getContextPath():获取用户请求的当前Web服务目录
getRemoteAddr():获取用户的IP地址。
getRemoteHost():获取用户机的名称(如果获取不到,就获取IP地址)
getServerName():获取服务器的名称
getServerPort():获取服务器的端口号
<form action= “JSP页面” method="get/post">
提交手段
</form>(用request.getParameter()获取)
使用get方法提交的信息会在提交的过程中显示在浏览器的地址栏中
post方法提交的信息不会显示在地址栏中
提交的内容可以是文本框、列表、文本区。
<input type="输入对象的GUI类型" name= "名字"/>
文本框text:<input type="text" name="me" value="hi"/>
单选框radio:<input type="radio" name="rad" value="red" checked="java" />
复选框checkbox:<Input type="checkbox" name= "ch" value="pink" checked="java" />
(多个选项可以采用相同name和type但value不同的方式)
口令框password:<input type= "password" name= "me" size= "12" maxlength="30"/>
隐藏hidden:<input type= "hidden" name="h" value= "123"/>
提交submit:<input type= "hidden" value= "123"/>
重置reset:<input type="reset"/>
<select name="myName" size=""/>
<option value="item1"/>
<option value="item2"/>
…
</select>
<option>是子标记,size是同时可见的数目
<table>
<tr width="该行的宽度">
单元格中的数据th>
单元格中的数据td>
tr>
table>
<tr> tr>定义表格的一个行。
<th>或<td>标记定义这一行中的表格单元。
<th>定义的单元着重显示,<td>称为普通单元,不着重显示。
< image >
<image src="图像文件的URL" >描述文字</image>
可以用width和 height属性调整宽高
< embed >(播放音频)
<embed src="音乐或视频文件的URL" >描述文字</embed>
autostart:音乐或视频文件传送完毕后是否立刻播放(默认为false)
loop:循环次数(-1则无限循环)
width、height:播放器宽和高
超链接
<a href=链接的页面地址?参数1=串值1&参数2=串值2&...&参数n=串值n >文字说明</a>
(串值中不能有汉字!)
response对象(服务器->用户,封装了对用户请求的动态响应)
动态响应contentType
利用setContentType(String s)来改变。
取值:text/html、text/plain、image/gif等。
当contentType改变时,JSP会根据新的类型将jsp页面输出结果返回
HTTP文件头(动态)
HTTP文件头可以用来禁用缓存、设置页面自动刷新和定时跳转网页等。
addHeader(String head,String value)
setHeader(String head,String value)
如果已有相关文件头则会覆盖。
response重定向(无参数跳转页面)
response.sendRedirect(URL url)
response状态行
1yy(1开头3位数):实验性质。
2yy:请求成功。
3yy:请求满足之前应采取进一步行动。
4yy:无法满足请求(404表示请求页面不存在)
5yy:服务器出现问题(500表示服务器内部发生错误)
一般不需要修改状态行,服务器会自动响应发送对应状态码。
可以用response.setStatus(int n)改变状态行。
session对象(可以再多个jsp页面反复使用)
对象id
每个session都被分配了一个String类型的id号,id会放在用户Cookie和服务器中,形成一一对应。
用户在访问web服务目录期间,服务器会给该用户分配一个session(用户会话),可以在各个页面使用它,且不同用户session不同。
URL重写(用户不支持Cookie时可以使用,保证session唯一性)
当用户从一个页面重新连接到一个页面时,通过向这个新的URL添加参数,把session对象的id传带过去
可以使用encodeURL()或者encodeRedirectURL()
String str=response.encodeRedirectURL(“second.jsp”);
存储/读取数据
存取:public void setAttribute (String key,Object obj)
(value可以是任意object)
读取:public Object getAttribute(String key)
生存期限
使用session.invalidate()使session无效
关闭服务器时session也会消失
如果用户一段时间未发送请求也会session失效
(默认30分钟,可以通过setMaxInactiveInterval(int interval)来修改)
application对象(所有用户共享,ServletContext实例)
服务器的启动与关闭决定其生命周期
常用方法
存储:public void setAttribute(String key ,Object obj)
读取:public Object Attribute(String key)
out对象(输入流,javax.servlet.jsp.JspWriter)
out.print();
out.println();
out.newLine();
out.flush();//清空缓冲区
pagecontent(获取页面out、request、reponse、session、application 等对象)
pageContext对象的创建和初始化都是由容器(Tomcat)来完成的
config(取得服务器的配置信息)
pageConext的getServletConfig() 方法可以获取一个config对象。
Servlet 初始化时,容器把某些信息通过config传递给这个 Servlet。
page(类似于this指针)
page 对象代表JSP本身,只有在JSP页面内才是合法的。
exception(显示异常信息)
只有在包含 isErrorPage=“true” 的页面中才可以被使用,
四、JavaBean
编写、使用Javabean
特点
1.可以实现代码的重复利用。
2.易编写、易维护、易使用。
3.可以在任何安装了Java运行环境的平台上的使用,而不需要重新编译。
命令规则
1.有getter和setter方法
2.boolean类型的成员变量可以用"isXXX"
3.构造方法要有public、无参数
保存javabean的字节码(.class文件)
在\WEB-INF\classes\包名\类名中(可能需要自己手动创建classes文件夹)
创建bean(JSP动作标记:useBean)
<jsp:useBean id="bean的名字" class="创建beans的字节码" scope="application/session/page/request"/>
//scope是生命周期。
//page:当前页面
//request:request期间
//session:session期间
//application:application期间
bean加载原理
JSP引擎根据JSP动作标记给出的bean的id,以及scope,查找JSP引擎内置pageContent对象中是否含有这样的bean。
如果bean存在,就分配给用户;如果不存在,就在字节码中创建。
获取、修改beans的属性
使用getProperty、setProperty方法(前提是必须要有对应的getter和setter方法)
<jsp:getProperty name="id" property="bean属性" />
等价于对应id的javabean.getXXX().
<jsp:setProperty name=“id" property="bean的属性" value= "表达式或者字符串"/>
//property="*"时表示所有属性
//可以不写value,写param="XXX" 表示 value=<%=request.getParameter("XXX")%>
beans的辅助类(用import引入JDK提供的类或自己写的类)
五、Java Servlet(在服务器创建能响应用户请求的对象)
部署、创建与运行
javax.servlet.http包在tomcat的lib/servlet-api.jar中,使用时请导入或者放到jdkXXX/jre/lib/ext下。
servlet的类就是javax.servlet.http包中的HttpServlet类。
编写web.xml
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>myservlet.control.Example5_1_Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/lookHello</url-pattern>
</servlet-mapping>
1.两个servlet-name要一样
2.servlet-class就是“包名.servlet名”
3.url-pattern就是链接,访问时的网址就是http://localhost:8080/url-pattern
运行时,servlet会被编译为字节码文件,利用web.xml,用户就可以使用servlet
传递参数
servlet名?参数1=值1&参数2=值…参数n=值
那servlet内就可以利用request.getParameter(参数名)来获取这些对应的值
eg:http://127.0.0.1:8080/ch5/lookHello?moon=loveliness
工作原理
servlet数HttpServlet类的子类的一个实例,由服务器创建并初始化。
当多个用户请求同一个servlet时服务器会为每个用户启动线程而不是进程(互不干扰,且效率更高)
生命周期
1.初始化servlet。第一次被加载时会调用init()方法,只会调用一次。
public void init(ServletConfig config) throws ServletException
2.响应请求时,调用service方法。
public void service(HttpServletRequest request HttpServletResponse response) throw ServletException,IOException
3.服务器关闭时,调用destroy()方法,关闭servlet。
public destroy()
通过JSP页面访问servlet
通过表单传递数据
1.利用