Servlet 教程,servlet 在线

2096Servlet 表单数据

对于解决 POST 中文乱码我们可以这样:

//请求解决乱码
response.setContentType("text/html;charset=utf-8");

//响应解决乱码
request.setCharacterEncoding("utf-8");

2095Servlet 表单数据

如果用 getparameter() 获取中文只有问号:

String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");

由于 tomcat8 默认编码是 utf-8,而这个过滤器把他当成 ISO8859-1 解码时(即解码了两次),就会出现问题,导致所有中文变成问号

所以我们只需要不使用这个过滤器就可以了。

也就是采用以下代码:

String name =new String(request.getParameter("name"));

这样就能正常显示中文。

2094Servlet 实例

servlet 浏览器访问路径配置有个小问题:

1、java 类里的注解 —— @WebServlet("/HelloServlet") 对应浏览器路径:

http://localhost:8080/TomcatTest/HelloServlet

2、配置文件(web.xml)里对应的浏览器访问路径:

http://localhost:8080/TomcatTest/TomcatTest/HelloServlet

这两种配一个就好了,不然路径重名的话反而会让tomcat启动不了。

例如这样就启动不了:

修改 web.xml :

<url-pattern>/HelloServlet</url-pattern>

修改后,web.xml 和 java 类的注解,对应路径都是:

http://localhost:8080/TomcatTest/HelloServlet

导致

命名的 servlet[HelloServlet]和 [com.facesoho.test.HelloServlet] 都被映射到 URL 模式 [/ HelloServlet] 这是不允许的。

解决办法:

注解去掉或者保留注解进入web.xml将映射删除既可以。

2093Servlet 实例

destory 方法被调用后,servlet 被销毁,但是并没有立即被回收,再次请求时,并没有重新初始化。

代码示例:

private String message;

@Override
public void init() throws ServletException {
    message = "Hello World , Nect To Meet You: " + System.currentTimeMillis();
    System.out.println("servlet初始化……");
    super.init();
}

@Override
public void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter writer = response.getWriter();
    writer.write("<h1>" + message + "</h1>");
    destroy();
}

@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // TODO Auto-generated method stub
    super.doPost(req, resp);
}

@Override
public void destroy() {
    System.out.println("servlet销毁!");
    super.destroy();
}

控制台打印:

servlet初始化……
servlet销毁!
2017-7-6 19:48:52 org.apache.catalina.core.StandardContext reload
信息: Reloading Context with name [/myServlet] has started
servlet销毁!
2017-7-6 19:48:52 org.apache.catalina.core.StandardContext reload
信息: Reloading Context with name [/myServlet] is completed
servlet初始化……
servlet销毁!
servlet销毁!
servlet销毁!
servlet销毁!
servlet销毁!
servlet销毁!
servlet销毁!

2092Servlet 环境设置

设置Classpath的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包。

事实上JDK 5.0默认就会到当前工作目录(上面的.设置),以及JDK的lib目录(这里假设是C:\Program Files\Java\jdk1.5.0_06\lib)中寻找Java程序。所以如果Java程序是在这两个目录中,则不必设置Classpath变量也可以找得到,将来如果Java程序不是放置在这两个目录时,则可以按上述设置Classpath。