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进行投诉反馈,一经查实,立即删除!