jsp
HelloWorld
HelloWorld项目
- 配置好tomcat,设置好编码格式
- 创建web project
- 创建helloworld.jsp
- 部署项目
JSP基本构成
- 指令元素
- 脚本元素
- 动作元素
- 注释元素
指令元素语法
#指令元素语法
#directive: 指令,共3种page、include、taglib
<%@ directive { attr = "value"} %>
#############################################################
#page
<%@ page
language=""
extends=""
import=""(常用)
session=""
buffer=""
autoFluse=""
isThreadSafe=""
info=""
errorPage=""(常用)
isErrorPage=""(常用)
contentType=""(常用)
pageEncoding=""(常用)
isElIgnored=""
%>
其中常用的:
<%@ page import="java.util.*, java.sql.*" %>
<%@ page errorPage="error.jsp" %> # 当没有指定errorPage时,浏览器直接显示错误信息。若指定了errorPage属性,则回复指定的页面信息
<%@ page isErrorPage="true" %> # 指定当前页面是否是一个错误处理页面
<%@ page contentType="test/html; charset=utf-8" %> #指定服务器发送给客户端时的MIME类型和字符集编码。效果:浏览器会根据contentType设置的字符集显示信息。如果contentType没有设置字符集,则使用pageEncoding属性的值,最好设置contentType的值
<%@ page pageEncoding="utf-8" %> #指定jsp文件本身的编码,jsp容器会根据设定读取jsp文件,之后转成utf-8 java源码,如果设置错误或没有设置,会乱码。如果pageEncoding没有设置,但contentType设置了会使用contentType的值
#############################################################
#include
#指定文件包含进当前页面,可以使java文件也可以是其他类型的文件。注意:file指定的是相对路径
<%@ include file="relativeURLspec" %>
注意:
1. 由于include是静态方式引入文件(原封不动),所以插入的文件不能使用<html></html>语句,否则会与jsp文件有相同的标记而出错
2. 因为可以相互访问,所以因避免变量和方法重名产生冲突
3. 如果file的值是 / 开头,则表示从服务器根目录找。若是文件开头,则从当前目录下找
脚本元素
共3种
- 声明
- jsp表达式
- 脚本代码
#声明的语法
#可以定义变量、方法、类, 注意是全局变量
<%! java语句 %>
注意:JSP容器中通常只有一个servlet类的实例,如果有多个客户并发访问,实例变量就可能被并发访问,这样会导致数据的不同步。尽可能少用`<%! %>`声明实例变量
#############################################################
#jsp表达式
#表达式执行结果将返回到客户端
<% = expression %>
#例1
<%= new java.util.Date() %>
#############################################################
#脚本代码
#注意是局部变量,和声明的标记只差!
<% java代码 %>
#例1
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
Date date = new Date();
%>
动作元素
#动作元素包含两种,一是jsp标准标记,二是自定义标记
#jsp的标记元素用来控制jsp页面
# 标准标记共20种(jsp 2.1),常用9种
<jsp: include >:在jsp页面执行过程中将包含页面的执行结果插入到当前页面的执行结果中,称为动态包含(常用)
<jsp: forward >:控制页面转发(常用)
<jsp: param >
<jsp: plugin >
<jsp: params >
<jsp: fallback >
<jsp: useBean >:用于获得JavaBean对象(常用)
<jsp: setProperty >:用于给javaBean对象设置属性值(常用)
<jsp: getProperty >:用于读取javaBean对象属性值(常用)
#############################################################
#include标记
#在jsp页面执行过程中将包含页面的执行结果插入到当前页面的执行结果中,称为动态包含
#语法1
<jsp: include page="relativeURL" flush="true|false"/>
#语法2
<jsp: include page="relativeURL" flush="true|false">
{<jsp:param.../>}*
</jsp:include>
#page: 指定包含资源的相对路径
#flush:指定当前jsp页面的已输出内容是否刷新到客户端
#############################################################
#forward标记
#例1 处理登录请求,并根据验证结果进行页面转发
<jsp:forward page="welcome.jsp" />
#例2
<jsp:forward page="welcome.jsp" >
</jsp:forward>
#############################################################
#param标记
#在include、forward、params标记中使用
#有2个属性, name、value
<jsp:forward page="welcome.jsp" >
<jsp:param name="msg" value="<%= msg %>" />
</jsp:forward>
#取数据
<%= request.getParameter("msg")%>
jsp注释
共3种情况:
<!-- -->
<%-- --%>
- 在<%%> 内部,使用正常的java注释
//或/* */
jsp内置对象
jsp隐含9个对象,作用:简化了页面开发
- page
- pageContext
- request(常用):封装了用户提交的信息
- response
- session
- aplication
- out(常用):用于向浏览器输出信息
- config
- exception
request
- 设置属性和获取属性
- 设置字符集编码
- 获取请求参数
- 获取请求行信息
- 获取请求头信息
- 获取网络信息
- 获取会话信息
- 获取请求分派对象
JavaBean
组件
是利用某种编程手段实现能完成特定功能的封装体,对使用者来说是一个有输入输出的黑匣子,实现了软件的复用
javabean:是一种风格可在开发工具中被可视化处理的可复用的软件组件
javabean特征
- 实现接口java.io.serializable
- javabean类提供一个无参数的构造函数
- javabean内的属性都应该声明为private
- javabean内的属性访问通过setXxx()和getXxx()方法操作
- javabean内访问属性的方法必须声明为public
javabean属性
- simple
- boolean
- index
#例1
public class Student implements java.io.Serializable{
private String name;
private boolean flag;
private String[] hobby;
//针对简单
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
//针对布尔
public boolean isFlag(){
return flag;
}
public boolean setFlag(boolean flag){
this.flag=flag;
}
//针对集合
public String[] getHobby(){
return hobby;
}
public void setHobby(String[] hobby){
this.hobby=hobby;
}
public void gethobby(int i){
return hobby[i];
}
public void setHobby(String h, int i){
this.hobby[i]=h;
}
//若有有参构造,则要手动加上一个无参数构造
public Student(){}
}
javabean相关动作标记
<jsp:userBean>
:用来创建一个javabean对象<jsp:getProperty>
:用来读取javabean中的属性值<jsp:setProperty>
: 用来设置javabean中的属性值
<jsp:useBean id="user" class="web.User" />
<jsp:setProperty property="*" name="user" />
<jsp:getProperty property="name" name="user" />
在jsp中创建javabean
共2种方式
<jsp:useBean id="user" scope="page" class="web.User" />
<% web.User user=new web.User %>
:使用嵌入的java脚本
区别:使用<jsp:useBean>
可以指定对象的作用域:page、request、session、application5tg
javabean举例
//例1
//在jsp页面内使用javabean
//首先定义一个javabean类User.java,然后在jsp页面中通过动作<jsp:usrBean>获得该对象的引用,设置和读取属性值
//例2
//开发登录功能为例,使用javaBean和不实用javaBean的区别
区别:将登录验证交给javaBean的方法去做
<%
if(user.login()){
%>
<jsp:forward page="success.jsp"/>
<%
}else{
%>
<%
<jsp:forward page="index.jsp"/>
<%
}
%>
EL表达式语言
单独笔记
JSTL标记库
单独笔记
Servlet
实例
servlet就是实现了特殊接口的Java类,可以生成动态的web页面,自MVC规范出现后,servlet仅作为控制器使用
<servlet-name>
是核心
servlet运行过程
内存中的srevlet实例默认只有一份
servlet编程接口
涉及:
- HttpServlet
- HttpServletRequest(请求接口)
- HttpServletResponse(响应接口)
- ServletContext(上下文接口)
- RequestDispatcher(请求分派接口)
servlet配置
在web.xml文件配置,需要2个标记
<servlet></servlet>
声明servlet类<servlet-mapping></servlet-mapping>
定义访问该servlet的url
#例1
<servlet>
<servlet-name>myLogin</servlet-name>
<servlet-class>包名.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myLogin</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
servlet在MVC模式中的应用
MVC模式
- 模型: 处理业务逻辑
- 视图:接收来自模型的更新
- 控制器:映射用户请求到模型
servlet应用
浏览器 + jsp + servlet + javaBean + 数据库
jsp充当视图
servlet是控制器
javaBean是模型
提交-> servlet-> javaBean -> jsp
过滤器和监听器
过滤器
可以截获客户端的请求,并根据多虑条件进行处理
过滤器接口
Filter:
FilterChain:声明过滤器链方法
FilterConfig:声明读取过滤器配置信息的方法
#Filter接口方法
void init(FilterConfig filterConfig)
void doFilter(ServletRequest request, ServletResponse response, FilterChain chaoin)
void destroy():web服务停止或重启时由容器调用此方法,以释放过滤器占用的资源
过滤器开发和配置
开发:
//实现Filter接口
public class MyFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
//过滤逻辑
}
public void init(FilterConfig arg0) throws ServletException {
//初始化代码
}
}
配置:
在<url-pattern>设置要拦截的资源,可以是具体的访问路径,也可以使用通配符(*.jsp , /action/* )
监听器
监听器对象可以在事件发生前、发生后事务处理
监听器接口
ServletContextListener:监听ServletContext对象的创建、销毁事件
ServletContextAttributeListener:监听Servlet上下文范围属性的增加、删除和修改事件
HttpSessionListenr
HttpSessionActivationListener
HttpSessionAttributeListener
HttpSessionBindingLister
ServerRequestLister
ServletRequestAttributeListener
#ServletContextListener接口
void contextDestroyed(ServletContextEvent arg0):通知正在监听的对象,ServletContext对象已经创建并初始化
void contextInitialized(ServletContextEvent arg0):通知正在监听的对象,ServletContext对象已经销毁
监视器开发和配置
开发:
创建类实现ServletContextListener接口
配置:
<listener>
<listener-class>包名.类名</listener-class>
</listener>
JDBC
单独笔记