github: https://github.com/Andy888888/javaWeb-Exercise
創建工程
1.創建一個Empty Project
2.添加一個Module,選擇Web Application類型,勾選上Create web.xml
3.在src中添加一個AServlet類,繼承HttpServlet
重寫doGet方法,千萬不能留著super.doGet(req, resp);否則會有405錯誤
下圖是super源碼
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_get_not_supported");
if (protocol.endsWith("1.1")) {
resp.sendError(405, msg);
} else {
resp.sendError(400, msg);
}
}
配置servlet映射
<servlet>:配置servlet類和servlet名稱的映射
<servlet-name>:servlet名稱
<servlet-class>:servlet類的具體class指向,需要全包名路徑
<servlet-mapping>:配置servlet和html中的請求地址
<servlet-name>:servlet名稱
<url-pattern>:html中的請求地址
web.xml示例
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>severlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>
</web-app>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>測試</title>
</head>
<body>
<form action="/loginServlet">
<input id="name" name="name" type="text" />
<input type="submit" value="提交">
</form>
</body>
</html>
web.xml總結
也就是說,一個servlet需要配置兩個根節點,類似兩張表,兩個節點下的servlet-name子節點是關聯字段,兩個節點,描述了servlet的名稱、class類、請求時的url地址。
前后端數據傳遞
后臺獲取jsp提交的數據
String name = request.getParameter("name");
后臺將數據傳遞給jsp
request.setAttribute("student", studentDo);
request.getRequestDispatcher("detail.jsp").forward(request, response);
jsp獲取后臺數據
// student為后臺傳遞值的key
1.${student} <br/>
2.${student.name} <br/>
3.${student["gender"]} <br/>
4.${requestScope.get("student")} <br/>
5.<%=request.getAttribute("student") %> <br/>
EL表達式(Expression Language)
語法結構: ${expression}
價值:取代<% java code %>
這種復雜的方式,使得獲取值等方式更加簡化
pageScope
將頁面范圍的變量名稱映射到其值。例如,EL 表達式可以使用
${pageScope.objectName}
訪問一個 JSP 中頁面范圍的對象,還可以使用${pageScope .objectName. attributeName}
訪問對象的屬性。
requestScope
將請求范圍的變量名稱映射到其值。該對象允許訪問請求對象的屬性。例如,EL 表達式可以使用
${requestScope. objectName}
訪問一個 JSP 請求范圍的對象,還可以使用${requestScope. objectName. attributeName}
訪問對象的屬性。
sessionScope
將會話范圍的變量名稱映射到其值。該對象允許訪問會話對象的屬性。例如:
${sessionScope. name}
applicationScope
將應用程序范圍的變量名稱映射到其值。該隱式對象允許訪問應用程序范圍的對象。
注意事項
1、當要存取的屬性名稱中包含一些特殊字符,如 . 或 - 等并非字母或數字的符號,就一定要使用“[ ]“。例如:
${ user. stu-name}
應當改為${user["stu-name"]}
2、< %=request. getParameter(“username”)% >
等價于${ param. username }
3、例如,但是下面的那句EL語言可以完成如果得到一個username為空,則不顯示null,而是不顯示值.
4、以下執行順序為4 1 2 3。
${requestScope.userlist}
1
${sessionScope.userlist}
2
${applicationScope.userlist}
3
${pageScope.userlist}
4
${userlist}