用如下拼接sql的方式检验用户名和密码:
select * from user where userid='aa' and userpwd='a' or '1'='1'
:
where条件为真。所以是不安全的。
避免方式:在sql中使用"?"进行预编译
JavaBean
是Java Web
程序的重要组件,它是一些封装了数据和操作的功能类,供JSP或Servlet调用,完成数据封装和处理等功能。
定义:
(1)JavaBean是一个公共类。
(2)JavaBean类具有一个公共的无参的构造方法。
(3)JavaBean所有的属性定义为私有的。
(4)在JavaBean中,需要对每个属性提供两个公共方法。假设属性名字是xxx,要提供的两个方法:
setXxx():用来设置属性xxx的值。
getXxx():用来获取属性xxx的值
(若属性类型是boolean,则方法名为isXxx())。
(5)定义JavaBean时,通常放在一个命名的包下。
(1)
id属性:指定所要创建的对象名称及存到指定范围的属性名称。
class属性:用来指定JavaBean的类名,注意,必须使用完全限定类名。
scope属性:指定所创建对象的作用范围,其取值有四个:page、request、session、application,默认值是page。
(2)
功能:根据name获取JavaBean对象指定属性的值,并显示在页面上。
说明:jsp:getProperty
动作标签是通过JavaBean中的get方法获取对应属性的值。
(3)设置JavaBean对象指定属性值,有四种子形式。
:
为beanname对象的指定属性propertyname设置指定值beanvalue。
JavaBean的常用类型
(1)实体类(entity.):封装实体数据,通常只有属性及对应的get/set方法。
(2)工具类(util.):封装工具方法,方法通常为静态的,通过类名直接调用。如:数据加密/解密、获取数据库连接、数据类型转换等。
(3)数据库操作类(dao.):封装基本的数据库操作(增删改查等),通常先设计接口。
(4)业务逻辑类(service.):封装业务逻辑操作,通常先设计接口。
(5)控制器类(controller.*):同页面打交道,接收用户请求,是连接页面和业务逻辑的桥梁,如下一章的servlet类。
注解(Annotation)是自Jdk1.5开始引入的特性
简介
注解提供了在源码(而非在xml配置文件中)中直接对类、成员或方法做配置和说明的机制,它不同于注释,是源码的组成部分
系统Annotation
@Override :
表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误提示
@Deprecated
:表示的是一个类或方法已经不再建议继续使用了,标记为已过时
@SuppressWarnings :
表示关闭不当的编译器警告信息
定义变量,可设默认值
public @interface MyAnnotation {
public String name() default "XB";
public String info() default "WSDR";
}
定义变量数组,接受一组参数
public @interface MyAnnotation {
public String[] name();
}
public static final RetentionPolicy SOURCE:在java源程序中存在
public static final RetentionPolicy CLASS:在java生成的class中存在(默认值)
public static final RetentionPolicy RUNTIME:在java运行的时候存在
@Documented注解:
定义注解时,加上该元注解,则注解信息会出现在javadoc文档中。
@Target注解:
表示的是一个Annotation的使用范围
Servlet
是用Java语言编写的服务器端程序,是由服务器端调用和执行的、按照Servlet
自身规范编写的Java类。
Servlet
可以处理客户端传来的HTTP请求,并返回一个响应。
2.
Servlet得的父类HttpServlet
包含了几个重要的方法:
init():
初始化方法,Servlet对象创建后,接着执行该方法。
doGet():
当请求的类型是“get”时,调用该方法。
doPost():
当请求的类型是“post”时,调用该方法。
service():
Servlet处理请求时自动执行service()方法,该方法根据请求的类型(get或post),调用doGet()或doPost()方法。
因此,在建立Servlet时,一般只需要重写doGet()和doPost()方法。
destroy():
Servlet对象注销时自动执行。
3.
Servlet编写好后,需要进行配置才能起作用,配置方法有xml(在web.xml中配置)和注解两种。
Servlet访问地址(URL Mappings),例如设置为Servlet1(注意起始的**“/”**一定不能去掉)
4.Servlet、JavaBean、Jsp的关系
(1)Jsp是页面,Servlet和Javabean是类,Jsp在执行时会先翻译成Servlet;
(2)JavaBean供JSP或Servlet调用,不能独立运行。
(3)从功能上说,Servlet和Jsp是等价的,都可以用来执行代码处理客户端的请求,事实上Servlet出现早于Jsp,Servlet在输出页面内容时非常繁琐(用一系列的out.write()语句),为了克服这个缺点诞生了Jsp技术;
但Servlet并没有因此退出历史舞台,Servlet侧重于代码设计,Jsp侧重于界面设计,两者各有所长,在一些开发模式中,如MVC模式(后面章节详细介绍),就充分利用两者的特点,让它们在开发中担任不同的角色。
5.Servlet和Jsp的等价性
(1).访问方法
jsp:http://localhost:8080/服务目录/*.jsp
servlet:需要先设置servlet的访问地址()
(2)内部对象
jsp:out,request,response,session,application
等内部对象可以直接使用。
servlet:
request、response
作为方法参数可直接使用。
out:
PrintWriter out=response.getWriter();
session:
HttpSession session=request.getSession();
application:
ServletContext application= this.getServletContext();
(3)内容类型及编码
Jsp:<%@ page contentType="text/html;charset=utf-8" %>
Servlet:response.setContentType("text/html;charset=utf-8");
(4)导入包
Jsp:<%@ page import=“java.sql.,java.net.” %>
Servlet:import语句;
(5)转发
Jsp:
Servlet:request.getRequestDispatcher(“”).forward(request,response)
(6)包含
Jsp:
Servlet:request.getRequestDispatcher(“”).include(request,response)
(7)页面或servlet关联的几种方式:
链接、表单提交、重定向、转发、包含。
地址关联时,建议地址以“/”
开始,不同情况下/含义不同:
链接,表单提交、重定向时,/表示http://localhost:8080,因此/后要加上web目录,更好的写法是${pageContext.request.contextPath}
。
转发、包含以及servlet映射地址: "/"表示http://localhost:8080/web目录
,因此"/"
后就不用加web目录了。
过滤器:可以对用户的请求信息和响应信息进行过滤,常被用于权限检查和参数编码统一设置等。
监听器:可以用来对Web应用进行监听和控制的,增强Web应用的事件处理能力。
过滤器:过滤器是在服务器上运行的,且位于请求与响应中间的起过滤功能的程序
过滤器可以改变请求、响应信息,正常到达目标或重定向到其它地址等。
init()方法:public void init(FilterConfig filterConfig) throws ServletException{}
该方法用于初始化过滤器,默认情况下,服务器启动时就会加载过滤器,init方法就会执行。
该方法有一个FilterConfig类型的参数,利用它可以获取过滤器的初始化参数值(可通过xml或注解设置)
方法为:public String getInitParameter(String paraName)
doFilter()方法:public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,ServletException{}
该方法是过滤器核心方法,用于执行过滤操作,当请求地址和过滤器配置的过滤地址匹配时被执行。
第一个参数为ServletRequest对象,此对象给过滤器提供了对请求信息(包括表单数据、Cookie和HTTP请求头)的完全访问。
第二个参数为ServletResponse,用于响应请求。
最后一个参数为FilterChain对象,使用该参数对象调用Servlet、JSP页面或者过滤器链中的下一个过滤器。
调用方法为:public void doFilter(ServletRequest request,ServletResponse response)
**监听器:**监听器是Web应
用开发的一个重要组成部分。通过它可以监听Web应用的上下文信息、Servlet请求信息、Servlet会话信息,包括对象创建和销毁、属性数据变化等。
服务器启动时,监听器自动加载,特定事件发生时,容器自动调用相应监听器中对应的事件处理方法。