【Sun Aug 07 2016 16:54:10 GMT+0800】
eclipse启动了tomcat正常,可页面还是404
具体操作如下:
⑴找到server操作窗口,双击下面的tomcat服务
⑵在打开的设置中,将Server Locations的选项选成第二个“Use Tomcat installation (takes control of .........)”
⑶重启服务
Eclipse中java文件和jsp字体大小设置1.更改java文件大小设置
Window→preferences→General→Appearance→Colors and Fonts→Java→Java Editor Text Font→右边按钮Change
英文版默认的是Courier New 常规 10
2.更改jsp文件大小设置(此设置也同事更改其他类型文件的字体大小,例如xml等)
Window→preferences→General→Appearance→Colors and Fonts→Basic→TextFont→右边按钮Change
英文版默认的是Courier New 常规 10
修改eclipse的默认编码方式(为UTF-8)
1、设置Workspace中设置文本编码为:UTF-8
Windows→Preference→General→WorkSpace,选择右侧框中的Text File encoding,改为UTF-8
2、设置创建的jsp文件编码为:UTF-8
Windows→Preference→General→Web→JSP Files,在Encoding提示处(下拉)选择ISO 10646/Unicode(UTF-8),作为jsp默认页面。
【Tue Aug 09 2016 09:44:42 GMT+0800】
Eclipse背景颜色设置(设置成豆沙绿色保护眼睛,码农保护色)
windows→preferences→general→editors→text editors中
在Appearance color options下修 background color为(将system default前的勾点掉)
red:204;green:232;blue:207即可(cce8cf)。
同时启动多个TomcatMyEclipse的配置默认不变,将Eclipse所用的Tomcat(Tomcat8.0.36)做更改:在tomcat\conf\server.xml。
20 <Server port="8005" shutdown="SHUTDOWN">//改为:port="8055"(ln20)
63 <Connector connectionTimeout="20000" port="8088" protocol="HTTP/1.1" redirectPort="8443"/>//改为:port="8088"(ln63)
这样就可以同时启动两个Tomcat了。
在Eclipse→Servers下双击Tomcat。右侧Ports
Modify the server ports.
Port name | Port number |
Tomcat admin port | 8055 |
HTTP/1.1 | 8088 |
AJP/1.3 | 8099 |
改为表格中的端口号。保存并重启Tomcat。
查看程序所占用的进程:
在开始菜单→运行→cmd→输入:netstat -ano如果没有这个进程,那可能是其他软件占用了端口。
在开始菜单→运行→cmd→输入:netstat -ano 或 netstat -an | grep 8080 命令,可以查看哪个进程占用了8080和8009端口,找到占用端口软件的PID,然后在任务管理器找到对应PID的软件,关闭结束该进程即可。
如果任务管理器中没有显示PID列,需要设置,查看→选择列→勾选“PID(进程标识符)”。
更改Eclipseweb项目发布的路径工作空间:D:\WorkSpaces\eclipse
在eclipse配置完tomcat后,发布到的路径是 d:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps下
需要Tomcat默认发布路径设置为:D:\AppServ\webapps下
在Eclipse中进行修改如下:
⑴找到Server面板,右击当前的那个Tomcat,先remove掉其中所有的工程
⑵再右击那个Tomcat,选择 Clean... 清空一下
⑶双击那个Tomcat,会打开属性面板,找到左边第二个 Server Locations,选择第二个是Tomcat的安装路径,Use Tomcat installation (takes control of...)。并且通过配置tomcat进行发布
修改server.xml
在</Host>前面加上:
<Context path="/" docBase="D:\AppServ\webapps" reloadable="true" debug="0" />
path为虚拟路径,访问时的路径,注意:一定要加“/”,debug建议设置为0,reloadable设置为true。
由上述设置,访问路径为:http://localhost:8088/。
--------
在打开的设置中,将Server Locations的选项选成第二个“Use Tomcat installation (takes control of .........)”
Deploy path:【D:\AppServ\webapps】
--------
【Wed Aug 10 2016 09:10:31 GMT+0800】
404错误可能是如下4个原因之一:
⑴开发环境。排除方法:试运行一个简单的jsp,如果正常,说明配置没有问题,否则有问题
⑵Servlet本身有错误,没有编译成功。排除办法:使用Window资源管理器查看workspace下的项目,项目中的build目录下应该有Servlet编译后的class文件,如果有,就可排除。如果没有,就说明Servlet有语法问题,没有编译成功
⑶浏览器地址栏URL问题,输错一个字母,肯定都都会404。要保证URL正确,建议办法,把项目名和Servlet URL映射名称取简单名称,例如,如果你的地址栏是localhost:8080/a/s,想错都难。
⑷如果是服务器端文件,需要先编译。
Servlet配置和映射
1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
3 <display-name>qjyj</display-name>
4 <servlet>
5 <servlet-name>FirstServlet</servlet-name>
6 <servlet-class>com.jeelearning.servlet.FirstServlet</servlet-class>
7 </servlet>
8 <servlet-mapping>
9 <servlet-name>FirstServlet</servlet-name>
10 <url-pattern>/ch02/FirstServlet</url-pattern>
11 </servlet-mapping>
12 </web-app>
View Code
第6行,是所在包名+文件名。FirstServlet这个文件所在包(package com.jeelearning.servlet;)→com.jeelearning.servlet.FirstServlet。
第10行,相当于@WebServlet("/ch02/FirstServlet")
Servlet3.0学习总结(一):使用注解标注Servlet3.3.1、使用注解描述Servlet
Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署描述,使用Servlet3.0提供的注解来描述DemoServlet3这个Servlet,代码如下:
1 package com.jeelearning.demoservlet3;
2
3 import java.io.IOException;
4 import javax.servlet.ServletException;
5 import javax.servlet.annotation.WebServlet;
6 import javax.servlet.http.HttpServlet;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10 @WebServlet(name="DemoServlet3", urlPatterns="/ch02/DemoServlet3")
11 public class DemoServlet3 extends HttpServlet {
12 public void doGet(HttpServletRequest request, HttpServletResponse response)
13 throws ServletException, IOException {
14 response.getWriter().write("<h1>Hello Servlet3.0</h1>");
15 }
16 public void doPost(HttpServletRequest request, HttpServletResponse response)
17 throws ServletException, IOException {
18 this.doGet(request, response);
19 }
20 }
DemoServlet3.java
注解WebServlet用来描述一个Servlet。属性name描述Servlet的名字,可选。属性urlPatterns定义访问的URL,或者使用属性value定义访问的URL。(定义访问的URL是必选属性)
Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义。
在Servlet3.0中,可以使用@WebServlet注解将一个继承于javax.servlet.http.HttpServlet的类标注为可以处理用户请求的Servlet。
@WebServlet注解的相关属性 | ||
NO. | 属性名 | 描述 |
1 | asyncSupported | 声明Servlet是否支持异步操作模式 |
2 | description | Servlet的描述信息 |
3 | displayName | Servlet的显示名称 |
4 | initParams | Servlet的初始化参数 |
5 | name | Servlet的名称 |
6 | urlPatterns | Servlet的访问URL |
7 | value | Servlet的访问URL |
像上面的Servlet3Demo可以描述成
@WebServlet(name="Servlet3Demo",value="/ch02/DemoServlet3")。
也定义多个URL访问:如
@WebServlet(name="Servlet3Demo",urlPatterns={"/Servlet3Demo","/Servlet3Demo2"})
或者:
@WebServlet(name="AnnotationServlet",value={"/Servlet3Demo","/Servlet3Demo2"})
【Thu Aug 11 2016 08:43:03 GMT+0800】
Servlet生命周期、工作原理⑴Servlet 生命周期:Servlet加载→实例化→服务→销毁。
⑵init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。
⑶service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
⑷destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其它的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。
步骤:
⑴Web Client 向Servlet容器(Tomcat)发出Http请求;
⑵Servlet容器接收Web Client的请求;
⑶Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中;
⑷Servlet容器创建一个HttpResponse对象;
⑸Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给HttpServlet对象;
⑹HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息;
⑺HttpServlet调用HttpResponse对象的有关方法,生成响应数据;
⑻Servlet容器把HttpServlet的响应结果传给Web Client。
Servlet工作原理:
⑴首先简单解释一下Servlet接收和响应客户请求的过程。首先,客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet、doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet()、doPost()等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息。所以,每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。
⑵每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了5个方法,其中比较重要的3个方法涉及到Servlet的生命周期,分别是上文提到的init()、service()、destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet。因此,HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。
⑶Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类。所以,HttpServlet中实现了service()方法,并将请求ServletRequest、ServletResponse强转为HttpRequest和HttpResponse。
创建Servlet对象的时机:
⑴Servlet容器启动时:读取web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,同时将ServletConfig对象作为参数来调用Servlet对象的init方法。
⑵在Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据客户的请求创建HttpRequest、HttpResponse对象,从而调用Servlet对象的service方法。
⑶Servlet容器在启动时自动创建Servlet,这是由在web.xml文件中为Servlet设置的<load-on-startup>属性决定的。从中我们也能看到同一个类型的Servlet对象在Servlet容器中以单例的形式存在。
1 <servlet>
2 <servlet-name>Init</servlet-name>
3 <servlet-class>org.xl.servlet.InitServlet</servlet-class>
4 <load-on-startup>1</load-on-startup>
5 </servlet>
View Code