一个好的Web应用: 功能完善、易于实现和维护易于扩展等的体系结构
一个Web应用通常分为两个部分:
1. 由界面设计人员完成的表示层(主要做网页界面设计)
2. 由程序设计人员实现的行为层(主要完成本Web应用的各种功能)
Web开发的两种常用模式
Web开发的两
Model1 纯JSP或JSP+javabean
适用于小型的Web应用
模型1可以分为两种方式:
优点:简单,所见即所得,容易实现
缺点:访问数据库的代码需要写在JSP页面中,如果数据库发生变化,JSP页面需要重写
2.使用JSP+JavaBean
优点:数据访问代码和JSP页面分离,数据访问代码重用性好
缺点:系统复杂时,JSP页面中仍会包含大量脚本代码,代码开发和维护困难
Model2 MVC模式
该模型是一种将应用分解成三个独立部分的通用模型。
request周期的Javabean
session周期的Javabean
1.Javabean的创建
servet创建生命周期为session的bean的步骤如下:
(1)用BeanClass类的某个构造方法创建bean对象,例如:
BeanClass bean=new BeanClass();
(2)将所创建的bean对象存放到HttpSerletSession对象:session中,并指定查找该bean的关键字,该步骤决定了bean的生命周期为session。例如:
HttpSession session=request.getSession(true);
session.setAttribute("keyWord",bean);
内置对象执行上述操作,就会把bean存放到Tomcat引擎管理的内置对象pageContext中,该bean被指定的id是"keyWord",生命周期是PageContext.SESSION_SCOPE(session)。
2 视图更新
servelt创建bean, bean的生命周期为session,只要用户的session没有消失,该bean就一直存在,一个用户在访问Web服务目录的各个JSP中都可以使用<jsp:useBean id="keyWord" type="usern.yourbean.BeanClass" scope="session"/> 标记获得servlet所创建的bean的引用,然后使用<jsp:getProperty name="keyWord" property="bean的变量"/>标记显示该bean中的数据,该标记中的id是servlet所创建的bean索引关键字。
对于生命周期为session的bean,如果servlet希望某个JSP显示其中的数据,可以使用RequestDispatcher对象向该JSP页面发出请求,也可以使用HttpServletResponse类中的重定向方法(sendRedirect)。
show.jsp页面使用如下标记获得servlet所创建的bean的引用(注意没有用type属性而是用class属性):<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="session"/>该标记中的id是servlet所创建的bean索引关键字。那么即使servlet所请求的JSP页面或其他页面事先已经有了id是"keyWord",scope是" session "的bean,那么这个bean也会被servlet所创建的bean替换。
原因是,servlet所请求的JSP页面或其他页面被刷新时,就会根据当前页面使用的<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope=" session "/>标记到Tomcat引擎管理的内置对象PageContext中寻找id是"keyWord",生命周期是session,而该bean已经被servlet更新了。
application周期的Javabean
1.Javabean的创建
servet创建生命周期为application的bean的步骤如下:
(1)用BeanClass类的某个构造方法创建bean对象,例如:
BeanClass bean=new BeanClass();
(2)servlet使用getServletContext()方法返回服务器的ServletContext内置对象的引用,将所创建的bean对象存放到服务器这个ServletContext内置对象中,并指定查找该bean的关键字,该步骤决定了bean的生命周期为application,例如:getServletContext().setAttribute("keyWord",bean);
上述操作,就会把bean存放到Tomcat引擎管理的内置对象pageContext中,该bean被指定的id是"keyWord",有效期限是(生命周期)PageContext.APPLICATION_SCOPE(application)。
2 视图更新
当servlet创建创建生命周期为application的bean后,只要Web应用程序不结束,该bean就一直存在。一个用户在访问Web服务目录的各个JSP中都可以使用<jsp:useBean id="keyWord" type="user.yourbean.BeanClass" scope="application"/> 标记获得servlet所创建的bean的引用,然后使用<jsp:getProperty name="keyWord" property="bean的变量"/>标记显示该Javabean中的数据,该标记中的id是servlet所创建的bean索引关键字。
对于生命周期为application的bean,如果servlet希望某个JSP显示其中的数据,可以使用RequestDispatcher对象向该JSP页面发出请求,也可以使用HttpServletResponse类中的重定向方法(sendRedirect)。
注意:所有用户在同一个Web服务目录中的application生命周期的bean是相同的,即占有相同的内存空间。另外,如果servlet所请求的JSP页面,比如show.jsp页面,使用如下标记获得servlet所创建的bean的引用(注意没有用type属性而是用class属性):<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="application"/>该标记中的id是servlet所创建的bean索引关键字。那么即使servlet所请求的JSP页面或其他事先已经有了id是"keyWord",scope是"application"的bean,那么这个bean也会被servlet所创建的bean替换。
原因是,servlet所请求的JSP页面或其他页面被刷新时,就会根据当前页面使用的:<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="application"/>标记到Tomcat引擎管理的内置对象PageContext中寻找id是"keyWord",生命周期是application,而该bean已经被servlet更新了
Javabean和Servlet与配置文件
Javabean类的包名均为mybean.data;Servlet类的包名均为myservlet.control。
1.保存Javabean类和Servlet类的源文件
D:\ mybean\data 和 D:\myservlet\control
2.编译Javabean类 D:\javac mybean\data\Javabean的源文件
3.编译Servlet类 D:\ javac myservlet\control\servlet的源文件
4.将类的字节码文件保存到服务器 ch9\WEB-INF\classes\mybean\data 和ch9\WEB-INF\classes\myservlet\control
5.web.xml文件
编写web.xml文件,并保存到Web服务目录的WEB-INF子目录中,即ch9\WEB-INF中
MVC模式与注册登录 大部分Web应用都会涉及到注册与登录模块。本节使用MVC模式讲述怎样设计注册、登录模块。为ch9\WEB-INF中的web.xml文件添加如下子标记
Javabean与Servlet管理
本节的Javabean类的包名均为mybean.data;Servlet类的包名均为myservlet.control。
1.保存Javabean类和Servlet类的源文件 D:\ mybean\data 和 D:\myservlet\control
2.编译Javabean类 D:> javac mybean\data\Javabean的源文件
3.编译Servlet类 D:> javac myservlet\control\servlet的源文件
4.将类的字节码文件保存到服务器 ch9\WEB-INF\classes\mybean\data 和
ch9\WEB-INF\classes\myservlet\control
配置文件管理
本节的Servlet类的包名均为myservlet.control,需要配置Web服务目录的web.xml文件,即将下面的web.xml文件保存到Tomcat安装目录的Web服务目录ch9中。根据本书使用的Tomcat安装目录及Web服务目录,需要将web.xml文件保存到D:\apache-tomcat-8.0.3\webapps\ch9\WEB-INF目录中。
web.xml
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>myservlet.control.HandleRegister</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/helpRegister</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>myservlet.control.HandleLogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/helpLogin</url-pattern>
</servlet-mapping>
数据库设计与连接
1 创建一个数据库 、表 使用MySQL建立一个数据库student,该库共有一个user表 。
user表的用途:存储用户的注册信息。即会员的注册信息存入user表中,user表的主键是logname,各个字段值的说明如下:
logname :存储注册的用户名(属性是字符型,主键)
password :存储密码(属性是字符型)
email :存储email(属性是字符型
2 数据库连接
避免操作数据库出现中文乱码,需要使用
Connection getConnection(java.lang.String) 方法建立连接,连接中的代码是(用户是root,其密码是空)
String url = "jdbc:mysql://127.0.0.1/student?"+"user=root&password=&characterEncoding=gb2312";
Connection con = DriverManager.getConnection(uri);