动作名page="要转向的页面">
param子标记:
paramname="名字"value="指定给param的值"/>
动作名>
(3)变量和方法的声明<%!
%>
在<%!
%>声明的变量整个JSP页面有效,与书写位置无关,是成员变量
在<%!
%>声明的方法整个JSP页面有效,但方法内的变量只在该方法内有效
(4)Java程序片<%%>
在<%%>中声明的变量为局部变量,有效范围与书写位置有关
(5)Java表达式<%=%>
2、JSP的运行原理以及字节码文件的主要工作。
(1)运行原理
当服务器上的jsp页面被第一次请求时,该jsp会被服务器先转译成一个java文件,并编译这个文件生成字节码文件,然后执行字节码文件响应请求。
(2)字节码文件的主要工作
1把jsp页面中的html标记符号交给客户的浏览器负责显示
2负责处理jsp标记,并将有关的处理结果发送到客户的浏览器
3执行“<%%>”之间的java程序片,并把执行结果交给客户的浏览器显示
4对多个客户同时请求jsp时,将CPU在多个线程之间快速切换,以保证每个线程都有机会执行字节码文件
3、JSP有哪些内置对象?
作用分别是什么?
(1)Request:
封装用户提交的信息,使用getParameter方法可以获取用户提交的信息
request常用方法:
1)getProtocol()获取用户向服务器提交信息所使用的通信协议。
2)getServletPath()获取用户请求的JSP页面文件的目录。
3)getContextPath()获取用户请求的当前的web服务目录。
4)getContentLength()获取用户提交的整个信息的长度。
5)getMethod()获取用户提交信息的方式,比如post或get。
6)getHeader(Strings)获取HTTP头文件中由参数s指定的头文件名字的值。
7)getHeaderNames()获取头名字的一个枚举。
8)getHeader(Strings)获取头文件中指定头名字的全部值得一个枚举。
9)getRemoteAddr()获取用户的IP地址。
10)getRemoteHost()获取用户机的名称。
11)getServerName()获取服务器的名称。
12)getServerPort()获取服务器的端口号。
13)getParameterNames()获取用户提交的信息体部分中name参数值的一个枚举。
(2)Response:
对用户的请求做出动态响应,向用户端发送数据
(3)Session:
由JSP引擎创建,可通过该对象保留链接的有关信息,判别是否为同一用户
Session的生存周期
①是否关闭浏览器
②调用invalidate()方法使得session无效
③session达到了设置的最长发呆时间Tomcat为30分钟
Session对象存储数据
1PublicvoidsetAttribute(Stringkey,Objectobj)
2PublicObjectgetAttribute(Stringkey)
3PublicEnumerationgetAttributeNames()
4PublicvoidremoveAttribute(Stringname)
(4)Application:
由服务器创建,该对象对访问该服务器的所有用户共享,不同的web服务目录下,application不同
(5)Out:
用来向用户端输出数据
4、什么是Javabean?
Javabean有哪些特征?
在Javaweb开发中有什么作用?
(1)JavaBean是一个可重复使用的软件组见,一种Java类,通过封装属性和方法成为某种功能或处理某个业务的对象
(2)特征:
1可实现代码的重复利用
2易编写,易维护,易使用
3可以在任何安装了Java运行环境的平台使用,而不需要重新编译。
(3)作用:
处理数据,储存数据,有效的分离静态部分和动态部分
5、保存bean的字节码
①创建bean、
②在web服务目录下建立子目录结构:
\WEB-INF\classes、
③根据类的包名在classes下建相应子目录,如tom.jiafei,则目录结构为tom\jiafei
将bean的字节码文件复制到\WEB-INF\classes\tom\jiafei中
6、bean的加载原理
当JSP页面使用jsp动作标记useBean加载一个bean时,jsp引擎将首先根据jsp动作标记useBean给出的bean的id名字以及scope给出的使用范围,在下一个同步块中查找jsp引擎内置pageContent对象中是否含有这样的bean。
如果这样的bean存在,jsp引擎就分配这样的bean给用户,如果在pageContent中没有查找到jsp动作标记要求的bean,就根据class制定的字节码创建一个useBean要求的bean,并将所创建的bean添加到pageContent内置对象中。
7、bean的有效范围
(1)scope取值page,只在当前页面有效,直到页面执行完毕
(2)scope取值session,只在用户的session(会话)期间
(3)scope取值request,只在当前页面有效,直到响应结束,略长于page
(4)scope取值application,直到服务器关闭。
共享,修改会影响其他用户
8、获取或修改bean的属性
使用动作标记getProperty、setProperty获取或修改
9、如果表单提交的信息中有汉字,接收该信息的页面应该做怎样的处理?
(1)Request设置编码
request.setCharacterEncoding("gb2312");
(2)对信息重新编码
Stringstr=request.getParameter(“message”);
Byteb[]=str.getBytes(“ISO-8859-1”);
Str=newString(b);
10、include指令标记和include动作标记的不同。
(1)include指令标记:
①语法格式:
<%@includefile=”文件的URL”%>
②作用:
在JSP页面出现该指令的位置处,静态插入一个文件。
(可重复使用)
③include指令标记是在编译阶段就处理所需要的文件,被处理的文件在逻辑和语法上依赖于当前的JSP页面,其优点是页面的执行速度快;
(2)include动作标记:
①语法格式:
includepage=”文件的URL”/>
或includepage=”文件的URL
Param子标记
include>
②include动作标记是在JSP页面运行时才处理文件,被处理的文件在逻辑和语法上独立于当前JSP页面,其优点是可以使用param子标记更灵活的处理所需要的文件,缺点是执行速度要慢些。
11、MVC模式的工作原理,JSP技术中MVC模式的具体实现。
①模型-视图-控制器
模型:
用于储存数据的对象
视图:
向控制器提交所需的数据、显示模型中的数据
控制器:
负责具体的业务逻辑操作
②JSP技术中mvc的实现:
模型:
一个或多个javabean对象,用于存储数据。
视图:
一个或多个jsp页面,像控制器提交必要的数据和显示数据
控制器:
一个或多个servlet对象,根据视图提交的要求进行数据处理操作,并将有关结果储存到JavaBean中,然后servlet使用转发或重定向的方式请求视图中的某个jsp页面显示数据。
12、什么是servlet?
servlet的生命周期。
(1)在服务器端创建能响应用户请求的对象。
(2)①初始化Servlet。
Servlet第一次被请求加载时,服务器初始化这个servlet
②新诞生的servlet再调用service方法响应用户的请求
③服务器关闭时,调用destroy方法销毁servlet
13、HttpServletResponse类的sendRedirect方法和RequestDispatcher类的forward方法有何不同?
(1)sendRedirect浏览器地址改变,重定向,无法使用request获取用户提交的数据
(2)forward浏览器地址不改变,转发,可以使用request获取用户提交的数据
14、假设创建servlet的类是tom.jiafei.Dalian,创建的servlet对象的名字是myservlet,应当怎样配置web.xml文件?
xmlversion=“1.0”encoding=“iso-8859-1”?
>
myservlet
tom.jiafei.Dalian
myservlet
/myservlet
15、采用MVC模式实现会员注册;当新会员注册时,该模板要求用户必须输入会员名,密码信息,否则不允许注册,注册成功返回登录页面login.jsp(不需要编写)。
用户的注册信息被存入数据库的member表中。
具体要求如下:
a)写出注册页面表单代码,要求详细代码。
b)编写Servlet类处理控制流程。
c)并写出Servlet部署文件web.xml。
d)编写Javabean文件描述用户的注册信息,负责连接数据库,判断用户名是否存在以及保存注册数据。
a)register.jspform表单
b)Registerservlet.java(注册功能的servlet)
publicclassRegisterservletextendsHttpServlet{
publicvoidinit(ServletConfigconfig)throwsServletException{
super.init(config);
}
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
request.setCharacterEncoding("utf-8");
Stringusername=request.getParameter("username");
Stringuserpass=request.getParameter("userpass");
Useruser=newUser();
booleanisExist=user.usernameIsExist(username);
if(isExist==false){
RequestDispatcherdispatcher=request.getRequestDispatcher("login.jsp");
dispatcher.forward(request,response);
}else{
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("用户名已存在......");
}
}
PublicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doGet(request,response);
}
}
c)Web.xml
Registerservlet
.servlet.Registerservlet
Registerservlet
/registerservlet
d)Javabean命名为user.java
publicclassUsers{
privateStringusername;
privateStringuserpass;
Connectioncon=null;
PreparedStatementpre=null;
ResultSetrs=null;
//判断用户名是否存在
publicbooleanusernameIsExist(Stringusername){
booleanisExist=null;
Stringsql="select*fromuserwhereusername='"+username+"'";
try{
Class.forName(".mysql.jdbc.Driver");
con=DriverManager.getConnection("***","***","***");
pre=con.prepareStatement(sql);
rs=pre.executeQuery();
if(rs.next()){
isExist=true;
}else{
isExist=false;
}
}catch(Exceptione){
}
returnisExist;
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetUserpass(){
returnuserpass;
}
publicvoidsetUserpass(Stringuserpass){
this.userpass=userpass;
}
}
16、采用MVC模式实现web应用。
用户可以通过JSP页面输入三角形三边的长度的一个servlet控制器,控制器负责计算三角形的面积,并将面积存放在数据模型中,然后请求JSP页面显示数据模型中的面积。
写出几个文件的关键代码(或程序流程,尽量采用代码),具体要求如下:
a)写出输入三条边的页面表单代码,要求详细代码。
b)编写servlet类文件,处理控制流程。
c)并写出servlet部署文件web.xml。
d)编写三角形的Javabean文件。
a)JSP页面命名为sanjiao.jsp
三角形:
边A:
边B:
边C:
getPropertyproperty="mess"name="data"/>:
边A:
getPropertyproperty="a"name="data"/>,
边B:
getPropertyproperty="b"name="data"/>,
边C:
getPropertyproperty="c"name="data"/>
的面积是getPropertyproperty="area"name="data"/>
b)servlet类为HandleArea.java
packagemyservlet.control;
publicclassHandAreaextendsHttpServlet{
publicvoidinit(ServletConfigconfig)throwsServletException{
super.init(config);
}
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doPost(request,response)
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
AreadataBean=newArea();
HttpSessionsession=request.getSession(true);
session.setAttribute("data",dataBean);
try{
doublea=Double.parseDouble(request.getParameter("a"));
doubleb=Double.parseDouble(request.getParameter("b"));
doublec=Double.parseDouble(request.getParameter("c"));
dataBean.setA(a);
dataBean.setB(b);
dataBean.setC(c);
doubles=-1;
doublep=(a+b+c)/2.0;
s=Math.sqrt(p*(p-a)*(p-b)*(p-c));
dataBean.setArea(s);
dataBean.setMess("三角形");
}catch(Exceptione){
dataBean.setArea(-1);
dataBean.setMess(""+e);
}
response.sendRedirect("sanjiao.jsp");//重定向方法
}
}
c)web.xml
handle
myservlet.control.HandArea
handle
/handleArea
d)javabean文件为Area.java
packagemybean.data;
publicclassArea{
doublea,b,c,area;
Stringmess;
publicStringgetMess(){
returnmess;
}
publicvoidsetMess(Stringmess){
this.mess=mess;
}
publicdoublegetA(){
returna;
}
publicvoidsetA(doublea){
this.a=a;
}
publicdoublegetB(){
returnb;
}
publicvoidsetB(doubleb){
this.b=b;
}
publicdoublegetC(){
returnc;
}
publicvoidsetC(doublec){
this.c=c;
}
publicdoublegetArea(){
returnarea;
}
publicvoidsetArea(doublearea){
this.area=area;
}
}
17、编写一个JSP页面,该页面提供一个表单,用户可以通过表单输入梯形的上底、下底、高的值,并提交给JSP页面,该JSP页面将计算梯形的面积之任务交给一个bean去完成。
JSP页面使用getProperty动作标记显示梯形的面积。
①bean命名为Ladder.java
packagemybean.data;
publicclassLadder{
doublea=0,b=0,c=0,area=-1;
publicdoublegetA(){
returna;
}
publicvoidsetA(doublea){
this.a=a;
}
publicdoublegetB(){
returnb;
}
publicvoidsetB(d