02.jsp复习
1.servlet调用流程
init只执行一次
service(包含get和post)
destroy(服务器关闭就销毁)
2.共享变量(在servlet继承类写的变量)
使用doGet/doPost可以降低服务器压力,不要service()
if(getMethod.equals("get")) //doGet(); /多一个判断
else if
else
3.携带第一次请求的数据
request.getRequestDispatcher("showMessage").forward(request, response);
4.MVC
Model javaBean
View JSP 展示
Controller 负责计算 servlet 结果放在javaBean
//request和response 设置编码集
request.setAttribute("bean",bean);
//然后请求转发
//必须是request,如果是page,request无法被转发
<jsp:usebean id="bean" class="com.aa.bean" scope="request"/>
<jsp:getProperty name="bean" property="id" />
getServletContext().setAttrxxxx //得到application
PageContext.setxxx
<jsp:useBean id="msg" class="bean.MessageBean" scope="application"></jsp:useBean> //和set最好用于页面配合,set可能得不到值
5.连接mysql
//放驱动到tomcat/lib jdk/jre/lib/ext myeclipse的extended jre
Class.forName("com.mysql.jdbc.Driver")
//时间区域设置?useSSL=false&serverTimeZone=GMT
6.滚动查询
//不开启就不能修改指针
//ResultSet.TYPE_SCROLL_SENSITIVE可上下移动,并且可以更改rs, forward向下移动
rs=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)//ResultSet.CONCUR_UPDATABLE是否回写到数据库
rs.last();//指向最后一行
//怎么得到不重复的int数组,用集合来删除
rs.absolute(1)//定位到指定的数据
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookDatabase", "root", "root");
Statement stmt= conn.createStatement();
Statement stmt1= conn.createStatement();
int res1= stmt1.executeUpdate("update bookList set publishDate='2019-12-26' where name='大学英语'");
int res2 = stmt1.executeUpdate("insert into bookList values('2306084657','春天',35.8,'2020-3-20'),('5777564629','冬日', 29.9,'2019-12-23')");
int res3 = stmt1.executeUpdate("delete from bookList where isbn='93529'");
rs.updateString(1,"aaa");//rs中更新记录
rs.updateRow():
rs.moveToInsertRow();//移动到插入行
rs.updateString(1,"aaa"); //数据插入行
rs.insertRow(): //更新到数据库
out.println("<br>")
7.预编译语句与事务 要么全部都做
PreparedStatement stmt2= conn.prepareStatement("update booklist set publishDate='2021-6-20' where name='高等数学'");
con.setAutoCommit(false); //手动提交
con.commit(); //提交事务
con.rollback(); //回滚
//分布式事务,岂不是全部使用mysql,如果
insert into booklist (isbn,name,price,publishdate) values('92306084659','数据库原理', 56.9,'2019-2-10')
8.日期处理太麻烦了,
response.getWriter().print("<td>"+rs.getString(4).substring(0,10)+"</td>");
//date不能直接new 过期了
Date date=new SimpleDateFormat("yyyy-MM-dd").parse(rs.getString(4));
String date1= new SimpleDateFormat("yyyy-MM-dd").format(date);
9.坑爹之处
1.如果创建新的prepared,rs不能使用,使用处理的数据要立即使用
2.rs.next必须写
3.建议变量业务一起写
10.分页
rs.getColumnCount();//几列
rs.getColumnName();//得到列名
//sum=(m%n)==0?(m/n):(m/n+1)
//当前页 limit(size,size*(curPage-1))
11.数据库连接池(原来的需要手动写url配驱动) 实现DataSource,关闭了就返回到连接池
access是本地的小型数据库
1.在META-INF文件夹创建content.xml(tomcat8要在lib写context.xml文件)
<Context>
<Resource name="sourcename" /> #可以写多个连接池,设置大小驱动,url(& &不能直接用 xml规定),账号密码,超时时间
</Context>
maxActive(最大活跃连接)
maxIdle 空闲
maxWait最大等待时间,毫秒,-1表永久等待
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/bookdatabase"/>
2.java代码
InitialContext initialContext = new InitialContext();
DataSource dataSource = (DataSource) initialContext.lookup("java:comp/env/jdbc/mydb");
Connection conn = dataSource.getConnection();
Statement stmt=conn.createStatement();
ResultSet rs= stmt.executeQuery("select * from booklist");
13.rs判断空不能使用 null 使用rs.getRow();//得到行
jsp传给jsp pageEncoding="UTF-8"不能重复
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
14.文件
//文件/目录
new File("C:/aa.txt");//不涉及文件读写,io
new File("C:/","aa.txt"); //只有文件名,在tomcat/bin
.getName();//得到文件名
.isFile()
.exists()
request.getServletPath();// /aa.jsp
.getContextPath; //项目名 /jsp-demo subString(1)得到名字
.isDirectory();
.getAbsolutePath();//f为空 为tomcat/bin .indexOf("bin") b的下标,得到tomcat path
.canRead()
.length() //大小字节
15.文件读写 可以进行读写
rf= RandomAccessFile("c:/dir/name","rw");
.getFilePointer() //文件位置
.readUTF()
.length()
.seek() //跳跃位置
while((raf=readLine())!=null){
byte b[]= s.getBytes("iso-8859-1")
str.append(new String(b,"utf-8"))
str.append(new String(b))
}
16.文件上传
//前端form设置enctype,记得设置文件名字,由于低版本servlet不支持Part方法,需要在前端设置url以便得到文件名,post的内容是放在请求题里面的,payload就是请求体,无法直接设置参数进去
<form id="form" action="upload?filename=" method="post" enctype="multipart/form-data">
<br>
<input type="file" name="file1" id="file" onclick="getName()" />
<a onclick="getName()">xxx</a>
<input type="hidden" name="filename" id="filename"/>
<input type="submit" />
</form>
</body>
</html>
<script>
setInterval( getName,1000);
function getName(){
var file=document.getElementById("file");
var filename=document.getElementById("filename");
var form=document.getElementById("form");
form.action="upload?filename=";
var arr=file.value.split("\\")
console.log(arr[arr.length-1]);
form.action="upload?filename="+arr[arr.length-1];
}
</script>
//后端得到流
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String filename=request.getParameter("filename");
String subfix=filename.substring(filename.indexOf("."));
response.setContentType("text/html;charset=utf-8");
InputStream in=request.getInputStream();
String uuid=UUID.randomUUID().toString();
RandomAccessFile rFile=new RandomAccessFile("d:/2000/"+uuid+subfix,"rw");
byte b1[] = new byte[1024];
int num=-1;
while((num=in.read(b1))!=-1){
rFile.write(b1);
}
rFile.close();
response.getWriter().print("文件上传成功");
}
17.文件下载。
String path=request.getParameter("filename");
;
String filename=path.substring(path.lastIndexOf("/"), path.length());
response.setHeader("Content-disposition","attachment;filename="+filename );
File f=new File(path);
FileInputStream fis=new FileInputStream(f);
OutputStream os=response.getOutputStream();
int b;
while((b=fis.read())!=-1){
os.write(b);
}
os.close();
fis.close();
18.坑
servlet乱码
response.setContentType("text/html; charset=utf-8");
jsp代码是先执行java代码还是页面代码? 先执行页面渲染在执行java代码
tomcat启动慢删除几个项目,因为webapps文件夹会部署几个项目,如果要进一步提升速度要jvm调优,和调整线程池测试
19.错题
关于JavaBean正确的说法是:( A )
A、Java文件与Bean所定义的类名可以不同,但一定要注意区分字母的大小写
B、在JSP文件中引用Bean,其实就是用jsp:useBean语句 //使用java代码也可以,不一定要标签
C、被引用的Bean文件的文件名后缀为.java //class
D、Bean文件放在任何目录下都可以被引用
2.没有param不能设置属性值
下面哪项是错误的设置Bean属性值的方法( B )
A、<jsp:setProperty name=“beanInstanceName” property= “*” />
B、<jsp:setProperty name=“beanInstanceName” property=“propertyName”/>
C、<jsp:setPropertyname=“beanInstanceName” property=“propertyName” param=“parameterName”/>
D、<jsp:setProperty name= “beanInstanceName” property= * value={string | <%= expression %>} />
- Model和封装都可以 ,定义是Model,作用是封装
在MVC设计模式中,JavaBean的作用是(C)。
A、Controller
B、Model
C、业务数据的封装
D、View
4.到期选session
( B )范围将使Bean一直保留到其到期或被删除为止。
A、page
B、session
C、application
D、request
JSP开发网站的两种模式分为___和___。
正确答案:
第一空:
jsp+javabean
第二空:
jsp+javabean+servlet
如果你只希望你的Javabean在当前页面有效,应该设置___。
正确答案:
第一空:
scope=“page”
7.公用目录是WEB-INF 或 public ,私有目录是src目录(编译后)
Javabean的部署有两种方式,一种是公有目录下,一种是私有目录下。(对)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!