1.软件tomcat
tomcat路径作用:
backup–配置文件的简单备份
bin–可执行文件的放置,如启动和停止tomcat,以.sh结尾的代表Linux下的命令;以.bat结尾的代表Windows下的命令
conf–配置文件,context.xml可以用来配置数据源之类的东西。logging文件记录tomcat服务器运行的日志记录。server.xml可以设置域名、端口号、IP、请求的编码、默认加载的项目。web.xml可以设置tomcat服务器支持的文件类型。
lib–运行所需jar包
logs–日志文件的存放
temp–服务器生成的临时文件
webapps–tomcat默认部署路径
work–tomcat运行时编译后的文件
wtpwebapps–eclipse默认部署路径
2.WEB项目的结构
WEB-INF>>>有classes和lib两个固定文件夹和一个web.xml文件,其中classes存放编译后的class文件,lib存放所需jar包,web.xml是项目的配置文件,配置Servlet,监听器和过滤器等。
<welcome-file-list> //表示访问该项目的默认资源
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet> //配置Servlet的name和class及映射,可通过项目路径+/register.action 访问该资源
<servlet-name>register</servlet-name>
<servlet-class>com.briup.estore.web.servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/register.action</url-pattern>
</servlet-mapping>
3.Sevlet
Servlet 接口,有五个方法:
void init(ServletConfig paramServletConfig)–初始化; ServletConfig getServletConfig(),获得配置信息;
void service(ServletRequest paramServletRequest, ServletResponse paramServletResponse),访问时执行该方法;
void destroy();销毁servlet
GenericServlet–抽象类,实现了Servlet接口
具体化了配置信息的获取,如配置的名字,指定名字的参数,所有参数的名字,获取Context类型对象
public String getInitParameter(String name)
{
return getServletConfig().getInitParameter(name);
}
public Enumeration<String> getInitParameterNames()
{
return getServletConfig().getInitParameterNames();
}
HttpServlet–抽象类,继承于GenericServlet
细化了Service方法,根据请求方法不同执行不同方法
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
String method = req.getMethod();
if (method.equals("GET")) {
long lastModified = getLastModified(req);
if (lastModified == -1L)
{
doGet(req, resp);
} else {
long ifModifiedSince;
try {
ifModifiedSince = req.getDateHeader("If-Modified-Since");
}
catch (IllegalArgumentException iae) {
ifModifiedSince = -1L;
}
if (ifModifiedSince < lastModified / 1000L * 1000L)
{
maybeSetLastModified(resp, lastModified);
doGet(req, resp);
} else {
resp.setStatus(304);
}
}
}
else if (method.equals("HEAD")) {
long lastModified = getLastModified(req);
maybeSetLastModified(resp, lastModified);
doHead(req, resp);
}
else if (method.equals("POST")) {
doPost(req, resp);
}
else if (method.equals("PUT")) {
doPut(req, resp);
}
else if (method.equals("DELETE")) {
doDelete(req, resp);
}
else if (method.equals("OPTIONS")) {
doOptions(req, resp);
}
else if (method.equals("TRACE")) {
doTrace(req, resp);
}
else
{
String errMsg = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[1];
errArgs[0] = method;
errMsg = MessageFormat.format(errMsg, errArgs);
resp.sendError(501, errMsg);
}
}
其中servlet方法有两种参数,但是其中service(ServletRequest req, ServletResponse res)会调用service(HttpServletRequest req, HttpServletResponse resp)方法,所以直接修改后一个方法即可
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
HttpServletRequest request;
HttpServletResponse response;
try
{
request = (HttpServletRequest)req;
response = (HttpServletResponse)res;
} catch (ClassCastException e) {
throw new ServletException("non-HTTP request or response");
}
service(request, response);
}
4.sevlet的生命周期
servlet是单例,在web项目运行期间,一个servlet只会创建一个对象。
默认情况下,servlet对象是在用户第一次访问它的时候,由tomcat服务器来创建的。
servlet对象创建成功之后,tomcat服务器还会调用servlet里面的init(ServletConfig config),这个有参的init方法会调用无参的init()方法,程序员就可以重写这个无参的init()方法,对创建好的servlet对象进行初始化操作.
如果用户要访问这个servlet对象,那么tomcat服务器会调用这个servlet对象中的service方法,只不过service方法中又进行了方法的层层调用,最后调用到了我们重写的doGet或者是doPost方法。
当servlet对象被销毁的时候,tomcat服务器会调用servlet里面的destory方法,程序员就可以重写这个方法,表示当对象销毁的时候需要做哪些额外的处理。
servlet对象被销毁的情况
1.服务器【正常】关闭的时候
2.服务器重新加载web项目的时候(reloading)
可以通过修改web.xml文件中的配置,去改变servlet对象创建的时间。标签里面需要放一个正整数,数值的大小可以决定servlet对象被创建的先后顺序,数值越小就越先被创建。(如果有多个servlet对象需要在tomcat启动期间被创建的话)
4.get方法和post方法访问的区别?
get方法访问可以通过:浏览器地址栏直接输入地址访问;超链接访问;访问图片;表单提交时method为get;在javascript代码中访问。
而post方式访问通过:表单method为post;ajax中设置本次请求为post方法。
在http协议规范中,定义了四种访问方式
get(查) post(改) put(增) delete(删)
http协议规范下的请求格式(分为四部分)
1部分: 请求行
2部分: 请求头部/消息报头
3部分: \r\n
4部分: 请求正文
get方法传参数,参数在地址栏后
post方法传参,参数在请求体(正文)中 。
post方法传参安全性比get方法高,且get方法传参长度收到浏览器地址栏字符长度限制,而post方法则看服务器一次性最多能够接受并且处理多少数据。
5.中文乱码问题
3.1 get方式传参,中文乱码
需要在tomcat服务器中server.xml文件中进行配置
在中加入新的属性URIEncoding=”XXX”
3.2 post方式传参,中文乱码
在使用request获取参数【之前】,先把request中的编码进行设置
request.setCharacterEncoding(“UTF-8”);
String name = request.getParameter(“name”);
System.out.println(name);
3.3 servlet中使用io流写数据到浏览器,浏览器里面显示中文乱码
如果响应头部信息中没有设置编码,那么浏览器会默认使用简体中文(GBK)来解析响应中的内容
所以在使用io流之前,需要设置一下response中的编码,同时还要告诉浏览器本次响应内容的编码是什么
//设置response中的编码为UTF-8
response.setCharacterEncoding(“UTF-8”);
//设置响应头部,告诉浏览器响应内容编码为utf-8
response.setContentType(“text/html;charset=utf-8”);