六、Java Web模塊
0. 如何讓 Servlet在服務器啓動時就實例化?
在 web.xml中有加載項配置 <load-on-startup>0</load-on-startup>
;默認值爲 -1,負數時表示當此 Servlet被請求時(即有用戶訪問時)纔會被加載;≥0時表示當此應用程序部署到 tomcat服務器(或其他服務器時)(即此應用被加載時)就會被加載,就會創建它的實例,調用其初始化方法(init());
初始化方法 init( ) 只調用一次,service()調用多次,destory()對於銷燬兩種情況:
① 此 web應用程序被重新加載;(重新創建 servelt實例,前面實例化的 servlet實例都會被銷燬,調用其 destory( ))
② 此 web應用所在的服務器停止了。
創建一個 Servlet 的過程?
① 繼承 HttpServlet;
② 重寫 Servlet /doGet() /doPost();
③ web.xml中配置;
多用註解:eg:
@WebServlet("/admin")
public class AdminServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String op=req.getParameter("op");
String tel=req.getParameter("tel");
String password=req.getParameter("password");
Admin admin=new Admin();
admin.setTel(tel);
admin.setPassword(password);
if ("regist".equals(op)){
doRegist(req,resp,tel,admin);
}else {
doLogin(req,resp,admin);
}
}
}
Servlet 應用過濾器和監聽器
@WebFilter("/*")
public class EncodingFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
chain.doFilter(req,resp);
}
public void destroy() {
}
}
@WebFilter("/*")
public class InitDataFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)request;
List<Book> books= ServiceFactory.getService("book").findAll();
req.setAttribute("books",books);
chain.doFilter(req,resp);
}
}
public class TransactionFilter implements Filter{
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
try {
TransactionManager.begin();
chain.doFilter(req,resp);
TransactionManager.commit();
} catch (IOException e) {
TransactionManager.rollback();
}
}
public void destroy() {
}
}
1. JSP和 Servlet的區別?
① jsp編譯後就是 servlet,因此 jsp本質上就是 servlet;
② jsp常用作展示層,servlet常用作控制層;
③ jsp容易編寫,servlet專業技術要求較高;
④ 最大不同在於:同下;
2. JSP的九大內置對象?
3. JSP的四種作用域?
3_1. JQuery對象與DOM對象如何轉換?
DOM——>JQuery: $(DOM對象) JQuery對象的製造工廠;
JQuery——>DOM: 通過 [index]、get[index];
3_2. JSP的生命週期
① jsp生成 .java文件;
② 編譯成 .class文件;
③ 加載 jsp.class類;
執行 class文件:
④ 實例化;
⑤ 初始化(jsp init);
⑥ 處理請求(jsp service);
⑦ 銷燬(jsp destory)
3_3. JSP中動態包含與靜態包含區別?
靜態包含:<%@ include file="1.jsp"%>
;用 include指令,發生在 jsp —> java文件階段即包含的動作是在 jsp被編譯成 java文件時執行的,只有第一次請求時執行,只生成一個 .java文件,不能動態傳遞參數;(a先將 b包含進來再一起編譯)
動態包含: <jsp:include page="1.jsp"...>
;用<jsp:include>
,發生在執行 class文件階段動態加入即包含的動作是在 jsp對應的 servlet處理請求時執行的,每次請求都會執行,生成多個 java文件,可以使用標籤傳遞參數,在被包含頁面中獲取;(動態包含是2個文件,jsp編譯生成2個 .java文件,再動態包含進來即先分開編譯再包含)
4. 轉發 forward 和 重定向 redirect有什麼區別?
① 地址欄: 轉發 url地址不變,重定向 url地址會變;
② 瀏覽器發送了幾次請求: 轉發:1次,重定向:2次;
③ 是否可進行 request數據共享:
轉發:兩個資源間是同一個 request對象,可共享 request中的數據;
重定向:兩個資源間不是同一個 request對象,不可以共享;
④ 轉發不支持跨域(當前工程內部跳轉),重定向可支持跨域。
5. GET請求 和 POST請求的區別?
① 攜帶請求參數的方式:
Get:通過請求頭攜帶參數,參數會顯示在 url地址欄;
Post:通過請求體攜帶參數,參數不會顯示在地址欄,更安全;
② 服務器端處理請求的方法:
Get:會調用 Servlet的 doGet()來處理請求;
Post:會調用 Servlet的 doPost()來處理請求;
③ 數據的大小與限制:
Get傳遞參數大小有限制(<2k);
Post傳遞參數大小沒有限制;
------------------------------------------------------------------------------------------
6. session的工作原理?
7. session和 cookie的區別?
8. 如果客戶端禁止 cookie能實現 session還能用嗎?
session和 cookie的區別?
------------------------------------------------------------------------------------------
9. springMVC和 struts的區別?
10. 如何避免 SQL注入?
11. 什麼是 XSS攻擊?如何避免?
12. 什麼是 CSRF攻擊?如何避免?
CSRF代表跨站請求僞造。這是一種攻擊,迫使最終用戶在當前通過身份驗證的Web應用程序上執行不需要的操作。CSRF攻擊專門針對狀態改變請求,而不是數據竊取,因爲攻擊者無法查看對僞造請求的響應。