文章目錄
servlet路徑錯誤
今天idea寫了個servlet
默認生成的
@WebServlet(name=“getParameter”)
然後在訪問的時候無法訪問,
servlet路徑配置方法
@WebServlet方法,推薦
修改爲
@WebServlet("/getParameter")
可以通過
http://localhost:8080/servlet2_war_exploded/getParameter?x1=lmkservlet
進行訪問
源代碼
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/getParameter")
public class getParameter extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String x1=request.getParameter("x1");
PrintWriter out1=response.getWriter();
out1.print("<html><body><p> 請求參數x1的值爲"+x1+"</p></body></html>");
}
}
web-xml 配置路徑方法,老方法
或者也可以再 web-iml 中進行配置
<?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_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>Hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
</web-app>
解決servlet 中文亂碼的方法
方法一直接設定 字符集
這樣的好處就是簡單,
但是當幾十個servlet都採用這種方式,每次設定都很麻煩
當servlet很多是,我推薦 方法二 全局過濾器 Filter
//設置請求字符集
request.setCharacterEncoding("utf-8");
//設置響應頭字符集,告訴瀏覽器是什麼字符集
response.setContentType("text/html;charset=utf-8");
//設置響應字符集
response.setCharacterEncoding("utf-8");
完整代碼
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/getParameter")
public class getParameter extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
String x1=request.getParameter("x1");
PrintWriter out1=response.getWriter();
out1.print("<html><body><p> 請求參數x1的值爲"+x1+"</p></body></html>");
}
}
方法二 設定全局過濾器
Filter的執行順序與在web.xml配置文件中的配置順序一致,一般把Filter配置在所有的Servlet之前。
過於過濾器的幾點常識
過濾器只會被初始化一次
所以過濾器常駐內存
所以只有很必要的操作才需要使用過濾器
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//指定路徑匹配 以及過濾器名稱, /* 就是全局所有請求都匹配
@WebFilter(filterName = "setCharacterCoding" ,urlPatterns = "/*")
public class setCharacterCoding implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
String codingmode="utf-8";
req.setCharacterEncoding(codingmode);
resp.setContentType("text/html;charset="+codingmode);
resp.setCharacterEncoding(codingmode);
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
啓用全局過濾器之前
啓用全局過濾器之後