- 浏览: 4092 次
- 性别:
- 来自: 重庆
文章分类
最新评论
JAVAWEB
目录
一、 JSP 1
二、 Servlet 11
三、 自定标签 16
四、 EL 16
五、 JSTL 17
六、 Listener 17
七、 Filter 17
七 WEB应用安全 17
八、 小知识 17
一、JSP
1.介绍
Jsp(java server page) 动态WEB网页。
2.注释
Html注释
<!-- Html注释 - ->
Jsp注释
<%-- Jsp注释 --%>
隐式注释生成的页面中不可见;
3.声明
<%@ page language=”java” contentType=”text/html;charset=utf-8” errorPage=”true/false” %>
<!doctype html>
<html>
<head>
<meta charsets=”utf-8” />
<title>newhtml</title>
</head>
<body>
Html文档体
</body>
</html>
4.输出jsp表达式
<!- - 表达式输出 - ->
<%=值/变量/%>
5.脚本
脚本是在JSP中嵌套java代码。
<%
java代码。
%>
6.指令
1)编译指令
Page指令
Page指令一般位于页面顶端,一个页面可以有多个page指令
<%page
[lang=”java”]
[extends=”package.class”]
[import=”包1,包2,……”]
[session=”true|false”]
[buffer=”true|false”]
[auto=”flush”]
[isThreadSafe=”true|false”]
[info=”text”]
[errorPage=”relativeURL”]
[contentType=”text/html;chatset=utf-8”]
[pageEncodeing=”UTF-8”]
[isErrorPage=”true|false”]
%>
说明:
Lang 选择语言
Extends jsp继承的父类,或实现的接口
Session 设置页面是否需要HttpSession
Buffer 指定缓存区的大小
AutoFlush 是否需要强制输出缓冲区的内容
Info jsp页面信息
errorPage 指定错误页面
include指令
静态包含,可以将一个外部文件页面嵌套到本页面中。
<%@ include page=”文件路径”%>
2)动作指令
Forward指令
Forward指令用于将页面响应转发到另外的页面
使用:
<jsp:forward page=”url ”/>
Inlucde 指令
Include动态包含,它不会导入被include页面的编译指令,仅仅将被导入的页面插入到本页面中。在使用时须要把falush设置为true
使用:
<jsp:include page=”url”/>
静态包含与动态包含的区别:
<jsp:include page=”” flush=true />它总是会检查所含文件中的变化,适用于包含动态页面,并且可以带参数,,表态包含用伪码实现,不会检查所含文件的变化,适用于包含表态页面<%@ include file=””%>
执行时的时机不同,动态include是在运行时把两个JSP合并,静态是在编译期合并,动态include在页面发生改变时能及时更新,而静态页面不会再次重新编译.
UseBean、setProperty、getProperty指令
用于操作javaBean 的设置值与取值
useBean
<jsp:useBean id=”name”class=”bean类路径”scope=”作用域”/>
作用域:page、request,session,application;
setProperty
给bean设置值;
<jsp:property name=”beanName”property=”属性名”value=”值”/>
getProperty
从bean中取值
<jsp:getProperty name=”beanName”property=”属性名”/>
Plugin指令
Plugin指令用于下载服务器端applet程序。
不推荐使用,
<jsp:plugin code="" codebase="" type="applet"></jsp:plugin>
Param指令
<jsp:include page=””/>
<jsp:forward page=””/>
<jsp:plugin code="" codebase="" type="applet"></jsp:plugin>
当与include结合使用时,param指令用于将参数传入被导入的页面中;
当与forward时,param用于将参数值传如入被转向的页面;
当与plugin时,将param传入页面中的javaBean实例或applet实例中
使用:
<jsp:param name=”name”value=”value”/>
7.内置对象
Application
对于整个Web应用有效,一旦JSP,Servlet将数据放入application中,该数据将可以被该应用下的其它JSP,Servlet访问。
让多个JSP,Servlet共享数据
JSP
一个JSP
<%
application.setAttribute(“name”,value);
%>
其它JSP
<%=application.getattribute(“name”)%>
Servlet
//存值与取值
ServletContext application=getServletConfig.getServeltContext();
Application.setAttribute(“name”,object);
Application.getAttribute(“name”);
获取web应用配置参数
Web.xml
<context-param>
<param-name>name</param-name>
<param-value>value</param-value>
</context-param>
//jsp获取值
<%=application.getInitParameter (“name”) %>
//Servlet获取值
ServletContext application=getServletConfig.getServletContext();
Application.getInitParameter (“name”);
Config
Config对象代表当前jsp配置信息,
Exception
简单实用
设置可能发生异常的页面,
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="error_exception.jsp"%>
指定错误页面。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage=”true” %>
对错误页面设置
Out
Out对象代表一个页面输出流,通常用于在页面上输出变量或常量值。
使用:
<%
out.print(变量/常量);
%>
pageContext
上下文对象,该对象主要用于JSP之间的共享数据。使用pageContext可以访问page request session application
获取其它内置对象
ServletRequest.getRequest();//request
ServetResponse.getResponse();//response
ServletConfig.getConfig();//config
ServletContext.getContext();//application
HttpSession.getSession;//session
使用:
<%
pageContext.setAttribute(“test”,”text”,pageContext.作用域);
pageContext.setAttribute(“test”,”value1”,pageContext.RQUEST_SCOPE);
out.println(pageContext.getAttributesScope(“test”));
%>
<%=pageContext.getAttribute(“test”)%>
对象
Request
Request对象封装着用户的一次请求,并且所封装的请求参数都被封装在request对象中,除此之外可代表本次请求范围,还可以操作request范围的属性和方法。
<%
Object value = Request.getParameter(“key”);
Out.println(request.属性或方法);
%>
Response
Response 代表服务器对客户端的响应。
去缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", -10);
响应类型
用于返回响应类型给用户
<%
Response.setcontentType(“mini头;响应编码”);
Response.setContentType(“imge/jpeg;chatset=utf-8”);
%>
<%@ page contentType=” imge/jpeg;chatset=utf-8”%>
重定向
<%
Response.sendRedirect(url);
%>
增加cookies
Cookies 通常用于记录表单信息。
<%
String value=”test”
Cookies test=new Cookes(“test”,value);
Test.setmaxage(60*60*7)(ms)
Response.addCookie(test);
%>
得到Cookies
<%
Cookies[] cookies=request.getCookies();
for(cookie :cookies)
{
//获取Cookies名为test的值
If(“test”.equals(cookie.getName()))
{
Out.print(cookies.getValue());
}
}
%>
Cookie中文处理
因为cookie不支持中文所以在使用前需要使用URLEncode编码。
获取cookie值使用URLDencode解码
Session
Session对象是一个非常有用的对象,这个对象代表一次会话,关闭浏览器结束会话,
HttpSesion 常用的两个方法
setAttribute(“key”,value) //设置名为就key的Session会话
getAttribute(“key”) // 获取指定名的session的会话
Page
二、Servlet
1.介绍
Jsp本质上就是一个servlet,
2.配置
Servlet3.0配置
在Servelt类中使用@WebServlet Annotation进行配置
通过web.xml文件中配置
WebServlet 支持常用属性
属性 是否必要 说明
asyncSupportted 否 指定Servle是否支持异步操作模式
displayName 否 指定该Servlet显示名
initParams 否 用于是否为Servelt配置参数
loadOnStartUp 否 用于将该Servlet配置成load-on-startup的servelt
Name 否 指定该Servlet名称
urlPatterns/value 否 这两个属性一样
使用前:
Servelt2.5配置
1、新建类并实现HttpServlet 重写相应的方法;
2、打开在WEB-INFO下的web.xml配置文件
在web-app节点下添加标签
<servlet>
<servlet-name>servelt名</servlet>
<servlet-class>类的路径<servlet-class>
</servlet>
//映射路径
<servlet-mapping>
<servlet-name>servlet名</servlet-name>
<url-pattern>请求路径</url-pattern>
</servlet-mapping>
3.生命周期
Servlet 里面的方法
Init();//初始化对象
Destory();//销毁对象
提交的方式:
Post() 用于响应客户端的POST请求
Get() 用于响应客户端的GET请求
Doput() 用于响应客户端的PUT请求
Dodelete() 用于响应客户端的delete请求
Service() 当没有GET 和 POST用于响应客户端的Service 请求
4.Load-on-startup
Load-on-startup元素或load-on-startup属性只能接受一个整形值,这个值越小越好,Servlet就越先实例化。
配置load-on-startup的两种方式
Servlet3.0配置
通过@WebServlet Annotion的loadOnStartUp属性
简单实用:
Servlet配置
<servlet>
<servlet-name>name</servlet>
<servlet-class>类路径<servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
5.访问servlet配置参数
配置Servlet时,还可以给servlet添加初始化参数,以实现提供更好的移值性。
Servlet3.0配置参数
@WebServlet(
//设置servlet名字
name=”test”,
//设置servlet请求路径
urlPatterns={”/test”},
//设置初始化参数 可以设置多个
initParams={
@WebInitParam(name=”key”,value=”test”)
})
Servlet配置参数
<servlet>
<servlet-name>name</servlet>
<servlet-class>类路径<servlet-class>
<init-param>
<param-name>key</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
在页面/servlet中取得参数:
<%
String key=config.getInitParameter(arg0);
%>
ServletConfig config = getServletConfig();
6.使用servlet作为控制器
用于控制视图( View ),
7.线程安全
Servlet是本身是一个线程不安全的
解决线程安全
在dopost 或doget 前加上synchronized
三、自定标签
自定义标签的作用就是不在JSP中写脚本
1.自定义标签(CustomTag)
使用步骤:
新建class 处理自定义标签
新建的类必须继承javax.servelt.jsp.tagxt.SimpleTagSupport;
在dotag 完成标签的功能
获取页面输出流
Writer out=getJsp().getOut();
获取属性
有属性的标签,使用Getters ,Setters 获取属性值。
获取标签体
StringWriter sw = new StringWriter();
getJspBody().invoke(sw);
新建*.tld文件,每个tld文件对应一个标签库,每个标签库可以对应多个标签。
<taglib 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-jsptaglibrary_2_0.xsd"
version="2.0">
<description>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version>
<short-name>SimpleTagLibrary</short-name>
<uri>/SimpleTagLibrary</uri>
<tag>
<name>标签名</name><!--必须- ->
<description>标签说明</description><!--可选 - ->
<tag-class>指定类的路径</tag-class><!—必须 - ->
<!- 指定标签体必须为空 - ->
<body-content>empty</body-content><!—必须 - ->
说明:
body-content:
Empty :指定标签体为空
Jsp :指定标签体可以是JSP脚本
Scriptless :不可心使用JSP脚本
Tagdependent :指定该标签是否支持动态属性
<!—给标签添加属性- ->
<attribute>
<name><name>
<required></required>
< fragment></ fragment>
</attribute>
说明:
attribute:
name : 指定属性名
required :是否必选
fragment :是否可以使用JSP脚本
</tag>
使用自定义标签
添加标签库
<%@ tag uri=”” prefix=”simple”%>
<simple:自定义标签名 属性=“值” >
标签体
</simple:自定义标签名 >
四、EL
EL的标识
禁用
isELIgnored="false"
使用
${变量}
${对象名.属性名}
${对象名[‘属性名’]} 属性名用双引号括起来,当属性名有下划线时采用这 种方式
属性范围
Page pageScope
Request requestScope
Session sessionScope
Application applicationScope
当不加 作用域Scope
${属性/变量}
默认是从小开始找
page request session application
当动态输出时使用
必须使用${对象名.属性名}
Empty
${empty expression/变量},null,””,0长度的集合或数组。
${not empty expression/变量} 取反
五、JSTL标签库
Jsp标记标签库(jsp standard tag library)
标签库uri :选择使用的标签库
标签名 :选择使用那个标签
导入标签库 :使用编译指令导入标签库,就是将标签库和指定的前缀联起来。
使用 :<%@ tag uri=”” prefix=”simple” %>
<simple:标签名 />
核心标签
Core:
<c:foreach>
<c:if>
<c:choose>
Function:
结合c标签使用
注意:
·Jstl1.1 jstl1.2区别
Jstl 1.2l只需要 导入一个包jstl 1.2.jar
Jstl 1.1 需要jstl 1.1.jar stand.jar
六、Listener
在WEB容器中 ,WEB应用内部会不断的发生各种事件,如web应用被启动, web应用被关闭。通常来说,这些web事件对开发者都是透明的。
常用的事件监听器的接口
ServletContextListener: 用于监听应用的启动和关闭
ServletContextAttributeListener 用于监听ServletContext(application)属性改变
ServletRequestListener 用于监听用户的请求。
ServletRequestAttributeListener 用于监听HttpRequest (request)范围内属性值的改变
HttpSessionListener 用于监听用户Session的开始和结束
HttpSessionAttributeListener 用于监听HttpSession(session)范围属性的改变
实现接口重写的方法
contextCreated :
contextDestroyed :
监听器的用途
监听用户上线与退出
显示在线用户
使用监听器
创建Listener类并实现 Listener接口
配置Listener
<listener>
<display-name>显示名</display-name> 可选
<description>说明</description> 可选
<listener-class>指定监听器的类路径</listener-class>
</listener>
注:配置Listener 应在filter 和 Servlet 前
七、Filter
Filter 可以认为是servlet的加强版,它主要用于对用户请求进行预处理,也可是
对HttpServletResponse进行后处理,是个典型的处理链
Filter的好处
在HttpServletRequest到达Servelt之前,拦截客户的HttpServletRequest
根据需要检查HttpServletRequst,也可以修改HttpServletRequest头和数据。
在HttpServletRequst到达客户端之前,拦截HttpServletResponse
根据需要检查HttpServletResponse, 也可以修改HttpServletRequest头和数据。
Filter的用途
用户授权 :根据请求过滤用户非法请求。
日志 :详细记录用户的操作
负责解码
改变XML内容
数据处理 :当出现违反党的关键字,使用(*)替换
可以拦截多个请求或响应 可以配置多个url- pattern
创建
创建Filter必须实现javax.Servlet.Filter接口,并实现相应的方法。
Init() //初始化
Destroy() //销毁
doFilter() //过滤逻辑
其中doFilter是完成过滤器链 当后面没有过滤器是将找Servlet
配置
配置filter时,应在Servlet前
<filter>
<filter-name>name</filter-name>
<filter-class>类路径</filter-class>
<init-param>
<param-name>初始化参数<param-name>
<param-value>初始化参数值</param-value>
注:可以配置多个 ;
</param>
</filter>
filter映射
<filter-mapping>
<filter-name></filter-name>
<url-pattrn></url-pattrn>
注:url-pattrn可以添加多个拦截的url
</filtermapping>
使用URL Rewrite 实现网站的伪静态
七 WEB应用安全
八、小知识
防盗链:
判断当前是否有用户登录,否认跳转到登陆页面
<%
Object object=session.getSession(“user”);
If(object==null)
{
Response.sendRedrict(“login.jsp”);
}
%>
数据库连接池:
C3P0
DBCP
Druid
是一个JDBC组件,它包括三部分:
DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。DruidDataSource 高效可管理的数据库连接池。
SQLParser
日志记录:
Log4j日志记录。
一般记录使用者对应用的所有操作。
使用前要导入第三方jar包。log4j-1.2.17.jar
然后新建 log4j.properties属性文件,
配置文件的日志级别
log4j.rootLogger = {ERROR(错误信息)|
WARN(警告信息) |
INFO(提示信息) |
DEBUG(调试信息)}
,appender1(定义输出的方式的变量,可以有多个。)
配置日志的输出方式,可以是文件,控制台输出。
log4j.appender.appender1=
org.apache.log4j.ConsoleAppender(控制台输出)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) 配置日志文件的布局
log4j.appender.appender1.layout=
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
自定义样式
log4j.appender.appender2.layout.ConversionPattern=
%r 时间 ${yyyy-MM-dd hh:MM:ss}
%t 方法名 main
%p 优先级 DEBUG/INFO/ERROR
%c 所属类的全名(包括包名)
%l 发生的位置,在某个类的某行
%m 输出代码中指定的讯息,如log(message)中的message
%n 输出一个换行
文件上传下载:( form enctype="multipart/form-data")
Servlet 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。
1.Smartupload
上传
Smartupload
首先实例化对象
Smartupload su=new Smartupload();
初始化对象
Su.initialize(getServletConfig,request,reponse);
允许上传的类型,多个类型使用豆号分隔
su.setAllowedFilesList(“jsp,axp”);
设置上传文件的大小
su.setMaxFileSize() 单位b
设置全部文件的上传大小
su.setTotalMaxFileSize()
开始上传
Su.upload();
Su.save(String path); 文件上传的路径
下载
首先实例化对象
Smartupload su=new Smartupload();
初始化对象
Su.initialize(getServletConfig,request,reponse);
设定contentDisposition为null以禁止浏览器自动打开文件
su.contentDisposition(null);
开始下载
Su.downFile(文件路径+文件名);
2.Common-upload
发送邮件:
数据分页
分页模型
Public class PageModel<?>{
//存放数据集
private List<T> list;
//数据总条数
private int totalRecords;
//每页显示的记录条数
private int pageSize;
//当前页码
private int pageNo;
/*省略getter setter 方法*}
注:总的页码:总的记录条数/每页显示的记录条娄
例:(int)Math.ceil((bouble)totalRecoreds/pageSize)
搜索AND 分页
多条件查询
例:
Public PageMobel<实体> serach(int pageNo,int pageSize,Entity entity){
List<Object> keys= new ArrayList<Object>();
StringBuffer sql=new StringBuffer(“SELECT 要查询的字段FROM 表名 WHERE 1=1”);
//判断实体属性中是否有key
If(entity.getFilds()!==||””.equals(entity.getFilds())){
//拼凑sql
Sql.append(“ AND key LIKE ?”);
//将属性添加到集合中
Key.add(entity.getFilds());
}
通过prepardStatement预处理sql
For(int i=0;i<keys.size();i++)
{
Pstmt.setObject(i+1;keys.get(i));
}
验证码插件
网上有很多写好的例子
kapatcha-2.3.2的配置和使用
kaptcha-2.3.2.jar放到WEB-INF/lib目录下
配置web.xml
<servlet>
<servlet-name>Kaptcha</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
<!- 通过初始化参数配置 验证码的属性-
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattrn> Kaptcha .jsp</url-pattrn>
</servlet-mapping>
使用
<img src=” Kaptcha.jsp” onclick=”this.src+new Date().getTime()”>
防表单重复提交
Post Redirect Get
表单提交到服务器,然后使用重定向一个请求,通过新的请求中转发到视图
目录
一、 JSP 1
二、 Servlet 11
三、 自定标签 16
四、 EL 16
五、 JSTL 17
六、 Listener 17
七、 Filter 17
七 WEB应用安全 17
八、 小知识 17
一、JSP
1.介绍
Jsp(java server page) 动态WEB网页。
2.注释
Html注释
<!-- Html注释 - ->
Jsp注释
<%-- Jsp注释 --%>
隐式注释生成的页面中不可见;
3.声明
<%@ page language=”java” contentType=”text/html;charset=utf-8” errorPage=”true/false” %>
<!doctype html>
<html>
<head>
<meta charsets=”utf-8” />
<title>newhtml</title>
</head>
<body>
Html文档体
</body>
</html>
4.输出jsp表达式
<!- - 表达式输出 - ->
<%=值/变量/%>
5.脚本
脚本是在JSP中嵌套java代码。
<%
java代码。
%>
6.指令
1)编译指令
Page指令
Page指令一般位于页面顶端,一个页面可以有多个page指令
<%page
[lang=”java”]
[extends=”package.class”]
[import=”包1,包2,……”]
[session=”true|false”]
[buffer=”true|false”]
[auto=”flush”]
[isThreadSafe=”true|false”]
[info=”text”]
[errorPage=”relativeURL”]
[contentType=”text/html;chatset=utf-8”]
[pageEncodeing=”UTF-8”]
[isErrorPage=”true|false”]
%>
说明:
Lang 选择语言
Extends jsp继承的父类,或实现的接口
Session 设置页面是否需要HttpSession
Buffer 指定缓存区的大小
AutoFlush 是否需要强制输出缓冲区的内容
Info jsp页面信息
errorPage 指定错误页面
include指令
静态包含,可以将一个外部文件页面嵌套到本页面中。
<%@ include page=”文件路径”%>
2)动作指令
Forward指令
Forward指令用于将页面响应转发到另外的页面
使用:
<jsp:forward page=”url ”/>
Inlucde 指令
Include动态包含,它不会导入被include页面的编译指令,仅仅将被导入的页面插入到本页面中。在使用时须要把falush设置为true
使用:
<jsp:include page=”url”/>
静态包含与动态包含的区别:
<jsp:include page=”” flush=true />它总是会检查所含文件中的变化,适用于包含动态页面,并且可以带参数,,表态包含用伪码实现,不会检查所含文件的变化,适用于包含表态页面<%@ include file=””%>
执行时的时机不同,动态include是在运行时把两个JSP合并,静态是在编译期合并,动态include在页面发生改变时能及时更新,而静态页面不会再次重新编译.
UseBean、setProperty、getProperty指令
用于操作javaBean 的设置值与取值
useBean
<jsp:useBean id=”name”class=”bean类路径”scope=”作用域”/>
作用域:page、request,session,application;
setProperty
给bean设置值;
<jsp:property name=”beanName”property=”属性名”value=”值”/>
getProperty
从bean中取值
<jsp:getProperty name=”beanName”property=”属性名”/>
Plugin指令
Plugin指令用于下载服务器端applet程序。
不推荐使用,
<jsp:plugin code="" codebase="" type="applet"></jsp:plugin>
Param指令
<jsp:include page=””/>
<jsp:forward page=””/>
<jsp:plugin code="" codebase="" type="applet"></jsp:plugin>
当与include结合使用时,param指令用于将参数传入被导入的页面中;
当与forward时,param用于将参数值传如入被转向的页面;
当与plugin时,将param传入页面中的javaBean实例或applet实例中
使用:
<jsp:param name=”name”value=”value”/>
7.内置对象
Application
对于整个Web应用有效,一旦JSP,Servlet将数据放入application中,该数据将可以被该应用下的其它JSP,Servlet访问。
让多个JSP,Servlet共享数据
JSP
一个JSP
<%
application.setAttribute(“name”,value);
%>
其它JSP
<%=application.getattribute(“name”)%>
Servlet
//存值与取值
ServletContext application=getServletConfig.getServeltContext();
Application.setAttribute(“name”,object);
Application.getAttribute(“name”);
获取web应用配置参数
Web.xml
<context-param>
<param-name>name</param-name>
<param-value>value</param-value>
</context-param>
//jsp获取值
<%=application.getInitParameter (“name”) %>
//Servlet获取值
ServletContext application=getServletConfig.getServletContext();
Application.getInitParameter (“name”);
Config
Config对象代表当前jsp配置信息,
Exception
简单实用
设置可能发生异常的页面,
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="error_exception.jsp"%>
指定错误页面。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage=”true” %>
对错误页面设置
Out
Out对象代表一个页面输出流,通常用于在页面上输出变量或常量值。
使用:
<%
out.print(变量/常量);
%>
pageContext
上下文对象,该对象主要用于JSP之间的共享数据。使用pageContext可以访问page request session application
获取其它内置对象
ServletRequest.getRequest();//request
ServetResponse.getResponse();//response
ServletConfig.getConfig();//config
ServletContext.getContext();//application
HttpSession.getSession;//session
使用:
<%
pageContext.setAttribute(“test”,”text”,pageContext.作用域);
pageContext.setAttribute(“test”,”value1”,pageContext.RQUEST_SCOPE);
out.println(pageContext.getAttributesScope(“test”));
%>
<%=pageContext.getAttribute(“test”)%>
对象
Request
Request对象封装着用户的一次请求,并且所封装的请求参数都被封装在request对象中,除此之外可代表本次请求范围,还可以操作request范围的属性和方法。
<%
Object value = Request.getParameter(“key”);
Out.println(request.属性或方法);
%>
Response
Response 代表服务器对客户端的响应。
去缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", -10);
响应类型
用于返回响应类型给用户
<%
Response.setcontentType(“mini头;响应编码”);
Response.setContentType(“imge/jpeg;chatset=utf-8”);
%>
<%@ page contentType=” imge/jpeg;chatset=utf-8”%>
重定向
<%
Response.sendRedirect(url);
%>
增加cookies
Cookies 通常用于记录表单信息。
<%
String value=”test”
Cookies test=new Cookes(“test”,value);
Test.setmaxage(60*60*7)(ms)
Response.addCookie(test);
%>
得到Cookies
<%
Cookies[] cookies=request.getCookies();
for(cookie :cookies)
{
//获取Cookies名为test的值
If(“test”.equals(cookie.getName()))
{
Out.print(cookies.getValue());
}
}
%>
Cookie中文处理
因为cookie不支持中文所以在使用前需要使用URLEncode编码。
获取cookie值使用URLDencode解码
Session
Session对象是一个非常有用的对象,这个对象代表一次会话,关闭浏览器结束会话,
HttpSesion 常用的两个方法
setAttribute(“key”,value) //设置名为就key的Session会话
getAttribute(“key”) // 获取指定名的session的会话
Page
二、Servlet
1.介绍
Jsp本质上就是一个servlet,
2.配置
Servlet3.0配置
在Servelt类中使用@WebServlet Annotation进行配置
通过web.xml文件中配置
WebServlet 支持常用属性
属性 是否必要 说明
asyncSupportted 否 指定Servle是否支持异步操作模式
displayName 否 指定该Servlet显示名
initParams 否 用于是否为Servelt配置参数
loadOnStartUp 否 用于将该Servlet配置成load-on-startup的servelt
Name 否 指定该Servlet名称
urlPatterns/value 否 这两个属性一样
使用前:
Servelt2.5配置
1、新建类并实现HttpServlet 重写相应的方法;
2、打开在WEB-INFO下的web.xml配置文件
在web-app节点下添加标签
<servlet>
<servlet-name>servelt名</servlet>
<servlet-class>类的路径<servlet-class>
</servlet>
//映射路径
<servlet-mapping>
<servlet-name>servlet名</servlet-name>
<url-pattern>请求路径</url-pattern>
</servlet-mapping>
3.生命周期
Servlet 里面的方法
Init();//初始化对象
Destory();//销毁对象
提交的方式:
Post() 用于响应客户端的POST请求
Get() 用于响应客户端的GET请求
Doput() 用于响应客户端的PUT请求
Dodelete() 用于响应客户端的delete请求
Service() 当没有GET 和 POST用于响应客户端的Service 请求
4.Load-on-startup
Load-on-startup元素或load-on-startup属性只能接受一个整形值,这个值越小越好,Servlet就越先实例化。
配置load-on-startup的两种方式
Servlet3.0配置
通过@WebServlet Annotion的loadOnStartUp属性
简单实用:
Servlet配置
<servlet>
<servlet-name>name</servlet>
<servlet-class>类路径<servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
5.访问servlet配置参数
配置Servlet时,还可以给servlet添加初始化参数,以实现提供更好的移值性。
Servlet3.0配置参数
@WebServlet(
//设置servlet名字
name=”test”,
//设置servlet请求路径
urlPatterns={”/test”},
//设置初始化参数 可以设置多个
initParams={
@WebInitParam(name=”key”,value=”test”)
})
Servlet配置参数
<servlet>
<servlet-name>name</servlet>
<servlet-class>类路径<servlet-class>
<init-param>
<param-name>key</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
在页面/servlet中取得参数:
<%
String key=config.getInitParameter(arg0);
%>
ServletConfig config = getServletConfig();
6.使用servlet作为控制器
用于控制视图( View ),
7.线程安全
Servlet是本身是一个线程不安全的
解决线程安全
在dopost 或doget 前加上synchronized
三、自定标签
自定义标签的作用就是不在JSP中写脚本
1.自定义标签(CustomTag)
使用步骤:
新建class 处理自定义标签
新建的类必须继承javax.servelt.jsp.tagxt.SimpleTagSupport;
在dotag 完成标签的功能
获取页面输出流
Writer out=getJsp().getOut();
获取属性
有属性的标签,使用Getters ,Setters 获取属性值。
获取标签体
StringWriter sw = new StringWriter();
getJspBody().invoke(sw);
新建*.tld文件,每个tld文件对应一个标签库,每个标签库可以对应多个标签。
<taglib 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-jsptaglibrary_2_0.xsd"
version="2.0">
<description>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version>
<short-name>SimpleTagLibrary</short-name>
<uri>/SimpleTagLibrary</uri>
<tag>
<name>标签名</name><!--必须- ->
<description>标签说明</description><!--可选 - ->
<tag-class>指定类的路径</tag-class><!—必须 - ->
<!- 指定标签体必须为空 - ->
<body-content>empty</body-content><!—必须 - ->
说明:
body-content:
Empty :指定标签体为空
Jsp :指定标签体可以是JSP脚本
Scriptless :不可心使用JSP脚本
Tagdependent :指定该标签是否支持动态属性
<!—给标签添加属性- ->
<attribute>
<name><name>
<required></required>
< fragment></ fragment>
</attribute>
说明:
attribute:
name : 指定属性名
required :是否必选
fragment :是否可以使用JSP脚本
</tag>
使用自定义标签
添加标签库
<%@ tag uri=”” prefix=”simple”%>
<simple:自定义标签名 属性=“值” >
标签体
</simple:自定义标签名 >
四、EL
EL的标识
禁用
isELIgnored="false"
使用
${变量}
${对象名.属性名}
${对象名[‘属性名’]} 属性名用双引号括起来,当属性名有下划线时采用这 种方式
属性范围
Page pageScope
Request requestScope
Session sessionScope
Application applicationScope
当不加 作用域Scope
${属性/变量}
默认是从小开始找
page request session application
当动态输出时使用
必须使用${对象名.属性名}
Empty
${empty expression/变量},null,””,0长度的集合或数组。
${not empty expression/变量} 取反
五、JSTL标签库
Jsp标记标签库(jsp standard tag library)
标签库uri :选择使用的标签库
标签名 :选择使用那个标签
导入标签库 :使用编译指令导入标签库,就是将标签库和指定的前缀联起来。
使用 :<%@ tag uri=”” prefix=”simple” %>
<simple:标签名 />
核心标签
Core:
<c:foreach>
<c:if>
<c:choose>
Function:
结合c标签使用
注意:
·Jstl1.1 jstl1.2区别
Jstl 1.2l只需要 导入一个包jstl 1.2.jar
Jstl 1.1 需要jstl 1.1.jar stand.jar
六、Listener
在WEB容器中 ,WEB应用内部会不断的发生各种事件,如web应用被启动, web应用被关闭。通常来说,这些web事件对开发者都是透明的。
常用的事件监听器的接口
ServletContextListener: 用于监听应用的启动和关闭
ServletContextAttributeListener 用于监听ServletContext(application)属性改变
ServletRequestListener 用于监听用户的请求。
ServletRequestAttributeListener 用于监听HttpRequest (request)范围内属性值的改变
HttpSessionListener 用于监听用户Session的开始和结束
HttpSessionAttributeListener 用于监听HttpSession(session)范围属性的改变
实现接口重写的方法
contextCreated :
contextDestroyed :
监听器的用途
监听用户上线与退出
显示在线用户
使用监听器
创建Listener类并实现 Listener接口
配置Listener
<listener>
<display-name>显示名</display-name> 可选
<description>说明</description> 可选
<listener-class>指定监听器的类路径</listener-class>
</listener>
注:配置Listener 应在filter 和 Servlet 前
七、Filter
Filter 可以认为是servlet的加强版,它主要用于对用户请求进行预处理,也可是
对HttpServletResponse进行后处理,是个典型的处理链
Filter的好处
在HttpServletRequest到达Servelt之前,拦截客户的HttpServletRequest
根据需要检查HttpServletRequst,也可以修改HttpServletRequest头和数据。
在HttpServletRequst到达客户端之前,拦截HttpServletResponse
根据需要检查HttpServletResponse, 也可以修改HttpServletRequest头和数据。
Filter的用途
用户授权 :根据请求过滤用户非法请求。
日志 :详细记录用户的操作
负责解码
改变XML内容
数据处理 :当出现违反党的关键字,使用(*)替换
可以拦截多个请求或响应 可以配置多个url- pattern
创建
创建Filter必须实现javax.Servlet.Filter接口,并实现相应的方法。
Init() //初始化
Destroy() //销毁
doFilter() //过滤逻辑
其中doFilter是完成过滤器链 当后面没有过滤器是将找Servlet
配置
配置filter时,应在Servlet前
<filter>
<filter-name>name</filter-name>
<filter-class>类路径</filter-class>
<init-param>
<param-name>初始化参数<param-name>
<param-value>初始化参数值</param-value>
注:可以配置多个 ;
</param>
</filter>
filter映射
<filter-mapping>
<filter-name></filter-name>
<url-pattrn></url-pattrn>
注:url-pattrn可以添加多个拦截的url
</filtermapping>
使用URL Rewrite 实现网站的伪静态
七 WEB应用安全
八、小知识
防盗链:
判断当前是否有用户登录,否认跳转到登陆页面
<%
Object object=session.getSession(“user”);
If(object==null)
{
Response.sendRedrict(“login.jsp”);
}
%>
数据库连接池:
C3P0
DBCP
Druid
是一个JDBC组件,它包括三部分:
DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。DruidDataSource 高效可管理的数据库连接池。
SQLParser
日志记录:
Log4j日志记录。
一般记录使用者对应用的所有操作。
使用前要导入第三方jar包。log4j-1.2.17.jar
然后新建 log4j.properties属性文件,
配置文件的日志级别
log4j.rootLogger = {ERROR(错误信息)|
WARN(警告信息) |
INFO(提示信息) |
DEBUG(调试信息)}
,appender1(定义输出的方式的变量,可以有多个。)
配置日志的输出方式,可以是文件,控制台输出。
log4j.appender.appender1=
org.apache.log4j.ConsoleAppender(控制台输出)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) 配置日志文件的布局
log4j.appender.appender1.layout=
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
自定义样式
log4j.appender.appender2.layout.ConversionPattern=
%r 时间 ${yyyy-MM-dd hh:MM:ss}
%t 方法名 main
%p 优先级 DEBUG/INFO/ERROR
%c 所属类的全名(包括包名)
%l 发生的位置,在某个类的某行
%m 输出代码中指定的讯息,如log(message)中的message
%n 输出一个换行
文件上传下载:( form enctype="multipart/form-data")
Servlet 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。
1.Smartupload
上传
Smartupload
首先实例化对象
Smartupload su=new Smartupload();
初始化对象
Su.initialize(getServletConfig,request,reponse);
允许上传的类型,多个类型使用豆号分隔
su.setAllowedFilesList(“jsp,axp”);
设置上传文件的大小
su.setMaxFileSize() 单位b
设置全部文件的上传大小
su.setTotalMaxFileSize()
开始上传
Su.upload();
Su.save(String path); 文件上传的路径
下载
首先实例化对象
Smartupload su=new Smartupload();
初始化对象
Su.initialize(getServletConfig,request,reponse);
设定contentDisposition为null以禁止浏览器自动打开文件
su.contentDisposition(null);
开始下载
Su.downFile(文件路径+文件名);
2.Common-upload
发送邮件:
数据分页
分页模型
Public class PageModel<?>{
//存放数据集
private List<T> list;
//数据总条数
private int totalRecords;
//每页显示的记录条数
private int pageSize;
//当前页码
private int pageNo;
/*省略getter setter 方法*}
注:总的页码:总的记录条数/每页显示的记录条娄
例:(int)Math.ceil((bouble)totalRecoreds/pageSize)
搜索AND 分页
多条件查询
例:
Public PageMobel<实体> serach(int pageNo,int pageSize,Entity entity){
List<Object> keys= new ArrayList<Object>();
StringBuffer sql=new StringBuffer(“SELECT 要查询的字段FROM 表名 WHERE 1=1”);
//判断实体属性中是否有key
If(entity.getFilds()!==||””.equals(entity.getFilds())){
//拼凑sql
Sql.append(“ AND key LIKE ?”);
//将属性添加到集合中
Key.add(entity.getFilds());
}
通过prepardStatement预处理sql
For(int i=0;i<keys.size();i++)
{
Pstmt.setObject(i+1;keys.get(i));
}
验证码插件
网上有很多写好的例子
kapatcha-2.3.2的配置和使用
kaptcha-2.3.2.jar放到WEB-INF/lib目录下
配置web.xml
<servlet>
<servlet-name>Kaptcha</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
<!- 通过初始化参数配置 验证码的属性-
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattrn> Kaptcha .jsp</url-pattrn>
</servlet-mapping>
使用
<img src=” Kaptcha.jsp” onclick=”this.src+new Date().getTime()”>
防表单重复提交
Post Redirect Get
表单提交到服务器,然后使用重定向一个请求,通过新的请求中转发到视图
相关推荐
"北大青鸟accp7.0使用JSP/Servlet技术开发新闻发布系统课件+上级+课后作业答案"这个标题表明这是一套由北大青鸟教育机构推出的accp7.0课程的教学资源,重点在于讲解如何利用JSP(JavaServer Pages)和Servlet技术来...
北大青鸟6.0课件S2使用JSP/Servlet/Ajax技术开发新闻发布系统2,,我只能上传小于50M的文件,所以分了2次上传,下载使用JSP/Servlet/Ajax技术开发新闻发布系统1后就是全部的了。如有问题加Q:329139513.注明来意
在本项目中,“使用JSP/Servlet/Ajax技术开发新闻发布系统2”是北大青鸟ACCP6.0课程的一部分,旨在教授学员如何构建一个动态、交互式的新闻发布平台。这一部分通常涵盖系统的后端开发和部分前端增强功能。下面将详细...
【ACCP S2 使用JSP/Servlet技术开发新闻发布系统】是一个面向初学者的课程,旨在教授如何使用Java服务器页面(JSP)和Servlet技术来构建一个动态、交互式的新闻发布平台。这个课程涵盖了从基础概念到实际开发的完整...
【ACCP 6.0 S2-5】课程主要涵盖了使用JSP(JavaServer Pages)、Servlet和Ajax技术来开发新闻发布的系统。这是一个典型的Web应用程序开发主题,旨在教授学员如何利用这些技术构建动态、交互式的网站。 JSP是Java...
【JSP/Servlet技术开发新闻发布系统】 在Web开发领域,JSP(JavaServer Pages)和Servlet是两种核心的技术,常用于构建动态、交互式的Web应用程序,如新闻发布系统。本项目"使用JSP/Servlet技术开发新闻发布系统...
本源码用jsp/servlet/javascript模拟了网上购物 实现了以下功能: 1.勾选某一货物时动态生成其价格和邮费 2.选择不同邮寄方式时动态生成各自的邮费 3.动态计算总费用 4.购买后显示购买详细信息
【标题】北大青鸟ACCP7.0使用JSP/Servlet技术Y2课件 【内容详解】 北大青鸟的ACCP7.0课程是针对IT行业初学者和进阶者设计的一套全面的编程教育体系,特别是对于Java Web开发领域。在第二学年(Y2)的学习中,重点...
使用JSP/Servlet/Ajax技术开发新闻发布系统
在IT行业中,ACCP(Accelerated Computer Certified Professional)是一套针对软件开发人员的培训课程,其6.0版本的第二阶段(S2)主要聚焦于Web应用开发,特别是使用JSP(JavaServer Pages)、Servlet和Ajax...
在本教程中,我们将深入探讨如何使用JSP(JavaServer Pages)、Servlet和Ajax技术来开发一个功能完善的新闻发布系统。这通常涉及到动态网页的创建、服务器端处理以及客户端的异步数据交互,从而提供流畅的用户体验。...
**JSP(JavaServer Pages)和Servlet是Java Web开发中的两个核心技术,它们在构建Web应用程序,尤其是动态网站方面发挥着重要作用。在这个名为“jsp/servlet blog”的项目中,我们看到一个基于这两项技术的简单博客...
【标题】"xiaoming_Jsp/Servlet_" 涉及的是使用JSP(JavaServer Pages)和Servlet技术在Web开发中的应用,特别是针对用户登录功能的实现,包括手机号码验证码登录、7天内免密登录以及沙箱支付等关键模块。...
【酒店管理小系统jsp/servlet】是一个基于Java Web技术的项目,主要利用了JSP(JavaServer Pages)和Servlet来构建。这个系统适用于初学者学习和理解这两种技术的基础概念和应用,同时也为实际的酒店业务流程提供了...
在本项目实战中,我们将深入探讨如何使用Java技术栈,特别是JSP、Servlet和JavaBean,来构建一个基于Web的网上交易系统。这个系统能够模拟实际的电子商务环境,包括用户注册、登录、商品浏览、购物车功能、订单处理...
《使用JSP/Servlet/Ajax技术开发新闻发布系统》 内部测试-笔试试卷 一、选择题(共25题,每题2分,满分100分) 1) JSP表达式语言可用于在网页上生成动态内容并代替JSP脚本元素,JSP表达式语言的语法是(B)。 A. {EL...
而JSP(JavaServer Pages)和Servlet是Java平台上的Web开发技术,它们在处理动态内容和构建企业级应用方面有着广泛的应用。从ASP转向JSP/Servlet,主要是为了利用Java的跨平台优势和强大的后端能力。 1. **ASP与JSP...
【基于jsp/servlet/JavaBean的网上交易系统】 在IT领域,基于jsp/servlet/JavaBean的网上交易系统是Web开发中的一个经典架构,尤其适用于初学者了解和学习Web应用程序的构建。这种架构利用了Java的强大功能和灵活性...
在JSP/Servlet/Ajax组合中,Servlet通常扮演控制器的角色,接收用户请求,调用业务逻辑,然后将结果返回给JSP进行展示。在新闻系统的实现中,Servlet可能包含处理新闻添加、删除、修改以及搜索等功能的逻辑。 ...