Java web

1.动态网页,静态网页
2.BS,CS架构
3.Tomcat 服务器 解压目录
bin:可执行文件 startup.bat shutdown.bat
conf:配置文件 server.xml
lib:日志文件
temp:零时文件
webapps:可执行项目
work:存放.java,.class
4.配置Tomcat
虚拟路径:a:server.xml Host中添加<Context docBase = "" path = ""/> docBase 实际路径 path 虚拟路径
b:Catalina/localhost中新建“项目名”.xml ,写同样的配置语句
5.页面元素:
a:html,JavaScript,脚本语言
b.指令:<%@ page %>
language:jsp使用的脚本语言
import:导入类
pageEcoding:jsp文件自身的编码
contentType:页面编码
c:注释 html注释<!-- --> java // jsp <%-- --%>
6.jsp内置对象 (9个不需要new也可以用)
out:向客户端输出内容

pageContext:
 
request:请求对象。包含客户端向服务器发送的消息
方法:String getParameter(String key)  String [] getParameterValues(String key)
void setCharacterEncoding(String coding):设置post方式请求编码 默认utf-8(tomcat8以后)
getRequestDispatcher("a.jsp").forward(request,response) 请求转发跳转,数据不会丢失,但是地址栏不会变
getServerContext() 获取当前项目的ServletContext对象
提交方式:get,post
get会将请求信息暴露在地址栏,post不会,get最多能容纳5kb信息,信息过多会报错,涉及大文件必须使用post方式
get方式出现乱码:修改server.xml中URIEcoding
post方式出现乱码:通过setCharacterEncoding方法设置编码
 

response:响应对象。服务端对客户端的响应消息
方法:
void addCookie():服务端向客户端增加一个cookie对象
void sendRedirect(String location) throws IOException:页面重定向,数据丢失
void setContentType(String type):设置服务端响应的编码
 
 
session:
Cookie(客户端的,不是内置对象):Cookie由服务端生成,再发送给客户端保存,相当于本地缓存,可以提高访问效率,由键值对组成
服务端:response.addCookie()-->转发请求或者重定向-->客户端:request.getCookie();
session(会话,服务端,内置对象):当客户端第一次访问服务端时会为客户端生成一个session对象,该对象有一个sessionId,然后服务器会将该sessionId复制一份保存在Cookie中,name为JSESSIONID,并将该Cookie添加到response中,返回客户端;也就是说每一个客户端在第一次访问后都有一个唯一的JSESSIONID与服务器的session相对应
Cookie与session的区别:
1.Cookie在客户端,session在服务端,session更安全
2.Cookie中保留String,session中以Object保存
3.Cookie不是内部对象,需要new才能使用,session不与要new
application:全局对象
config:
page:
exception:
四种范围对象:由小到大   作用域
pageContext:页面对象(也称)  当前页面
request:请求对象    同一次请求(请求转发是同一次请求,重定向不是)
session:会话对象    同一次会话
application:全局对象   全局(整个项目运行期间)
共有方法:Object getAttribute(String name) void setAttribute(String name,Object value) 添加或者修改
void removeAttribute(String name)
对象范围越大性能开销越大
 
7.JDBC:java database connectivity
Java-->JDBC API-->JDBC DriverMannager-->各种数据库驱动Driver-->各种DATABASE
JDBC API:提供各种操作访问接口,Connection Statement PreparedStatement ResultSet
 0,初始化驱动
 Driver
 1,建立连接
 DriverMannager Connection
 Connection connection = DriverMannager.getConnection(连接字符串,用户名,密码)
 2,发送SQL语句
 ---Statement
 Statement s = connection.createStatement();
 s.executeUpdate(String sql);
 ResultSet set = s.executeQurey(String sql);
  
 ---PreparedStatement 
 PreparedStatement ps = connection.prepareStatement(String sql);
 ps.setXXX();
 ps.executeUpdate();
 ps.execureQuery();
 
 ---CallableStatement
 CallableStatement cs = connection.prepareCall(Procedure/Function);
 Procedure:{ call procedure(?,?,?)}
 cs.setXXX();
 cs.registerOutParameter(int index,Type type);
 cs.execute();
 cs.getXXX();
 Function:{?= call function(?,?)}
 cs.setXXX();
 cs.registerOutParameter(int index,Type type);
 cs.execute();
 cs.getXXX();
 
 3,返回处理结果
 ResultSet
JDBC DriverMannager:管理不同的数据库驱动
数据库驱动:由各个数据库开发商提供,用来直接操作数据库
数据库   驱动类    连接字符串
Oracle  oracle.jdbc.OracleDriver  jdbc:oracle:thin:@localhost:1521:数据库名
MySQL  com.mysql.jdbc.Driver  jdbc:mysql://localhost:3306/数据库名
SQLServer com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:microsoft:sqlserver:localhost:1433;databasename = 数据库名
8.数据库处理CLOB[TEXT]/BLOB类型
a.存储文件路径
b.CLOB:大文本数据(小说) BLOB:二进制文件
----CLOB
用PreparedStatement,用占位符?表示小说
ps.setCharacterStream(int index,Reader reader,file.length());写入的是文件流
set.getCharacterStream(String name);读取处Reader
---BLOB
ps.setBinaryStream(int index,InputStream in,file.length());写入的是文件流
set.getBinaryStream(String name);读取出Input Stream
9.jsp访问数据库
导包:java:1.复制jar包 2.add to build path
jsp:只需要复制到工程目录的WEB-INF/lib下
10.JavaBean
在jsp文件中引用的Java类,满足两点:1.public修饰的类,public的无参构造方法 2.所有属性(如果有)都是private,并提供相应的getter和setter(boolean的getter可以是isXXX)
优点a.减轻jsp文件的复杂度 b.提高代码复用率
分成两类:
1.封装业务逻辑javabean
2.封装数据javabean
11.MVC设计模式
M:Model 模型
各种功能,如登陆验证 ,用javabean实现
V:View 视图
负责页面显示,人机交互,html,css,jsp,javaScript
C:Controller 控制器
接收各种请求,将各种请求提交到模型;模型处理完毕后,再将处理后的结果返回给请求处,用servlet实现
基本过程:View发出请求-->Controller选择请求对应的模型-->使用特定的模型进行处理-->返回处理结果-->选择对应的View
12.Servlet :
手工版本:
1.必须继承javax.servlet.http.HttpServlet
2.重写其中的doGet()和doPost()方法
3.如果servlet是2.5版本,必须配置web.xml
在web.xml中添加以下信息:
<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.xiao.myservlet.MyServlet</servlet-class>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
 
  </servlet-mapping>
请求过程:请求---> <url-pattern>---> <servlet-mapping>的<servlet-name>---> <servlet>的<servlet-name>---> <servlet-class>--->对应类
   如果是3.0版本,必须添加@WebServlet(<url-pattern>)注解
@interface WebServlet{
 String value();
}
借助eclipse自动生成
相对目录:WebContent,src(构建目录)
/:根路径
web.xml中的/代表项目根路径localhost:8080/projectname/
jsp中的/代表服务器的根路径:localhost:8080/

13.Servlet生命周期
加载------初始化----------服务----------销毁----------卸载
加载和卸载:Servlet容器自动处理
初始化:init方法,该方法只会在Servlet容器被加载并实例化后调用一次,默认在访问Servlet时才会执行,可通过load-on-startup设置TomCat启动时自动启动;2.5修改web.xml  3.0在注解中添加loadOnStartup的值
服务:通过doGet和doPost方法
销毁:destroy方法,Servlet被系统回收时执行,关闭Tomcat时关闭

14.初始化参数
ServletContext(application)初始化参数:在web.xml中添加<servlet-param>
Servlet:初始化参数:2.5在<servlet>中添加<init-param>;3.0在Servlet类注解中添加initParams的值

15.三层架构
表示层:USL,User Show Layer(视图层)
与用户交互,并根据用户请求执行各种逻辑操作
业务逻辑层:BLL,Business Logic Layer(Service层)
为各种原子操作添加逻辑
数据访问层:DAL,Data Access Layer(Dao层)
访问数据库,原子性操作
16.优化
1.首先编写对应方法的接口,再写实现类,命名规范:接口 IXxxDao,IXxxService 实现类 XxxDaoImpl,XssServiceImpl,面向接口编程:父接口引用指向实现类对象
2.创建工具类,Utils,重构函数
17.分页查询
通过limit,每次查询一页的数据,建工具类page
18.文件上传与下载
文件上传:需要两个jar包,apache的commons-fileupload和commons-io包
步骤:为request和response设置编码-----通过isMutilPartContent判断是否请求是否包含文件-------如果有文件的话先创建DiskFileItemFactory的对象factory,将factory传入ServletFileUpload的构造方法创建upload对象-----通过upload的parseRequest解析请求得到items的list,区分文件和普通字段-----通过通过文件item的write(file)方法将request中的文件写入file中
注意:可以通过factory的setSizeThrehold(int Size)方法设置临时文件缓冲区大小文件的大小限制,通过setRepository设置临时文件地址,通过文件后缀限制文件类型,通过upload的setMaxFileSize(long size),这些操作必须在解析前执行
文件下载:不需要额外jar包
步骤:设置响应头
response.setHeader("content-type", "application/octet-stream");
response.setHeader("content-Disposition", "attachment;filename=" + fileName);
获取输入流 InputStream in = getServletContext().getResourceAsStream("/res/" + fileName);
获取输出流 OutputStream out = response.getOutputStream();
向输出流中写入数据 in--->out
注意:如果文件名有中文的话会乱码,对于不同的浏览器有不同的解决方案,通过request的请求头获得浏览器信息
对于edge:response.setHeader("content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
对于firefox:response.setHeader("content-Disposition", "attachment;filename==?utf-8?b?" + new String(Base64.encodeBase64(fileName.getBytes("utf-8"))) + "?=");

19.EL表达式 Expression Language
${xxx.xxx} 或 ${xxx[xxx]}
1.访问范围对象
pageScope   requestScope  sessionScope  applicationScope                                                                             
2.访问环境对象
param   paramValues cookie  header  headerValues
3.获取jsp默认对象
通过pageContext.xxx

20.JSTL标签库  比EL更强大  需要两个jar包:jstl和standard
引入taglib
<%@ taglib uri = "..." prefix = "c" %>
核心标签库:通用标签库、条件标签库、迭代标签库
a、通用标签库
1.给普通变量赋值(修改,添加)
<c:set  var   value     scope(四个范围对象) />
2.给范围对象的属性或者map对象的key赋值(对象必须存在,修改)
<c:set target(对象)  property(属性或key)  value />
b、输出 
<c:out value=""  default = "" escapeXml = "true or false"/> 如果value为null,则显示默认值,escapeXml为true时将xml语句显示本来的文字,否则当成xml语句处理
c、删除
<c:remove var=""  scope = "" />
d、选择
单重if
<c:if test = "${10>2}">显示内容</c:if>
多重if
<c:choose>
 <c:when test = "...">  </c:when>
 <c:when test = "...">  </c:when>
 <c:when test = "...">  </c:when>
 <c:otherwise>   </c:otherwise>
</c:choose>
注意test中的空格,会影响结果
e、循环  遍历
<c:foreach begin = "" end = "" step = "" varStatus = ""status> 
 ${status.index}(序号)
</c:foreach>
<c:foreach var = "name" item = "array">
 ${name}(遍历array)
</c:foreach>
21、过滤器 fliter
客户端<------>过滤器<------>服务器
 
 

posted on 2018-11-27 20:10  -Yoda-  阅读(79)  评论(0编辑  收藏  举报

导航