浏览器访问jsp文件时,会被jsp引擎翻译成一个java类,再编译成c花式咖啡lass文件,最终
Servlet引擎执行class文件,将要响应的内容输出给客户端浏览器。所有要响应的内容都是
通过out.write()或out.print()输出给浏览器的,最终响应给浏览器的其实就是html页面。
Out.write():是输出静态的html元素
Out.print():是输出动态的java元素
两种输出合并在一起,组合成一个完整的html文档,并把html页面通过字符流输出到浏览器上(输出又叫响应)
out.write("\r\n");
out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"www.w3/TR/html4/loose.dtd\">\r\n");
out.write("&软件测试需要学什么lt;html>\r\n");
out.write("<head>\r\n");
out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
out.write("<title>Insert title here</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("\t<h2>我是index.jsp</h2>\r\n");
out.write("\t");
for (int i = 1; i <= 5; i++) {
out.write("\r\n");
out.write("\ti=");
out.print(i);
out.write("<br>\r\n");
out.write("\t");
}
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>");
同一个Jsp文件在第一次访问时,会比较慢一点,因为该文件要被翻译和编译,后续再请求该我们的十二年一个轮回这是传奇jsp文件时,就不需要再次翻译和编译,所以就很快了。在实际的项目中,正式上线前,所有的jsp页面都会被公司内部员工访问一次。
2. jsp页面的构成元素在jsp页面上可以存在如下几种元素:
静态html元素 ,如 <h3>我是h3标签&去美国买什么lt;/h3>动态jsp脚本,语法<% java代码 %><%
int a=10,b=2;
out.print("a/b="+a/b);
%><br>
动态jsp表达式,语法:<%=java表达式 %>例如:
<%=a/b%>
<%=stu.getName() %>
Jsp脚本和表达式不能相互嵌套
4) 注释:jsp页面上可以写两种注释
第1种:html注释,语法:<!-- 注释内容 -->
第2种:打新jsp注释:语法: <%-- 注释内容 --%>
两种注释的区别:html注释在源代码中可见(保留了html注释),jsp注释在源代码中是没有的
3.指令jsp指令的语法:<%@ 指令名 属性名=”值” 属性名2=”值2” %>
常用指令
page指令:设置页面相关的属性,比如使用的脚本语言:language="java",errorPage属性等
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="error.jsp"%>
include指令:把其它的文件包含到当前jsp页面中,当前jsp页面叫主文件,使用了include指令包含后,被包含的文件会和主文件一起翻译和编译使用场合:当一个站点的多个页面的头部或者尾部相同时,就可以用include指令把头部或尾部页面包含到多个页面中。
注意:当要包崩解仪含一个jsp页面时,要把骨架标签删除,只保留一个page指令和实际的内容就行了
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<div style="background-color: yellow;margin:1px auto;width:90%;height:100px">
我是头部
</div>
3) taglib指令:引入一个标签库,明天再细讲
4.动作1. include动作:把其它文件包含到当前jsp文件中,作用和include指令相同。
Incluce动作包含和include指令包含的区别:
1)包含的时间不同: include指令是在被包含文件和主文件内容合并后,在翻译成servlet(java类)的时候把文件包含进来.inlude动作是在请求主文件时就把文件包含进来。
动作包含要早于指令包含。
2)翻译的过程不同:include指令包含时,被包含文件和主文件合并在一起翻译,只会产生主文件翻译后的java类;include动作包含时,被包含文件是单独翻译的
实际项目中,用动作包含或者指令包含都可以
forward动作:把当前的请求转发到其它资源上。语法:
<jsp:forward page="相对 URL 地址" />
特点:是在服务器内部发生的跳转,地址栏上的url没有变(还是最初的url),用户并不知道已经发生了跳转.只能转发到当前项目的资源上
可以连续转发n次,但是浏览器的url始终不变(第1次请求的url)隐式对象(重点)Jsp隐式对象又叫内置对象,是web服务器给jsp页面提供的对象,我们可以直接使用这些对象.9个隐式对象分为如下几类:
第1类:作用域对象
作用域即作用范围,作用域对象有4个:request,session,page,application
第2类:输出对象,out
第3类:响应对象,response
第4类:其它对象,config,pageContext和exception
作用域对象4个:
request:请求对象,代表一次请求,它的作用域是一次请求,在request中存储的数据只能在一次请求中共享. 存数据的方法setAttribute(String name,Object value),取数据方法:
getAttribute(String name).只能在请求转发时,才能获取到request中的数据。
session:代表会话对象,会话就是浏览器和服务器之间多次请求和响应的过程。在session中存储的数据可以在多个请求中共享.
存数据: session.setAttribute("username", "李四");
取数据:
String username=(String) session.getAttribute("username");
application:代表web应用本身,即整个web项目的上下文执行环境.它的作用域是整个web项目,只要web服务器没有关闭,web项目就能访问,application就起作用.保存在application中的数据只要服务器没有关闭,就能够被所有会话共享。一个application包含多个会话。
page:代表当前页面自身。Page域中的数据只大宪章能在当前页面中共享,它的作用域是当前页面.
输出对象:out
out的println():此方法在输出内容后不会换行,而是产生一个空格
out的print():此方法可以输出任意类型的值
out的write():此方法只能输出字符数据,要么是字符串,要么是字符
例如:
<%
out.print("aaaa");
out.println("bbbb");
out.println("cccc");
out.write(97); //输出小写字母a
%>
响应对象:response
<%
String contentType = response.getHeader("Content-Type");
out.print("响应的内容类型:" + contentType);//在servlet里能测出来
int status = response.getStatus();
out.print("响应的状态码:" + status);//200
//重定向:即跳转到其它资源,它和转发区别是:重定向会改变地址栏的url(有新的请求)
response.sendRedirect("index.jsp");
%>
表单处理(超级重点)表单处理就是获取从表单提交过来的数据,提交表单的请求方式:GET和POST.
针对GET提交,如果请求参数的值是中文,会产生乱码。
解决GET提交的中文乱码问题的方法有2种:
第1种:将获取的参数值先转换为byte[],再封装成新的字符串
<%
//获取请求参数的值
String sitename= request.getParameter("sitename");
String url= request.getParameter("url");
sitename= new String(sitename.getBytes("ISO8859-1"),"UTF-8");
%>
第2种:修改server.xml文件(直接找到Servers项目下的sever.xml去修改),在
Connector节点上添加一个属性URIEncoding=”UTF-8”
解决POST提交的中文乱码问题:在第一次获取请求参数的代码前加上request.setCharacterEncoding("UTF-8");
例如:
<%
//解决POST请求的中文乱码
request.setCharacterEncoding("UTF-8");
//获取请求参数的值
String sitename = request.getParameter("sitename");
String url = request.getParameter("url");
%>
总结:获取请求参数的值有2个方法
getParameter(String name): 获取一个请求参数的值, name是请求参数名
getParameterValues(String name):获取一组请求参数的值,针对表单中的checkbox就用这个方法获取同名称的多个checkbox选中的一组值
<%
//解决POST请求的中文乱码
request.setCharacterEncoding("UTF-8");
//获取请求参数的值
String sitename = request.getParameter("sitename");
String url = request.getParameter("url");
String[] citys=reques宠物坟场t.getParameterValues("city");
for(String str:citys){
out.print("校区:"+str+"<br>");
}
%>
7.学生信息crud项目在昨天项目的基础上,加入学生信息的添加,修改,删除功能
添加学生添加学生的步骤如下:
在列表页面上给出添加的超链接<a href="add.jsp">添加学生</a>
在添加页面add.jsp上用一个表单来收集输入的学生信息<皇竹草;h2>添加学生</h2>
<form action="doAdd.jsp" method="post">
姓名:<input type="text" name="sname"><br>
性别:<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女<br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="添加">
</form>
在doAdd.jsp上处理添加学生的请求<%
//处理添加请求的步骤:
//1.获取表单中的所有请求参数的值
//解决post请龙头股票求的中文乱码
request.setCharacterEncoding("UTF-8");
String sname = request.getPa苍术图片rameter("sname");
String sex = request.getParameter(ceg4;sex");
int age = Integer.parseInt(request.getParameter("age"));
//2.把参数的值封装成学生对象
Student stu = new Student(sname, sex, age);
//3.调用dao里面的insert方法,完成添加
StudentDao stuDao = new StudentDaoImpl();
int i = stuDao.insert(stu);
if (i > 0) {
//添加成功,重新请求list.jsp
response.sendRedirect("list.jsp");
}
%>
修改学生修改学生的步骤如下:
1)在列表页面list.jsp上每一行学生数据后都加上”修改”超链接,将id参数传递到update.jsp上
<a h双显卡笔记本ref="update.jsp?sid=<%=stu.getSid() %>">修改</a>
在updte.jsp页面上回显学生信息<%
//获取要修改的学生的id
int id=Integer.parseInt( request.getParameter("sid")) ;
//根据id查询一个学生对象
StudentDao stuDao=new StudentDaoImpl();
Student stu= stuDao.queryById(id);
%>
<form action="doUpdate.jsp" method="post">
<!-- 在修改页面上要回显学生编号,有2种方式: 1)用只读的文本框 2)用隐藏域 -->
编号:<input type="text" name="sid" value="<%=stu.getSid()%>" readonly><br>
姓名:<input type="text" name="sname" value="<%=stu.getSname() %>"><br>
性别:<input type="radio" name="sex" value="男" <%=stu.getSex().equals("男")?"checked":"" %>>男
<input type="radio" name="sex" value="女" <%=stu.getSex().equals("女")?"checked":"" %>>女<br>
年龄:视得乐<input type="text" name="age" value="<%=stu.getAge()%>"><br>
<input type="submit" value="修改">
</form>
回显:就是把原始数据再显示一次,如果是输入框(文本框,密码框),就用value属性来回显 value=”xxx”;如果是radio,就用checked来回显;如果是下拉列表框select,用selected来回显
在doUpda防爆胎te.jsp上处理修改请求<%
//防止POST请求的乱码
request.setCharacterEncoding("UTF-8");
//获取表单中的参数值
String sname = request.getParameter("sname");
String sex = request.getParameter("sex");
int age = Integer.parseInt(request.getParameter("age"));
//获取sid
int sid = Integer.p宽松世代又如何arse校园论坛Int(request.getParameter("sid"));
//把参数的值封装成学生对象
Student stu = new Student(sname, sex, age);
stu.setSid(sid);
//调用dao里的修改方法,完成修改
StudentDao stuDao = new StudentDaoImpl();
int i = stuDao.update(stu);
if (i > 0) {
//修改成功,重新请求list.jsp
response.sendRedirect("list.jsp");
}
%>
删除学生删除学生的步骤如下:
.在列表页面list.jsp每一行学生数据后添加一个删除的超链接,让它只响应js事件,不要发生跳转<a href="javascript:void(0)" onclick="deleteById(<%=stu.getSid() %>)">删除</a>
Js函数
<script>
function deleteById(id){
//使用confirm弹出一个确认取消对话框
var flag= confirm("是否确认删除此信息?");
if(flag){
//发请求给jsp页面去处理删除,相当于get广东自驾游请求, location.href:改变结婚礼物(设置)地址栏上的url
location.href="doDelete.jsp?sid="+id;
}
}
</script>
在doDelete.jsp页面上处理删除请求<%
int sid=Integer.parseInt(request.getParameter("sid"));
//调用Dao里的删除方法,完成删除
StudentDao stuDao=new StudentDaoogreImpl();
int i= stuDao.delete(sid);
if(i>0){
//删除成功,重新请求list.jsp
response.sendRedirect("list.jsp");
}
%>
本文发布于:2023-06-04 07:37:43,感谢您对本站的认可!
本文链接:http://www.ranqi119.com/ge/85/214546.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |