【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《jsp重点》,欢迎阅读!
JSP考点
一、选择题、填空题
1、page指令
通过设置内部的多个属性来定义整个页面的属性
语法:<%@ page 属性1="属性值" 属性2="属性值1,属性值2"„ 属性n="属性值n"%> page指令常用属性: language
在编写JSP页面时要用的脚本语言,默认为java,如果写必须写在声明、脚本片段和表达式的前面,用法:<%@ page language=“java”%>;
回应MIME类型(多用途Internet邮件扩充类型)。属性的值默认为text/html。 例如:<%@ page contenType=“text/html;charset=GB2312”%>; 不允许两次指定不同值;ISO-8859-1不接收中文;
用来在JSP页面引入包或类,如:<%@ page import=“java.io.*”%>
无须导入的类包有:java.lang.*、javax.servlet.*、 javax.servlet.jsp.* 、javax.servlet.http.* 。import可重复出现
用来指出关于JSP页面的会话数据的可用性, 默认为true。 例如:<%@ page session=“false”%>; 错误页面的URL。
例如 :<%@ page errorPage=“/error.jsp”%>;
指定是否将当前页面作为JSP错误页面。如果是true,则是,否则不是。 例如 :<%@ page isErroePage=“true”%>;
contentType
import
session
errorPage
isErrorPage
Extends属性 :定义了由JSP页面产生的servlet的父类。
Buffer属性 :设定JSP网页所使用的缓冲区大小。缓冲区是用来暂存一些要传送給客户端的数据,默认值为8kb。设值为none,即不使用缓冲区的功能。 设定缓冲区的大小值必须大于8kb: <%@page buffer = "24kb"%>
autoFlush :是否自动刷新输出缓冲。如果设成true,则当输出缓冲区满的时候,刷新缓冲区而不是抛出一个异常
isThreadSafe属性 : 用来设置JSP文件是否能多线程使用。
isThreadSafe =“true|false”,缺省值是true。若为true,那么多个客户请求发向JSP引擎时,可以一次被处理。JSP程序员要处理同步时共享的状态,以保证同步时确实是安全的。若false,则采用单线程模式控制客户端访问该页。
Info属性:通常用于定义JSP页面的描述信息。內容可使用getServletInfo()方法来取得,如:info属性:<%@page info = “网页信息说明 „ ”%> 2、ResultSet还提供了对结果集进行滚动的方法: next():移动到下一行 Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。 afterLast() :移动到resultSet的最后面。
3、通过超链接访问servlet:
在jsp文件中加入超链接:“serelet访问路径”>
例如: <%@ page contentType="text/html;Charset=GB2312" %>
单击超链接查看希腊字母表:
查看希腊字母表
此处,超链接为url-pattern,即路径,需保持一致
myservlet /helpMeShow
4、分页显示-----(看看)
cachedRowSetImpl:可以保存记录集ResultSet中的数据,可以在分页浏览时关闭和数据库的连接。假设有ResultSet对象result,可将其数据保存到上述类的对象中。 CachedRowSetImpl rowSet=new CachedRowSetImpl(); rowSet.populate(result);
假设该对象中有m行记录,每页显示n行,总页数的公式为:
总页数s= (m%n)==0 ? (m/n): (m/n+1) 即余数>0,s=m/n+1;余数=0时,s=m/n. 如果准备显示第p页的内容,则需将游标移动到第(p-1)*n+1行。 MySQL分页的实现:Select * from table limit M,N
M:记录开始索引位置 N:取多少条记录。 完成WEB页面的分页显示 5、Statement对象用于向数据库发送SQL语句, 其常用方法: execute(String sql):用于向数据库发送任意sql语句 executeQuery(String sql) :只能向数据发送查询语句。
executeUpdate(String sql):只能向数据库发送insert、update或delete语句,executeUpdate执行完后,将会返回一个整数 (即增删改语句导致了数据库几行数据发生了变化)。
Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。
6、JSP的运行原理
当服务器的一个JSP页面被第一次请求执行时,服务器上的JSP引擎首先将JSP页面文件转译成一个Java文件,并编译生成字节码文件,然后执行字节码文件响应客户的请求。
字节码文件的主要工作是:
(1) 把JSP页面中的HTML标记(静态代码)交给客户的浏览器负责显示; (2)负责处理JSP标记,并将有关的处理结果发送到客户的浏览器; (3)执行<% %>之间的java程序片(动态代码),并把执行结果交给客户的浏览器负责显示;
(4)当多个用户请求同一个JSP页面时,Tomcat服务器为每个用户启动一个线程,该线程负责执行常驻内存的字节码文件来响应相应客户的请求。这些线程由Tomcat服务器来管理,将CPU的使用权在各个线程之间快速切换,以保证每个线程都有机会执行字节码文件,这与传统的CGI为每个客户启动一个进程相
比较,效率要高的多。 7、 response重定向
在某些情况下,当响应客户时,需要将客户重新引导至另外一个页面。 可以使用response的 response.sendredirect(页面URL)方法实现客户的重定向。
即response.sendredirect(页面URL)
例如: <% String str=request.getParameter("boy"); if(str.length()==0)
{ response.sendRedirect("example3_11.jsp"); } else
{ out.print("欢迎您来到本网页!"); out.print(str); } %> 8、发呆最长时间为30分钟(单位:分钟)
在Tomcat服务器的conf文件下的配置文件web.xml中设置。session失效:关闭浏览器、调用invalidate()方法、“发呆”超时。
30 9、Session与URL重写
如果客户的浏览器不支持Cookie,可以通过URL重写来实现Session对象的唯一性。所谓URL重写,就是当客户从一个页面连接到同一个Web服务目录的一个页面时,通过向这个新的URL添加参数,把Session对象的ID传带过去,这样就可以保证客户在该网站各个页面中的Session对象是完全相同的。 可使用response对象调用encodeURL()或encodeRedirectURL()方法实现URL重写。
10、使用setProperty标记可以设置bean的属性值。 ------(看看) 设置bean的属性为一个表达式的值的格式:
name="bean的名字" property= "bean的属性" value= “<%=expression%>” />(要求表达式类型同属性类型) 或 value= “字符串”/>(字符串自动转化为属性的类型)
类型转换:Integer.parseInt( String s )、Long.parseLong( String s )、Float.parseFloat( String s ) 、Double.parseDouble( String s ) 11、在JSP中调用usebean时,用import导入包。例如: <%@ page import=“tom.jiafei.*”%> 12、session的运行原理
session其实指的就是访问者从到达某个网站到离开为止的那段 时间内(会话期),每个访问者单独获得一个session变量。 该对象 存储会话期中的一些信息,所以访问者在不同的网页间跳转时,不 会丢失其信息。
客户访问网站时,服务器会分配给客户一个Session对象,客户 关闭浏览器后,Session对象消失,这称为一次会话。不同的会话通 过session的ID区分。
13、变量和方法的声明
"<%!"和"%>"声明的变量为类的成员(全局)变量和方法 , 其所占的内存直到Tomcat服务器关闭才释放.
"<%"和"%>"为类方法中声明的局部变量和方法 , 仅在JSP页面后继的程序片及表达式中有效.
二、问答题(4个)
1、请简述include指令标记和include动作标记的不同
(1) include指令标记:是把被包含的文件的内容放于包含文件中,组成一个文件后编译运行.include动作标记: 是把被包含的文件的运行结果放于包含文件运行产生的结果中,这2个文件各自编译运行.
(2) 标签是动态引入, 标签涉及到的2个JSP页面会被翻译成2个servlet,这2个servlet的内容在执行时进行合并。 而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在源文件级别进行合并。
(3) 标签:使用page属性指定被引入资源。include指令:使用file属性指定被引入资源。
2、Session对象与application对象的区别
(1) 应用范围不同。 session对象针对的是单个的访问者,而application对象针对的是所有的访问者,是整站共用的。
(2)存活时间不同。Session是在站点的页面从打开到被关闭之前一直生存的,关闭或跳转到其它网站就会使Session死掉。而Application是从站点发布以来一直存活的,除非重启了站点服务,IIS。 (3)Session是"会话"的意思,利用Session可以存储浏览者的一些特定信息,如:浏览者的姓名、性别、所用浏览器的类型以及访问停留时间等。Session对个人信息的安全性构成了一定的威胁。Application对象是一个应用程序级的对象,它包含的数据可以在整个Web站点中被所有用户使用,并且可以在网站运行期间持久地保存数据。
3、连接池的思想
Tomcat服务器可以事先预备好若干个连接对象将这些连接对象存放在一个
称为连接池的容器中,当某用户需要操作数据库时,只要从连接池中取出一个连接对象即可,当用户使用完该连接对象后,将该连接对象放回到连接池中。如果某用户需要数据库时,连接池中已没有连接对象可用,那么该用户就必须等待,直到连接池中有了连接对象。
4、重定向与转发-------(记住、会背)
在Servlet类中使用HttpServletResponse类的重定向方法SendRedirect,以及RequestDispatcher类的转发方法forward方法。
重定向功能:是将用户从当前页面或servlet定向到另一个JSP页面或servlet; 转发的功能:是将用户对当前JSP页面或servlet对象的请求转发给另一个JSP页面或servlet对象。
5、Usebean标签中scope取值---------(大题)
(1)scope=“page”表示该bean仅在当前页面有效。当两个用户同时请求一个JSP页面时,一个用户对自己bean的属性的改变,不影响另一个用户。
(2)scope=“session”表示该bean在session生命周期内有效。(单个客户的不同页面内有效) 当两个用户同时请求一个JSP页面时,一个用户对自己bean的属性的改变,不影响另一个用户。 (3)scope=“request”,该bean的有效范围是request期间。不同用户的bean是互不相同的,即当两个用户同时请求一个JSP页面时,一个用户对自己bean的属性的改变,不影响另一个用户。
(4)scope=“application”表示该bean在application页面有效。(每个用户的不同页面内有效)当两个用户同时请求一个JSP页面时,任何一个用户对自己bean的属性的改变,都会影响其他的用户。
6、Response请求重定向
通过response实现请求重定向。应用场景:用户注册与购物车。
请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。
实现方式:response.sendRedirect()。实现原理:302状态码和location头即可实现重定向
三、程序分析
1.定时刷新 Refresh.jsp:
<% response.setHeader("refresh", "5");
String data=new Random().nextInt(10000)+ ""; response.getWriter().write(data); %>
2.解决中文乱码
Request的中文乱码问题的解决方案:
(1)提交方法为post,解决方法为:Request.setCharacterEncoding(“UTF-8”) (2)提交方法为get,解决方法为(手工解决): String str=request.getParameter(“message"); byte c[ ]=str.getBytes(“ISO-8859-1”,“UTF-8”); str=new String(c);
将表单message参数代表内容从ISO-8859-1转化为中文。 (3)提交方法为超链接,解决方法同第二种情况。
Response的中文乱码问题的解决方案:
(1)使用HTML语言里面的标签来控制浏览器行为。
‘content-type’ content=‘text/html;charset=UTF-8’>”.getBytes()); (2) response.setHeader(“content-type”,”text/html,charset=UTF-8”); (3) String data=”中国”;
(4) 用OutputStream输出中文
ServletOutputStream out=response.getOutputStream(); out.write(data.getBytes(“UTF-8”));
3.分析代码功能或作用
4.SQL语句(2个查询、一个插入、一个修改) 更新(修改): update employee set salary=3000 where name=“张三” 添加(插入): insert into employee values (‘009’,’李国强’,’1982-01-02’,3100) insert into employee(number,name) values(‘010’,‘吴刚’) 删除: delete from employee where number =‘009’ 执行上述三种语句,需要用到容器对象的executeUpdate方法.
假设sql为一容器类对象. sql. executeUpdate(以上三种语句中的一种). 排序:select * from employee order by salary ASC升序/DESC降序 5.使用JDBC操作数据库,步骤如下:----------(记住) (1)与一个数据库建立连接;
(2)向已连接的数据库发送SQL语句; (3)处理SQL语句返回的结果;
6.Servlet的生命周期(或工作原理)----------(大题) 一个Servlet的生命周期主要由三个过程组成:
(1) 初始化Servlet对象。 Servlet对象第一次被请求加载时,服务器初始化这个Servlet对象,即创建一个Servlet对象,对象调用init()方法完成必要的初始化工作。(仅执行一次)
(2)诞生的Servlet对象再调用service()方法响应客户的请求。(多个用户请求,所以执行多次)
(3)当服务器关闭时,调用destroy()方法,消灭Servlet对象。
四、编程(原题第六题)
create database Query_Score character set utf8 collate utf8_general_ci; use Query_Score; create table student(
stu_id varchar(15) primary key, stu_name varchar(20), Java_score int, J2EE_score int,
Software_score int
);
Insert into users (stu_id,stu_name,Java_score,J2EE_score,Software_score) values(201000001,'张三','80','90','68');
Insert into users (stu_id,stu_name,Java_score,J2EE_score,Software_score) values(201000002,'李四','65','70','80');
Insert into users (stu_id,stu_name,Java_score,J2EE_score,Software_score) values(201000003,'王敏','90','70','80');
Insert into users (stu_id,stu_name,Java_score,J2EE_score,Software_score)
values(201000004,'李莉','75','85','85');
Insert into users (stu_id,stu_name,Java_score,J2EE_score,Software_score)
values(201000005,'张丽','85','75','90');
Insert into users (stu_id,stu_name,Java_score,J2EE_score,Software_score) values(201000006,'王敏','90','95','85');
MyDbBean.Java:
package tom.jiafei;:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;
public class MyDbBean {
private Statement stmt = null; private Connection conn = null;
try {
ResultSet rs = null;
Class.forName(“com.mysql.jdbc.Driver”); }
catch(Exception e) { out.print(e); } try {
String url="jdbc:mysql://localhost/Query_Score";
String user="root"; String password="root";
Connection conn=DriverManager.getConnection(url, username,password); Statement st=conn.createStatement();
String sql="select stu_id,stu_name,Java_score,J2EE_score,Software_score from
student";
ResultSet rs=st.executeQuery(sql); while(rs.next()){
System.out.println("stu_id="+rs.getObject("stu_id")); System.out.println("stu_name="+rs.getObject("stu_name")); System.out.println("Java_score="+rs.getObject("Java_score")); System.out.println("J2EE_score="+rs.getObject("J2EE_score"));
System.out.println("Software_score="+rs.getObject("Software_score")); }
rs.close(); st.close(); conn.close(); }
catch(Exception exp){ }
}
本文来源:https://www.wddqxz.cn/253e2307e1bd960590c69ec3d5bbfd0a7956d5ad.html