因为接触Java,一上来就直接用SpringBoot了,Servlet还没用过。最近有一个很小的功能,要对外提供http服务,感觉用SpringBoot有点浪费,因此想用用Servlet。
代码编写
如果是通过IDEA创建的项目,只需要创建一个JavaEE的Web Application项目就可以了,文件结构都给你自动生成了,运行也只需要点执行按钮即可。
继承HttpServlet类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class Translate extends HttpServlet {
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String str = "Hello Wrold!"; resp.setContentType("text/html;charset=utf-8"); resp.setCharacterEncoding("utf-8");
OpenCC openCC = new OpenCC(); String content = "我是一名软件工程师,我喜欢鼠标键盘和服务器"; PrintWriter writer = resp.getWriter(); writer.println(content); writer.flush(); writer.close(); } }
|
编写web.xml文件
该文件需要放到WEB-INF目录下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
<servlet>
<servlet-name>opencc</servlet-name> <servlet-class>Translate</servlet-class> </servlet> <servlet-mapping> <servlet-name>opencc</servlet-name> <url-pattern>/translate</url-pattern> </servlet-mapping>
</web-app>
|
部署
编译类文件,放到tomcat下
因为这个tomcat我部署了多个应用,因此这里在webapps下面,我单独给该应用创建了一个opencc目录。
只需要放置2个文件即可,位置如下:
/usr/local/tomcat/webapps/opencc/opencc/WEB-INF/classes/Translate.class
/usr/local/tomcat/webapps/opencc/opencc/WEB-INF/web.xml
配置tomcat的server.xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <Service name="opencc"> <Connector port="10004" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8014" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="opencc" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps/opencc" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="opencc_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Context path="/opencc" docBase="opencc" reloadable="true"></Context> </Host> </Engine> </Service>
|
注意事项
tomcat中server.xml的Context各项属性的说明
1 2 3 4
| <Context path="" docBase="FileManager" reloadable="true"> </Context> <Context path="/FileManager" docBase="FileManager" reloadable="true"> </Context>
|
第一个Context是为了ip+端口直接指向FileManger这个项目。
path代表的是URL入口,例如第一个代表localhost:8080,第二个则代表localhost:8080/FileManger。
docBase是物理路径,可以是绝对路径,也可以是相对Host标签中appBase的相对路径,而Host标签中appBase的默认值是webapps文件夹,所以这里的FileManger就代表webapps下的FileManager文件夹。
这里的path+docBase的配置就表示了ip+端口或者ip+端口+/项目名称都可以指向你的项目。
reloadable就告诉Tomcat需要监控WEB-INF中的class文件,如果有变化了,就需要重新加载。并且是重新加载整个项目的,包括web.xml等等。
参考文章
https://blog.csdn.net/xn6517/article/details/49516299