Notes of Java Web Development Under The Hood

Udemy course 2017, by Matt Greecroft, 20220201-0219

文章目录

Prepare the environment

Export WAR file

eclipse IDE - Help - Install New Software - Work with “All Available Sites” - Web, XML, … - choose Java EE Dev. Tools, Java Web Dev. Tools and JST Server Adapters extension.

Project - Export - WAR file

Open Project

copy the start working directory to workspace.

New Java Project with the same directory name.

Include Servlet Jar file

eclipse IDE - Project Name Right Click - Build Path - Configure Build Path - Tab Libraries - Add External JARs -Browse /usr/local/apache-tomcat-8.5.7/lib/servlet-api.jar

Deploy to aliyun

eclipse IDE - add external jar file mysql-connector-java-8.0.28.jar - Browser localhost:8080/Wrestaurant/ - Error “No suitable driver found for jdbc” - since I am using tomcat and mysql, I should put mysql-connector-java in $CATALINA_HOME/lib. Actually, the connection pool needs to be set up before application is instantiated, so we need to put jar in tomcat server lib folder.

copy *.jar (jstl-1.2.jar, mysql-connector-java-8.0.28.jar, Jason-java.jar) to /usr/local/tomcat/lib

create sql DB Wrestaurant, user “username”, and password to be the same as local machine.

Servlets

First servlet - HelloWorld(NOT a static page)

  1. eclipse IDE - under Package “com.prog4buss.servlets” - New Class “HelloWorldServlet” - Superclass Browse “HttpServlet” - finish
public class HelloWorldServlet extends HttpServlet {
   
	public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
   //service, doGet, doPost
		PrintWriter out = response.getWriter();
		response.setContentType("text/html");
		out.println("<html><body><h1>Hello World</h1>");
		out.println("<p>The time is : " + new Date() + "</p>");
		out.println("</body></html>");
		out.close();
	}
}
  1. edit webapps/WEB-INF/web.xml
<servlet>
	<servlet-name>HelloWorldServlet</servlet-name>
	<servlet-class>com.prog4buss.servlets.HelloWorldServlet</servlet-class>
</servlet>
	
<servlet-mapping>
	<servlet-name>HelloWorldServlet</servlet-name>
	<url-pattern>/hello.html</url-pattern>
</servlet-mapping>
  1. build WAR file Wrestaurant.war - copy to /usr/local/tomcat/webapps - chown user.user /usr/local/tomcat -R - Browser http://localhost:8080/hello.html

Notice:If chown only Wrestaurant, maybe encounter 404 error, because tomcat/work is owned by root.

Possible errors

  • 404: web.xml url-pattern path name wrong; Notice When copy war file to /usr/local/tomcat and chown only Wrestaurant then 404, but if edit web.xml that is OK, because read web.xml will OK but accessing /usr/local/tomcat/work will not OK.

  • Nasty looking errors, including message"Address already in use" : another server is already using port 8080

  • 500: class structure error including message “class HellowWorldServlet is not a servlet”, eg: class HelloWorldServlet without “extends HttpServlet”

Show Homepage - ViewMenuServlet

  1. with the help of pakages com.prog4buss.data (MenuDataService.java) and com.prog4buss.domain (MenuCategory.java,MenuItem.java, Order.java)
MenuDataService menuDataService = new MenuDataService();
List<MenuItem> menuItems = menuDataService.getFullMenu();
for (MenuItem menuItem : menuItems) {
   
	out.println("<li>" + menuItem + "</li>");
}
  1. and the same configuration with web.xml
<servlet>
	<servlet-name>ViewMenuServlet</servlet-name>
	<servlet-class>com.prog4buss.servlets.ViewMenuServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>ViewMenuServlet</servlet-name>
	<url-pattern></url-pattern> //blank to display default page
</servlet-mapping>
  1. build WAR file Wrestaurant.war - copy to /usr/local/tomcat/webapps - chown -R user.user /usr/local/tomcat - Browser http://localhost:8080/ to show Homepage

Handling Forms - MenuSearchServlet

  1. use search.html by Matt
<form action="/searchResults.html" method="GET">
	Find dishes containing : <input type="text" name="searchTerm" id="searchTerm" /> 		<input type="submit" value="search" />
</form>
  1. construct MenuSearchServlet alike (copy ViewMenuServlet), extract “searchTerm” from request, find the menuItems is DB, and outprintln to response.
String searchTerm = request.getParameter("searchTerm"); //get search string from request
List<MenuItem> menuItems = menuDataService.find("searchTerm"); 
for (MenuItem menuItem : menuItems) {
	out.println("<li>" + menuItem + " " + menuItem.getDescription() + "</li>");
}
  1. build WAR - copy - chown - Browser http://localhost:8080/Wrestaurant/search.html - input search “veg” - submit - searchResults.html?searchTerm=veg, OK

  2. Errors

    • If Error 404, then check the directory permission of /usr/local/tomcat
    • If getParameter(“searchTerm”) mispelled, eg. “searchTTerm”, then got Error 500 including “null pointer exception”.
  3. If search “xxx”, the result display is not friendly, so put some friendly message like this:

if (menuItems.size() > 0) {
    ...
}
else {
   
    out.println("I'm sorry, there are no dishes containing " + searchTerm);
}

GET, POST and Redirect

Get and Post

  1. Get and Post are NOT relevant directly to Web Application, but it is important to all web sites.
  • The GET method should be used for non-destructive operations — that is, operations where you are only “getting” data from the server, not changing data on the server. For example, a query to a search service might be a GET request. GET requests may be cached by the browser, which can lead to unpredictable behavior if you are not expecting it. GET requests generally send all of their data in a query string.
  • The POST method should be used for destructive operations — that is, operations where you are changing data on the server. For example, a user saving a blog post should be a POST request. POST requests are generally not cached by the browser; a query string can be part of the URL, but the data tends to be sent separately as post data.
  1. SearchResultsServlet { public void service (HttpServletRequest request, …) }
  • Get: , http://…/serchResults.html?searchTerm=veg
  • Post:,http://…/serchResults.html
  1. if change method service to doGet, then only meth

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值