资源描述
1. 声明段声明变量和脚本段声明变量区别:
利用 <%!%>声明的变量,在JSP容器转换JSP页面为Servlet类时,将作该类的实例变量或者类变量(声明时使用了static关键字),在多用户并发访问时,将导致线程安全的问题,除非你确认是单用户访问或者变量是只读的。
而 <%%>,在JSP容器转换JSP页面为Servlet类时,页面中的代码会按照代码段中出现的次序, 依次被转换为_jspService()方法中的代码,在脚本段生命的变量,将作为_jspService()方法中的本地变量,因此脚本段中的变量是线程安全的。
2. “宝贝类”该list内容输出一个html表格
List list ;
try{
list=(List)session.getAttribute("list");
}catch(Exception e){
list = new ArrayList();
}
//迭代输出
if (list.size()==0){
out.println("没有商品");
}
%>
<table>
<%
List list = (List)request.getAttribute(“list”);
for(Baobei u:list){
out.println(“<tr>”+”<td>”);
out.println(Baobei.getName());
out.println(”</td>”+”<td>”);
out.println(Baobei.getPrice());
out.println(“</td>”+”</tr>”);
} %>
</table>
<a href="buy.jsp?name=order2.getSpmc()”>购买<a>
3. 关于分页写代码包括javabean至少一个jsp文件
Show.jsp
<script type="text/javascript">
function nextPage() {
var pageCode = parseInt(document.show.pageCode.value);
var totalPage = parseInt(document.show.totalPage.value);
if(pageCode<totalPage && pageCode>=1){
pageCode=pageCode+1;
}else if(pageCode==totalPage || pageCode<1){
pageCode=1;
}
document.show.pageCode.value = pageCode.toString();
document.show.submit();
}
function previousPage(){
var pageCode = parseInt(document.show.pageCode.value);
var totalPage = parseInt(document.show.totalPage.value);
if(pageCode<=totalPage && pageCode>=2){
pageCode=pageCode-1;
}else if(pageCode==1 || pageCode<2){
pageCode=totalPage;
}
document.show.pageCode.value = pageCode.toString();
document.show.submit();
}
</script>
<%
try{
List<String> list = (List<String>)request.getAttribute("BeanList");
if(list!=null){
out.println("<table>");
for(String u:list){
out.println("<tr>"+"<td>");
out.println(u);
out.println("</td>"+"</tr>");
}
out.println("</table>");
}
}catch(Exception e){}
%>
<form name="show" action="Controller.jsp" method="post">
<input type="hidden" name="pageCode"
value='<%=request.getAttribute("pageCode")%>'/>
<input type="hidden" name="totalPage"
value='<%=request.getAttribute("totalPage")%>'/>
<input type="button" value="next" onClick="nextPage()"/>
<input type="button" value="previous" onClick="previousPage()"/>
</form>
Controller.jsp
<%
int pageCode=1,pageRecord=3,totalPage=0;
try{
pageCode = Integer.parseInt(request.getParameter("pageCode"));
}catch(Exception e){pageCode = 1;}
List<String> record = (List<String>)session.getAttribute("record");
if (record == null||record.isEmpty()){
record=new ArrayList<String>();
for (int i=0;i<10;i++) {
record.add("这里是某条记录"+i);
}
session.setAttribute("record",record);
}
int totalRecord = record.size();
if(totalRecord % pageRecord == 0)
totalPage=totalRecord/pageRecord;
else
totalPage=(int)(totalRecord/pageRecord)+1;
int start = (pageCode-1)*pageRecord;
List<String> BeanList= new ArrayList<String>();
for (int i=0;i<pageRecord&&(start+i<totalRecord);i++){
BeanList.add(record.get(start+i));
}
request.setAttribute("pageCode",pageCode);
request.setAttribute("BeanList",BeanList);
request.setAttribute("totalPage",totalPage);
request.setAttribute("pageRecord",pageRecord);
request.getRequestDispatcher("/show.jsp").forward(request, response);
%>
4. 基于Tomcat的jsp,打开页面自动出题.
question.jsp
<%
String num_1 =(String)session.getAttribute("num_1");
String num_2 =(String)session.getAttribute("num_2");
if(num_1!=null&&num_2!=null){
out.print(num_1+" + "+num_2+" = ");
%>
<form action="/hh/control.jsp" method="post">
<input type="text" name="sum"/>
<input type="submit" value="submit">
</form>
<%
}else{
response.sendRedirect("/hh/control.jsp");
}
%>
control.jsp
<%
String sum= request.getParameter("sum");
String num_1 =(String)session.getAttribute("num_1");
String num_2 =(String)session.getAttribute("num_2");
if(num_1==null||num_2==null){
num_1 = Integer.toString((int)(Math.random()*100));
num_2 = Integer.toString((int)(Math.random()*100));
session.setAttribute("num_1", num_1);
session.setAttribute("num_2", num_2);
response.sendRedirect("/hh/question.jsp");
}else if(Integer.parseInt(num_1)+Integer.parseInt(num_2)==
Integer.parseInt(sum)
){
request.setAttribute("msg", "<a href='/hh/question.jsp'>回答正确请进行下一题!</a>");
num_1 = Integer.toString((int)(Math.random()*100));
num_2 = Integer.toString((int)(Math.random()*100));
session.setAttribute("num_1", num_1);
session.setAttribute("num_2", num_2);
request.getRequestDispatcher("/status.jsp").forward(request, response);
}else{
request.setAttribute("msg", "<a href='/hh/question.jsp'>重新回答!</a>");
request.getRequestDispatcher("/status.jsp").forward(request, response);
}
%>
status.jsp
<%
String msg =(String)request.getAttribute("msg");
if(msg!=null)
out.println(msg);
%>
5. 如何在页面中判断用户是已登录的合法用户,至少2个组件。(每个组件为jsp或者servlet)<%@ include file = “checkLog.jsp ”>
loginCheck.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%
//登录检查
String userUUid=(String)session.getAttribute("userUUid");
if(userUUid==null) //没有经过登录验证
{
response.sendRedirect("login.jsp");//重定向到登录页
return;
}
%>
userInfo.jsp
<%@ include file="loginCheck.jsp" %>
6. 说明如何用Cookie保存用户登录的信息,使用户在Cookie有效期间不需要登陆
Cookie cookie1 = new Cookie("username", username);//创建Cookie
Cookie cookie2 = new Cookie("password",password);
cookie1.setMaxAge(60*60*24);//设置cookie1命长为1天
response.addCookie(cookie1);//保存cookie1
cookie2.setMaxAge(60*60*24);//设置cookie2命长为1天
response.addCookie(cookie2);//保存cookie2
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie u:cookies){
if(u.getName().equals("username"))
username = u.getValue();
if(u.getName().equals("password"))
password = u.getValue();
}
}
7. 类包含的方法:request.getAttribute( ); request.getPrimeter( );
(1)HttpServletRequest类有setAttribute()方法,而没有setParameter()方法
(2)当两个Web组件之间为链接关系时,被链接的组件通过getParameter()方法来获得请求参数
(3)当两个Web组件之间为转发关系时,转发目标组件通过getAttribute()方法来和转发源组件共享request范围内的数据。
(4)request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。这两个方法能够设置Object类型的共享数据。
(5) request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据。request.getAttribute 必须先request.setAttribute.
(6)request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。
(7) getAttribute是返回对象,getParameter返回字符串,request.getParameter() 方法,
总的来说:request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法传递的数据会从Web客户端传到Web服务器端,代表HTTP请求数据。
8. Web请求的响应的流程
1.客户端输入URL之后向服务器发送请求(Request)
2.服务器通过端口监听此请求,解析Request的头文件。
3.服务器根据头信息来选择资源作为响应(Response)返回给客户端
4.客户端接受响应将数据显示在浏览器上
9. 提交请求的途径有哪些?
l 地址栏输入网址
l 表单的提交
l 超链接的点击
10. 设计一个小程序javabean怎么使用?
<jsp:useBean id="simple" scope="page" class="blog.csdn.joywy.SimpleBean">
<jsp:setProperty name=“simple“ property=“*“/>
</jsp:useBean>
11. 加法测试器
javaBean:
package td;
public class Plus {
private String num_1 = "0";
private String num_2 = "0";
public Plus(String num_1, String num_2) {
super();
this.num_1 = num_1;
this.num_2 = num_2;
}
public Plus(){
super();
}
public String getNum_1() {
return num_1;
}
public void setNum_1(String num_1) {
this.num_1 = num_1;
}
public String getNum_2() {
return num_2;
}
public void setNum_2(String num_2) {
this.num_2 = num_2;
}
public int getSum( ){
int sum =Integer.parseInt(num_1)+Integer.parseInt(num_2);
return sum;
}
}
加法器:<br/>
<form action="doAdd.jsp" name="plus" method="post">
<input type="text" id="num_1" name="num_1"/>
+
<input type="text" id="num_2" name="num_2"/>
<br>
<input name="submit" type="submit" value="Sum?">
</form>
<body>
<jsp:useBean id="plus" scope="request" class= "td.Plus"/>
<jsp:setProperty name="plus" property="*"/>
计算结果是:<% out.println(plus.getSum( ) ); %></body>
12. JSP中两种include的区别
<%@ include file=”relativeURI”%> 可以叫作静态include(静态包含),是jsp指令中的一种,(JSP指令控制JSP编译器如何去生成servlet(servlet是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。
<jsp:include page=”relativeURI” flush=”true” />叫作动态include(动态包含),是jsp动作的一种,(JSP动作是一系列可以调用内建于网络服务器中的功能的XML标签)
执行时间上:
<%@ include file=”relativeURI”%> 是在翻译阶段执行
<jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行.
引入内容的不同:
<%@ include file=”relativeURI”%>引入静态文本,在JSP页面被转化成servlet之前和它融和到一起,先包含后编译,不会检查所含文件的变化,适用于包含静态页面,可以理解为纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享, 两者高度紧密结合,不能有变量同名的冲突.而页面设置也可以借用主文件的。
<jsp:include page=”relativeURI” flush=”true” />引入执行页面或servlet所生成的应答文本. 被包含的文件先编译,后包含进来,然后显示。
13. JSP中get和post的区别
Get:是以实体的方式得到由请求URI所指定资源的信息,如果请求URI只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。
Post:用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列中请求URI所指定资源的附加新子项
14. request.getParameter和request.getParameterValues的异同
request.getParameterValues(String name)是获得如如checkobx类型(名字相同,但值有多个)的数据。接收数组变量
request.getParameter(String name)是获得相应名的数据,如果有重复的名,则返回第一个的值,接收一般变量,如text类型.
展开阅读全文