(个人复习用)jsp web开发重点(待补充)
目录
- 一、JSP简介(Sun公司开发)
- JSP特点
- Tomcat 相关
- JSP原理
- 二、JSP语法
- JSP页面组成
- JSP注释
- JSP指令标记
- page(可以不放在开头!只是出于可读性)
- contentType(响应类型、字符编码)
- language(JSP使用的脚本语言)
- import(声明包、类)
- session(是否需要session,默认是true)
- buffer(out的缓冲区大小,默认8kb,也可以设置为none,即不使用)
- autoflush(out缓冲区被填满时是否自动刷新,默认为true)
- isThreadSafe(是否可多线程访问,默认为true)
- info(为jsp准备一个常用且经常修改的字符串)
- errorPage(若该页面有exception则显示,默认是false)
- isErrorPage(其他 JSP 页面的错误页面,默认是false)
- include(静态插入文件,不会被编译器执行)
- JSP动作标记
- include动作标记(动态插入文件,运行时才将文件加入,会被编译器执行)
- param 动作标记(name-value,类似map)
- forward 动作标记(跳转页面)
- useBean动作标记(创建并使用JavaBean)
- JSP脚本元素
- 变量、方法<%! %>(定义的变量与方法在整个jsp内都有效(全局变量、全局方法))
- java程序片<% %>(定义的变量为jsp页面的局部变量)
- java表达式<%= %>("<%="是一个完整的符号,以字符串形式返回)
- 三、JSP内置对象(不需要声明就可以使用)
- request对象(用户->服务器,封装用户提交信息)
- HTML标记
- < form >
- < input >
- < select > < option > 下拉列表
- < textArea >
- < table >
- < image >
- < embed >(播放音频)
- 超链接
- response对象(服务器->用户,封装了对用户请求的动态响应)
- 动态响应contentType
- HTTP文件头(动态)
- response重定向(无参数跳转页面)
- response状态行
- session对象(可以再多个jsp页面反复使用)
- 对象id
- URL重写(用户不支持Cookie时可以使用,保证session唯一性)
- 存储/读取数据
- 生存期限
- application对象(所有用户共享,ServletContext实例)
- 常用方法
- out对象(输入流,javax.servlet.jsp.JspWriter)
- pagecontent(获取页面out、request、reponse、session、application 等对象)
- config(取得服务器的配置信息)
- page(类似于this指针)
- exception(显示异常信息)
- 四、JavaBean
- 编写、使用Javabean
- 特点
- 命令规则
- 保存javabean的字节码(.class文件)
- 创建bean(JSP动作标记:useBean)
- bean加载原理
- 获取、修改beans的属性
- beans的辅助类(用import引入JDK提供的类或自己写的类)
- 五、Java Servlet(在服务器创建能响应用户请求的对象)
- 部署、创建与运行
- 传递参数
- 工作原理
- 生命周期
- 通过JSP页面访问servlet
- 通过表单传递数据
- 通过超链接访问
- 共享变量(用户共享servlet的成员变量)
- doGet和doPost
- 重定向与转发
- 使用session
- 六、MVC模式
- MVC模式介绍
- 模型的生命周期与视图更新
- request、session、application周期的javabean
- 七、JSP中使用数据库
- MySQL数据库管理系统
- JDBC(提供访问数据库的API)
- 连接MySQL数据库
- mysql语句相关
- 用结果集、非结果集操作数据库中的表(ResultSet)
- 预处理语句(PreparedStatement)
- 优点
- 使用通配符(用?代替字段值)
- 事务(commit,一次性处理多个sql)
- **事务四大特性(ACID)**
- 常见数据库连接
一、JSP简介(Sun公司开发)
JSP特点
与平台的无关性。
动态页面与静态页面分离。
Tomcat 相关
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引擎把jsp页面转译为java文件,java文件通过编译后生成字节码文件(.class),用字节码文件响应用户需求。
当多用户访问同一jsp时,Tomcat服务器会为每一个用户开一个线程。
1.处理html标记符号并显示
2.处理jsp标记
3.处理“<%”、“%>”之间的java程序片并显示
二、JSP语法
JSP页面组成
1.普通的HTML标记符
2.JSP标记
3.变量、方法<%! %>(定义的变量与方法在整个jsp内都有效(全局变量、全局方法))
4.java程序片<% %>(定义的变量为jsp页面的局部变量)
5.java表达式<%= %>("<%="是一个完整的符号,以字符串形式返回)
JSP注释
HTML注释:<!-- 注释内容 -->
JSP注释:<%-- --%>
JSP指令标记
page(可以不放在开头!只是出于可读性)
多种属性:<%@ page 属性1="XXX" 属性2="XX" ...%>
单条属性:<%@ page 属性="xxx" %>
contentType(响应类型、字符编码)
用HTML解析器执行:<%@ page contentType="text/html;charset=UTF-8"%>
用本地MS-word执行:<%@ page contentType="application/msword" %>
默认值:"text/html ; charset=ISO-8859-1",不允许多次给contentType指定不同的值!
language(JSP使用的脚本语言)
<%@ page language="java" %>
import(声明包、类)
多个import:<%@ page import="XXX", "XXX" %>
单个import:<%@ page import="XXX" %>
JSP页面默认import属性:"java.lang.*"、"javax.servlet.*"、"javax.servlet.jsp.*"、"javax.servlet.http.*"
session(是否需要session,默认是true)
<%@ page session="true/false" %>(true时可以使用session)
buffer(out的缓冲区大小,默认8kb,也可以设置为none,即不使用)
eg:<%@ page buffer= "24kb" %>
autoflush(out缓冲区被填满时是否自动刷新,默认为true)
当该值为false时,如果out缓存区填满,就会出现缓存溢出异常。
当buffer的值为none时,autoflush只能是true。
isThreadSafe(是否可多线程访问,默认为true)
若isThreadSafe为false时,其他用户只能排队等待。
info(为jsp准备一个常用且经常修改的字符串)
<%@ page info= "we are students" %>
调用getServletInfo()
errorPage(若该页面有exception则显示,默认是false)
<%@ page ErrorPage="true"%>
isErrorPage(其他 JSP 页面的错误页面,默认是false)
<%@ page isErrorPage="true"%>
include(静态插入文件,不会被编译器执行)
<%@ include file= "文件的URL " %>
JSP动作标记
include动作标记(动态插入文件,运行时才将文件加入,会被编译器执行)
<jsp:include page= "文件的URL"/>
或者 <jsp:include page= "文件的URL">param子标记
</jsp:include>(将param的值传给文件里)
param 动作标记(name-value,类似map)
<jsp:param name= "名字" value= "指定给param的值"/>
forward 动作标记(跳转页面)
<jsp:forward page="要转向的页面" />
或
<jsp:forward page="要转向的页面" >param子标记
</jsp:forward> (将param的值传到页面)
useBean动作标记(创建并使用JavaBean)
JSP脚本元素
变量、方法<%! %>(定义的变量与方法在整个jsp内都有效(全局变量、全局方法))
java程序片<% %>(定义的变量为jsp页面的局部变量)
java表达式<%= %>("<%="是一个完整的符号,以字符串形式返回)
三、JSP内置对象(不需要声明就可以使用)
request对象(用户->服务器,封装用户提交信息)
信息编码:request.setCharacterEncoding("UTF-8");
getProtocol():获取用户向服务器提交信息所使用的通信协议
getServletPath():获取用户请求的JSP页面文件的目录。
getContextPath():获取用户请求的当前Web服务目录
getRemoteAddr():获取用户的IP地址。
getRemoteHost():获取用户机的名称(如果获取不到,就获取IP地址)
getServerName():获取服务器的名称
getServerPort():获取服务器的端口号
HTML标记
< form >
<form action= “JSP页面” method="get/post">提交手段
</form>(用request.getParameter()获取)
使用get方法提交的信息会在提交的过程中显示在浏览器的地址栏中
post方法提交的信息不会显示在地址栏中
提交的内容可以是文本框、列表、文本区。
< input >
<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 > < option > 下拉列表
<select name="myName" size=""/><option value="item1"/><option value="item2"/>…
</select>
<option>是子标记,size是同时可见的数目
< textArea >
< table >
<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.利用