tomcat 调试中乱码变正常的中文
在tomcat安装目录下(D:\CIINTool\CIIN_Java_LibTool\apache-tomcat-9.0.31\conf)的logging.properties文件中,java.util.logging.ConsoleHandler.encoding = UTF-8 改成 GBK 如下图所示。
6.3、Servlet 原理
Servlet是由Web服务器(比如tomcat)调用,web服务器在收到浏览器请求。
6.4、Mapping问题
1.一个Servlet可以指定一个映射路径
<!--http://localhost:8081/s1/hello_cyj -->
<servlet-mapping>
<servlet-name>hello_clj</servlet-name>
<url-pattern>/hello_cyj</url-pattern>
</servlet-mapping>
2.一个Servlet可以指定多个映射路径
<!--http://localhost:8081/s1/hello_cyj -->
<servlet-mapping>
<servlet-name>hello_clj</servlet-name>
<url-pattern>/hello_cyj</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello_clj</servlet-name>
<url-pattern>/hello_cyj2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello_clj</servlet-name>
<url-pattern>/hello_cyj3</url-pattern>
</servlet-mapping>
3.一个Servlet可以指定通用映射路径
<!--3 http://localhost:8081/s1/hello_cyj/任意字符 -->
<servlet-mapping>
<servlet-name>hello_clj</servlet-name>
<url-pattern>/hello_cyj/*</url-pattern>
</servlet-mapping>
4.默认请求路径
<!--4 http://localhost:8081/s1/默认请求路径 -->
<servlet-mapping>
<servlet-name>hello_clj</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
5.指定一些后缀或者前缀等等…
<!-- 可以自定义后缀实现请求映射
注意点:*前面不能加项目映射的路径,包括斜杠/
/*。do 错误 *。do正确
/开头的都错误
hello/adfasdfasd.qingjiang正确-->
<!--5 http://localhost:8081/s1/默认请求路径 -->
<servlet-mapping>
<servlet-name>hello_clj</servlet-name>
<url-pattern>*.qinjiang</url-pattern>
</servlet-mapping>
6.优先级问题-自定义404页面
指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求
<!-- 404页面-->
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>com.kuang.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
6.5、ServletContext(以下内容,后面正常使用方式都会替换掉,至少得先了解)
web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用;
ServletContext servletContext = this.getServletContext();
//这个网站就由servletContext 这个对象来管理
1、共享数据
我在这个Servlet中保存的数据,可以在另外一个Servlet中拿到;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//this.getInitParameter() 初始化参数
//this.getServletConfig() Servlet配置
//this.getServletContext() Servlet上下文
ServletContext servletContext = this.getServletContext();
String username = "陈爺"; //数据
servletContext.setAttribute("username",username);//将一个数据保存在了ServletContext中,名字为usernmae 值 username
System.out.println("Hello");
}
}
public class GetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String username = (String) servletContext.getAttribute("username");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("名字:"+username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
1.1、设置值
1.2、显示值
1.3、配置请求
ServletContext 可以实现30天的绘画数据共享
2、获取初始化参数
1111222
<!-- 获得一些web应用初始化的参数-->
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
</context-param>
获取值
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String url = servletContext.getInitParameter("url");
resp.getWriter().print(url);
}
配置参数
3、请求转发
3.1转发
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
System.out.println("进入了ServletDemo04");
//原始写法
//RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/gp");//请求转发到/gp这个路径上
//requestDispatcher.forward(req,resp);//调用forward实现请求转发
//一句话的写法
servletContext.getRequestDispatcher("/gp").forward(req,resp);
}
3.2配置参数
<!-- ServletDemo04-->
<servlet>
<servlet-name>sd4</servlet-name>
<servlet-class>com.kuang.servlet.ServletDemo04</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sd4</servlet-name>
<url-pattern>/sd4</url-pattern>
</servlet-mapping>
4、读取资源文件
Properties 类
- 在java目录下新建properties
- 在resources目录下新建properties
发现:都被打包到了同一个路径下:classes,我们俗称这个路径为classpath(类路径);
查看页面https://blog.edjoke.com/archives/540.html 5-10
在pom.xml文件中加入上述那段话
4.1 思路:需要一个文件流
public class ServletDemo05 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");//相对定位,生成出来的目录位置
Properties prop = new Properties();
prop.load(is);
String user = prop.getProperty("username");
String pwd = prop.getProperty("password");
resp.getWriter().print(user+":"+pwd);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
资源文件的内容
username=root
password=123456
4.2配置参数 访问测试即可