这边文章的内容随笔者学习进度进行添加,修改完都要重启tomcat服务器让设置生效
1.配置端口
用编辑器打开tomcat服务器安装目录下conf文件夹下的主配置文件server.xml
vim server.xml
找到如下部分
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8" />
该Connector 用于监听浏览器发送的请求. 设置成80 后可以直接使用http://ip 访问
protocol: http协议
connectionTimeout: 连接超时时间
redirectPort: 如果发送的是https 请求. 就将请求转发到8443 端口.
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
使用8009 接受其他服务器转发过来的请求.
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
tomcat 监听的关闭端口.
<Server port="8005" shutdown="SHUTDOWN">
2.新建web服务目录
编写好的jsp文件保存到Tomcat服务器的web服务目录中,才可以被人访问到,一个web服务目录就是一个网站,很多情况下我除了tomcat服务器下的的webapps目录还需要创建一个新的web服务目录,在一个新的磁盘或者或者一个远程服务器上,达成分布式存储的目的
同样是修改conf文件下的server.xml文件,找到</Host>的部分,在</Host>前面添加如下指令,注意xml是区分大小写的
切记不能有中文,否者启动不了tomcat
<Context path="/虚拟目录名称" docBase="要添加的文件夹目录" debug="0" reloadable="true"/>
样例
<Context path="/test" docBase="/home/ubuntu/jsp_example" debug="0" reloadable="true"/>
ps访问的时候用的是虚拟目录,切记要重启tomcat
3.浅谈中文乱码问题
建议使用utf-8编码(utf-8编码介绍)
强调千万不要使用window的text文本编辑器来写代码,它默认的是中文编码
推荐使用现代化的文本编辑器例如atom,vscode,sublime,nodepad++或者使用专门的开发软件eclipse jave EE
对应的page指令修改
<%@ page language="java" contentType = "text/html; charset = utf-8"
pageEncoding="utf-8" %>
关于get请求方法乱码问题修改server.xml中的如下片段,该方法只能解决get请求的问题
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改成
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URLEncoding="utf-8"/>
关于post方法乱码问题的解决方法
方法一逆向编码解码还原
之所以会出现乱码,是因为浏览器将中文传给tomcat时,tomcat以默认的iso8859-1方式对其解码,而iso8859-1不属于中文码表,故而出现乱码。根据这个原理可逆向还原。
byte b[] = request.getParameter("name").getBytes("UTF-8");
String name = new String(buf,"UTF-8");
这样得到的name便是前台传来的正确的中文参数了
这种方式比较偏向底层,而且有一个弊端,就是当浏览器传送的中文参数很多时,需要一个个设置,比较罗嗦,不利于节省时间。
方法二 将浏览器的表单的提交方式设为post方式,同时在servlet里在接受参数前将request的编码设置为GBK或者UTF-8。
前台形如:
<form action="login.jsp" method="post">
用户名:<input type="text" name="name"><br/><br/>
密 码:<input type="text" name="pwd"><br/><br/>
<input type="submit" value="登录">
</form>
后台形如:
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
这样也能正确地接受中文参数了。当然,这种方式也存在弊端,试想下当项目发布后,如果需要修改编码为GBK,则要修改源代码,而对客户而言,这需要反编译等步骤直接修改代码,有点困难。
方法三 通过web项目的WebRoot/WEB-INF/web.xml文件进行配置参数,同时可在servlet中进行读取
web.xml的示例核心代码如下:
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>cn.hncu.servlets.LoginServlet</servlet-class>
<init-param>
<param-name>character</param-name>
<param-value>GBK</param-value>
</init-param>
</servlet>
servlet示例核心代码如下:
public void init(ServletConfig config) throws ServletException {
String charset = config.getInitParameter("character");
System.out.println(charset);
}
这种方法弥补了方法3的缺陷,方便后期维护和修改,用户修改时不需要改源代码,只需修改web.xml即可。