日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

20180105随笔

發布時間:2023/12/2 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20180105随笔 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
過濾器的執行過程:
// 目標資源執行前執行
chain.doFilter(request, response);
// 目標資源執行后執行

文件上傳的前提:
1.表單的method方法必須是post
2.表單的enctype類型必須是:multipart/form-data
3.表單中input的上傳輸入域為:<input type="file"/>
<form method="post" enctype="multipart/form-data>
name:<input type="text" name="name"/>
file:<input type="file" name="upLoad"/>
<input type="submit" value="up"/>
</form>
form表單的enctype屬性,該屬性的作用是用來告知服務器,請求正文內容是MIME類型,相當于Content-type
利用第三方組件實施文件上傳,apache:commons-fileupload.jar,依賴:commons-io.jar
代碼:
// 檢查form的enctype是否是multipart類型
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(!isMultipart)
throw new RuntimeException("文件類型不符")
// 解析請求內容,磁盤文件條目工廠
DiskFileItemFactory factory = new DiskFileFactory();// 產生FileItem的工廠
ServletFileUpload sfu = new ServletFileUpload(factory);
// 建立一個數據結構,用于存儲FileItem的數據
List<FileItem> items = new ArrayList<FileItem>;
try{
// 對請求進行解析,吧解析的內容放入到items里面
items = sfu.parseRequest(request);
}catch(FileUploadException e){
throw new RuntimeException("failed");
}
// 對items的數據進行遍歷取出
for(FileItem item:items){
// 普通字段
if(item.isFormField()){
processFormField(item);
}else{
processUploadField(item);
}
}
上傳中考慮的幾個問題
1.將文件放到用戶訪問不到的地方(WEB-INF目錄下)
2.重復名字文件被覆蓋的問題,把文件名做成唯一,UUID:通用唯一標識碼。a.txt--->UUID-a.txt
3.避免一個文件夾中的文件過多
1)按照日期分目錄存儲
2)按照文件名的hashCode隨機生成目錄
int hashCode = fileName.hashCode();
int dir1 = hashCode&0xf;
4.文件大小的限制
web文件上傳的內容不宜過大,就是要對工廠的容量進行限制
1)限制單個文件的大小
sfu.setFileSizeMax(3*1024*1024);
2)限制整個文件的大小
sfu.setFileMax(5*1024*1024);
try{
items = sfu.parseRequest(request);
}catch(FileUploadBase.FileSizeLimitExceededException e){
response.getWriter().write("must small 3M");
}catch(FileUploadBase.SizeLimitExceededException e){
response.getWriter().write("sum must small 5M");
}
ServketContextListener
ServletContextListener
HttpSessionListener
HttpSessionListener
ServletRequestListener
ServletRequestListener
ServletContextAttributeListener
ServletContextAttributeListener
HttpSessionAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener
HttpSessionBindingListener
HttpSessionActivationListener
AJAX引擎:XMLHttpRequest
JSON:js對象標記,js Object Notation

List<String> list = new List<String>;
list.add("a");
list.add("b");
list.add("c");
JSONArray json = JSONArray.fromObject(list);

public class CreateDeng{
// 泛型使用之前必須聲明
// <T>就是聲明泛型類型,放在返回值的前面
public <T> T v1(){
return null;
}
public <T> void m2(T t){
}
public <T> void m3(class<T> t){
}
}
// 類上聲明泛型,實例方法中就可以使用了
public class CreateDeng<T>{
public T m1(){
return null;
}
public void m2(T t){
}
public void m3(class<T> t){
}
// 對于靜態方法必須都是先聲明后使用
public static <T> void m4(class<T> t){
}
public static <K,V> K m5(V v){}
}
低點:1302.2
高點:1310.1
點差:7.9
7.9×0.382=3.0178---->1310.1-3.01=1307.09
7.9×0.5=3.95---->1310.1-3.95=1306.15
hibernate.cf.xml
<hibernate-configuration>
<session-factory>
<!--JDBC基本鏈接-->
<properties name="hibernate.connection.driver_class>com.mysql.jdbc.Driver</properties>
<properties name="connection.username">root</properties>
<properties name="connection.password">sorry</properties>
<properties name="connection.url">jdbc:mysql:localhost:3306/day22</properties>
<!--配置數據庫方言-->
<properties name="dialect">com.hibernate.dialect.MySQLDialect</properties>
<properties name="hibernate.hbm2ddl.auto">update</properties>
<!--顯示sql的語句及格式>
<properties name="hibernate.show_sql">true</properties>
<properties name="hibernate.format_sql">true</properties>
<!--告知映射文件>
<mapping resource="../Student.hbm.xml"/>

</session-factory>
</hibernate-configuration>
I not know how to get the money
200dao*4=800kuajin
Student.hbm.xml
<hibernate-mapping>
<class name="Student" table="STUDENTS">
<id name="id" column="ID">
<!--根據數據庫的能力管理主健-->
<generate class="native"></generate>
</id>
<properties name="name" column="NAME"></properties>
<properties name="birthday" column="BIRTHDAY"></properties>
</class>
</hibernate-mapping>
制定自己的三年規劃:
2018年,存款10W+;2019年,買一套房,付首付;2020年,買一輛自己的愛車奧迪A4L。無論想什么辦法都要實現!!!
Dao.java
public Dao<T>{
void add(T t);
void update(T t);
// 根據主健查找對象
T findOne();
// 根據主健刪除對象
void delete(Serializable id)
}
CustomerDao.java
public interface CustomerDao extends Dao<Customer>{
List<Customer> findPageCustomer(int startIndex, int size);
}
config.properties文件用來當作配置文件,通常為用于提供系統參數配置,方便用戶對系統參數進行調整,通常以鍵值對的形式存在
maven 軟件項目管理工具
xxx.hbm.xml類實體映射文件:
hibernate.cfg.xml 核心配置文件:數據庫配置信息
這個其實也沒有什么意思,這個算是一種約定
就像我們中國人的名字都是第一個字是姓,后面的是名一樣
我們用這樣的命名一眼就可以看出來是hibernate的映射配置文件,
當然如果我們其他的xml配置文件也用這樣的格式命名也是可以的,但是這樣相當于一種約定,一種命名規范一樣
uuid通用唯一識別碼:在xxx.hbm.xml文件中,用于配置主健
java 中@的使用
1.javadoc 文檔關鍵字
/*
*@author
*@date
*/
自動生成API文檔,標注作者,版本,日期,相關參數等
2.java annotation /java 標注
語法:@關鍵字(值)
用于把關鍵字和值傳遞給編譯器,更加精確地控制編譯器的動作
關鍵字隨著技術、框架、編譯器的不同而不同,比如@Override,說明會重寫父類的該方法
@Deprecated 表示當前元素是不贊成使用的
@SuppressWarning 表示忽略一些不當的編譯器信息
src/main/java:存放java文件
src/main/resource:存放配置文件
src/test/java:存放測試的java文件
src/test/resource:存放測試的資源文件
src/main/webapp:存放jsp,images,js等文件
src/main/webapp:存放jsp,images,js等文件
FCK文本編輯框,js進度條,js文本框,js使用highslideJs
// 使用InputStream輸入流讀取到path下的文件,將輸入流InputStream寫到輸出流(response對象中獲取)中
InputStream in = new InputStream(new File(ServletActionContext.getServletContext.getRealPath(""), path));
OutputStream out = response.getOutputStream();
while(int b=-1;(b=in.read())!=-1){
out.write(b);
}
out.close();
in.close();
//${}:EL表達式表示你從另外一個頁面獲得的參數值
style="CURSOR:hand"// 當鼠標懸浮在標簽上表現為手形
timestamp:時間戳,是一個數據,一個能夠表示在某個時間之前已經存在的、完整的、可驗證的數據,通常是一個字符序列,
唯一表示某一時刻的時間。
"${pageContext.request.contextPath}/image.jsp?timestamp="+new Date().getTime()
timestamp表示一個參數,一個叫時間戳,瀏覽器會判斷當前請求路徑是否發生改變,如果沒有改變,它會提取緩存中的數據,
而不是重新去請求。加上時間戳,保證每次請求的路徑不一樣。
function checkNumberImage(){
// 獲取標簽
var imageNumber = document.getElementById("imageNumber");
imageNumber.src = "${pageContext.request.contextPath}/image.jsp?timestamp="+new Date().getTime();
}
Random rand = new Random();
String sRand = "";
for(int i=0;i<4;i++){
String rand = String.valueOf(rand.nextInt(10));
sRand += rand;
}
session.setAttribute("CHECK_NUMBER_KEY",sRand);
//ImageIO:用來進行簡單的圖片IO操作,一個是讀(read),另一個是寫(write)
1.read:
File file = new File("c:/test/a.jpg");
BufferedImage bi = ImageIO(file);
2.write:
RenderedImage的子類是BufferedImage,傳遞子類直接實例化父類
public static boolean write(RenderedImage im, String formatName, File output);
public static boolean write(RenderedImage im, String formatName, OutputStream output);
public static boolean write(RenderedImage im, String formatName, BufferedOutputStream output);
// public static boolean isBlank(String str):是否為空(null),長度為0,由空白字符(whitespace)等組成
StringUtils.isBlank(null)=true;
StringUtils.isBlank("")=true;
StringUtils.isBlank(" ")=true;
// public static boolean isEmpty(String str):判斷為空,標準是String str=null或者String str.length()==0
StringUtils.isEmpty(null)=true;
StringUtils.isEmpty("")=true;
StringUtils.isEmpty(" ")=false;
equalsIgnoreCase
public boolean equalsIgnoreCase(String anotherString)
將此字符和另一個字符忽略大小寫后進行比較,返回布爾值
// 從網頁獲取數值
request.getParameter(xxx)
// 從session獲取數值
request.getSession().getAttribute(xxx);
public class loginUtil{
// remember me
public static void rememberMe(String name, String password, HttpServletRequest request, HttpServletResponse response){
// 建立兩個Cookie,存放指定值
Cookie nameCookie = new Cookie("name",name);
Cookie passwordCookie = new Cookie("password", password);
// 設置Cookie的有效路徑(當前項目)
nameCookie.setPath(request.getContextPath()+"/");
passwordCookie.setPath(request.getContextPath()+"/");
// 設置cookie的生存時間
// 先獲取頁面用戶選定記住我的復選框的值
String rememberMe = request.getParameter("remember");
// 復選框選定
if(remember!=null && remember.equals("yes")){
// 生存時間為7天
nameCookie.setMaxAge(7*24*60*60);
passwordCookie.setMaxAge(7*24*60*60);

}
// 復選框沒有選定
else{
nameCookie.setMaxAge(0);
passwordCookie.setMaxAge(0);
}
// 將Cookie添加到response中
response.addCookie(nameCookie);
response.addCookie(passwordCookie);

}
}
// 在頁面中讀取cookie數據,嵌套java代碼
<%
String name = ""'
String password = "";
String checked = "";
// 獲取請求的cookie
Cookie[] cookies = request.getCookies();
if(cookies!=null && cookies.length()>0){
// 遍歷數據,獲取想要的cookie
for(Cookie cookie:cookies){
if(cookie.getName().equals("name")){
name = cookie.getValue();
checked = "checked"
}
if(cookie.getName().equals("password"){
password = cookie.getValue();
}
}
}
%>
// 要知道,每次訪問URL鏈接的時候,先執行過濾器的doFilter方法
// this永遠表示當前對象,在jsp中,this就是指9大內置對象的page,Object page = this
request.setAttribute("name",name)
URLEncoder.encode(name,"utf-8");
URLDecoder.encode(name,"utf-8");\
URLDecoder:HTML編碼的實用工具類

// 在域對象內,進行存值和取值
在action中將數據放到值棧中,然后在頁面中從值棧中取值
每次訪問action就創建一次值棧,一個action只有一個值棧
棧結構:root對象棧,context叫做Map棧,放入元素,壓棧
值棧分為兩個部分,root部分和context部分
ValueStack s = ActionContext.getContext().getValueStack();
s.set("username","fireman");
// 訪問控制系統必須要存在session,這樣可以記錄用戶信息,服務器獲取用戶登錄后的session,如果為空,則跳轉到登錄頁面
如果session不為空,直接方形
// 如果在action,service,dao中出現異常,使用catch進行異常捕捉,使用log4j將異常存放到指定的日志文件中,通過return "errorMsg"
跳轉到錯誤頁面

// 粗粒度的權限控制,采用過濾器,精確到session的控制權限,判斷session是否存在。如果session不存在就跳轉到首頁,如果存在可以通過URL鏈接訪問對應的操作
// 細粒度的權限控制,采用struts2的攔截器,控制URL,可以訪問相關的jsp頁面,不可以訪問一個jsp頁面
webservice:用來在多個獨立系統之間,建立一個橋梁
hibernate的二級緩存機制(cache):對應查詢結果相同的數據,可以減少頻繁操作數據庫的操作
sessionFactory:二級緩存:1)類級別緩存;2)集合級別緩存;3)查詢級別緩存;4)更新時間戳緩存
SQL的聯合查詢語句,field理解為字段更為合適
lucene工作原理:
1)索引數據庫原理:
向索引庫中進行增、刪、改的時候:IndexWriter:addDocument(),updateDocument(),deleteDocument()-->創建索引庫:一堆二進制文件;
indexSearcher:從索引中檢索數據searcher()
Document對象
new Field("id");
new Field("name");
new Field("content");
Article對象
id,name,content
索引庫中存放數據的原理
Store:是否將數據存儲到索引庫的數據區域
Index:是否將數據更新到索引庫的目錄區域
使用唯一編號來區分數據的唯一性
數據庫用來存放數據
索引庫用來查詢和檢索
<properties>
<!--配置擴展-->
<common>IK_Analyzer</common>
<entry key="ext_dic">ext.dic</entry>
<entry key="ext_stopwords>stopword.dic</entry>
</properties>
set和get方法可以提高與變量的安全性和封裝性。變量賦值:1)在構造函數內部;2)采用set方法
一般對私有變量進行訪問操作,大多數都是使用在包含大多數屬性的類實體中
<script language="javascript" src="${pageContext.request.contextPath}/script/xxx.js"></script>
new SimpleDataFormat
Content-Disposition:MIME類型指定代理如何顯示附加文件。服務器向瀏覽器發送文件時,如果用戶需要保存,
可以使用該設置進行文件保存,但是必須要附加上:attachment;filename="xxx";
也就是確保瀏覽器彈出下載對話框
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
JXL是java操作excel的工具類庫,從文件中獲取excel數據,讀取數據后,將數據寫入到集合中
用戶通過模板導入數據,之后再從模板中讀取數據,將數據保存到數據庫中,excel導入數據
防止表單重復提交:生成一個token,放到:HttpSession;input隱藏域
表單提交:input=111,之后從HttpSession獲取,input隱藏域。
進行對比,一值:保存數據,將HttpSession的數據刪除;不一致,重復提交
webapps:web應用所在的目錄,供外界訪問的web資源的存放目錄。在該目錄下,有幾個文件夾就有幾個目錄
WEB-INF:用戶無法直接訪問。classes:存放編譯好的字節碼文件;lib:存放應用需要的jar包;web.xml配置部署信息
在Tomcat中的lib中的jar包,為所有應用需要的jar包,為所有應用服務
Tomcat中的配置信息:
<Server>:server容器組件,為頂級元素,可以包含一個或者多個<service>元素
<service>:包含一個<engine>,一個或多個<connector>
<connector>:代表實際與用戶交互的組件,接受請求,返回相應
<engine>:每個service只有一個engine引擎,處理客戶的請求
<host>:一個engine有多個host,具有多個應用
<context>:使用最頻繁的元素,代表一個應用
用戶的訪問都是通過Tomcat的鏈接過來的,一個引擎中管理多個主機,一個主機有管理多個應用
配置虛擬主機,在網站需要發布的時候,要對Tomcat服務器進行域名和主機配置,重要目錄為:Tomcat/conf/server.xml
在<engine>標簽中配置:
<Host name="www.deng.com" appBase="e:/appExample"
unpackWARs="true" autoDeploy="true"/>
修改本地hosts文件:C:/Windows/System32/drivers/etc/hosts
name1=value1&name2=value2
只有通過POST提交的方式才能夠看到請求正文,正文的內容是要提交的數據
name=username&password=mypassword&sex=male
請求頭的作用是向服務器傳遞一些附加信息
Accept:告訴服務器,瀏覽器能夠接受的MIME類型
在磁盤中,通過文件名的后綴區分文件類型
在網絡中,通過MIME來區分數據
MIME特點:大類型/小類型,text/plain
1,2,3,4,5
4:訪問的資源不存在
5:服務器內部錯誤,服務程序出現異常
瀏覽器收到服務器的相應,數據都是HTML文件,瀏覽器對HTML文件進行展現
servlet是運行在服務器端的動態資源,能夠接受用戶請求,發出相應
服務器端的編程都是基于http協議的
建立一個servlet,繼承一個javax.servlet.http.HttpServlet抽象類
javax.servlet:通用包
javax.servlet.http:與http協議有關
load-on-startup:一啟動就加載
Servlet關聯:ServletConfig關聯:ServletContext
Servlet依賴:ServletRequest,ServletResponse
GenericServlet實現Servlet
HttpServlet繼承GenericServlet
HttpServlet依賴HttpServletRequest和HttpServletResponse
在配置servlet時候可以配置參數
<servlet>
<servlet-name>Demo1</servlet-name>
<servlet-class>com.deng.Demo1</servlet-class>
<init-param>
<param-name>sex</param-name>
<param-value>male</param-value>
</init-param>
</servlet>
//獲取
ServletConfig cfg = getServletConfig();
cfg.getInitParameter("sex")
//獲取多個值
ServletConfig cfg = getServletConfig();
Enumeration e = cfg.getInitParameterNames();
while(e.hasMoreElements())
{
String value = e.nextElement();
cfg.getInitParameter(value);
}
ServletContext非常重要,每一個應用有一個ServletContext,和應用的生命周期完全一致
實現多個Servlet之間的數據共享,ServletContext里面有一個map結構:key:"P",value:"p1"
Servlet1:ServletContext.setAttribute("P","p1");
Servlet2:ServletContext.getAttribute("P");
...
域表示的是存活范圍
向ServletContext存放東西:public void setAttribute(String a, Object obj)
從ServletContext去東西:public Object getAttribute(String a)
從ServletContext刪除東西:public void removeAttribute(String a)
獲取所有的名稱:Enumeration getAttributeNames();

轉載于:https://www.cnblogs.com/demo-deng/p/8205835.html

總結

以上是生活随笔為你收集整理的20180105随笔的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。