一、跳轉
轉發
用法:req.getRequestDispatcher(“目標文件”).forward(req, resp);重定向
用法:resp.sendRedirect(“目標文件”);- 兩者的區別
(1)轉發不會修改地址,重定向會
(2)轉發只有一次請求,重定向會在發一個請求到新的頁面
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost```");
System.out.println("正在執行...");
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println(username + "--" + password);
if(name.equals(username)){
/*轉發*/
// req.getRequestDispatcher("fail.html").forward(req, resp);
/*重定向*/
resp.sendRedirect("fail.html");
}else{
// req.getRequestDispatcher("success.html").forward(req, resp);
resp.sendRedirect("success.html");
}
System.out.println("執行完畢...");
}
二、初始化傳參
說明:需要放在servlet裏面,同時,只有這一個servlet可以取到該值,在init的時候使用ServletConfig取值
web.xml
<!--註冊 -->
<servlet>
<servlet-name>Hello</servlet-name> <!--servlet名字 -->
<servlet-class>servlet.Hello</servlet-class><!--路徑 -->
<init-param>
<param-name>username</param-name><!--名稱 -->
<param-value>root</param-value><!--值 -->
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123abc</param-value>
</init-param>
<load-on-startup>1</load-on-startup><!--正數表示在啓動的時候自動初始化,數字表示順序,數字越大越後-->
</servlet>
Java
private String name;
private String pwd;
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("Hello init```");
name = config.getInitParameter("username");
pwd = config.getInitParameter("password");
System.out.println(name + "--" + pwd);
}
三、亂碼
產生原因:編碼和解碼的方式不一致
常見的亂碼:數據庫、io、web
1.web請求亂碼
(1)get
conf->server.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8"/>
(2)post
java
req.setCharacterEncoding("UTF-8");
2.web響應亂碼
說明:無論是get還是post都一樣
java
resp.setContentType("text/html;charset=utf-8");
四、解析過程
解析url->定位->web.xml->檢查是否註冊->調用
注:圖片來源於《servlet詳細講解》