バックグラウンド:
Ecplise+Tomcat+サーブレット
私たちがサーブレットを学習していたとき、基礎をしっかり学んでいなかったため、サーブレットを理解できませんでした。たとえば、作成者はサーブレットの Web を理解できませんでしたが、少なくともマクロの観点からプロジェクトを理解することができます。プロジェクトをある程度推進します。この記事の目的は、初心者でもフロントエンド リクエストと web.xml の構成の関係をできるだけ簡単に理解できるようにすることです。
プロジェクト全体の紹介リンクは次のとおりです。
サーブレット テクノロジがサーバーを実装し、Android プラットフォームがクライアントとして機能して個人ストアを実装します_zew1040994588 のブログ - CSDN ブログ
ログイン例の説明:
プロジェクト全体のディレクトリ:
バックエンド ログイン インターフェイスのデモ:
ここでは、特定のコードの内容がどのように記述されているかには注意を払わず、web.xml との関係にのみ注意を払います。
这里是userLoign.java里面的内容:
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import common.User;
import dao.UserDao;
import net.sf.json.JSONObject;
import utils.JsonObjectWeb;
import utils.JsonResultUtil;
public class userLogin extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//0、解决返回中文乱码问题
resp.setCharacterEncoding("UTF-8");
JSONObject web_dict = JsonObjectWeb.getJsonInfoDict(req);
String username = web_dict.getString("username");
String password = web_dict.getString("password");
User user = new User();//创建user对象
user.setUsername(username);
user.setPassword(password);
/*
* 这里需要查询数据库是否重名,若有重名则不允许插入,返回不同状态码
* */
int flag = 0;
UserDao dao = new UserDao();
User login_user = null;
try {
login_user = dao.login(username,password);
if(login_user != null) {
int user_id = login_user.id.intValue();
JSONObject data_dict = new JSONObject();
data_dict.put("user_id", user_id);
JSONObject json = JsonResultUtil.getJson(200,data_dict, "登录成功");
PrintWriter writer = resp.getWriter();
//这里是返回json
writer.print(json);
flag = -1;
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (flag == 0) {
JSONObject json = JsonResultUtil.getJson(1002, "登录失败");
PrintWriter writer = resp.getWriter();
//这里是返回json
writer.print(json);
}
}
}
バックエンドの web.xml 構成:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<display-name>shop_sys2</display-name>
<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>user_login</servlet-name>
<servlet-class>servlet.userLogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>user_login</servlet-name>
<!-- 登录 -->
<url-pattern>/user/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>user_register</servlet-name>
<servlet-class>servlet.userRegister</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>user_register</servlet-name>
<!-- 注册 -->
<url-pattern>/user/register</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>user_update_password</servlet-name>
<servlet-class>servlet.userChange</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>user_update_password</servlet-name>
<!-- 注册 -->
<url-pattern>/user/update/password</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>product_view_all</servlet-name>
<servlet-class>servlet.productView</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>product_view_all</servlet-name>
<!-- 展示所有商品 -->
<url-pattern>/product/view/all</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>cart_view</servlet-name>
<servlet-class>servlet.cartView</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cart_view</servlet-name>
<!-- 显示用户购物车 -->
<url-pattern>/cart/view</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>product_add_cart</servlet-name>
<servlet-class>servlet.cartAdd</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>product_add_cart</servlet-name>
<!-- 添加商品到购物车 -->
<url-pattern>/product/add/cart</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>product_delete_cart</servlet-name>
<servlet-class>servlet.cartDelete</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>product_delete_cart</servlet-name>
<!-- 将商品从购物车中删除 -->
<url-pattern>/product/delete/cart</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>cart_settlement</servlet-name>
<servlet-class>servlet.cartSettlement</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cart_settlement</servlet-name>
<!-- 购物车页面对商品进行结算 -->
<url-pattern>/cart/settlement</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>view_orders</servlet-name>
<servlet-class>servlet.orderView</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>view_orders</servlet-name>
<!-- 查看所有订单 -->
<url-pattern>/view/orders</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>product_purchase</servlet-name>
<servlet-class>servlet.productPurchase</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>product_purchase</servlet-name>
<!-- 商品页面进行直接购买 -->
<url-pattern>/product/purchase</url-pattern>
</servlet-mapping>
</web-app>
フロントエンドのログインページ:
フロントエンド インターフェイスはバックエンド インターフェイスを呼び出します。
インターフェース名: 127.0.0.1:8080/shop_sys2/user/login
ロジックの説明:
1- まず、<servlet></servlet> のコンテンツを設定し、次に <servlet-mapping></servlet-mapping> のコンテンツを設定します。
2-<servlet></servlet> この設定は userLogin.java をバインドするのと同等です。
userLogin.java で、私たちが書いた void doPost (パラメータは省略) は、具体的には、データベースのクエリなど、 Post モードで 127.0.0.1:8080/shop_sys2/user/login へのフロントエンドのリクエストを処理するためにバックエンドによって書かれたバックグラウンド ロジックです。ユーザーがログインできる場合 [もちろん、Get リクエストも処理できます。Get を処理するようには作成されていません]。そして、このサーブレットをフロントエンドからアクセスできるようにする方法、これが web.xml の役割です。もちろん、それに対処する方法はたくさんありますが、web.xml が最も基本的な方法です。後で習熟すると、注釈を使用できるようになります。
3- <servlet-mapping> </servlet-mapping> のコンテンツ構成
フロントエンドリクエスト 127.0.0.1:8080/shop_sys2/user/login に応答する Post メソッドです。
3.1- <servlet-mapping> </servlet-mapping>の<url-pattern> /user/login </url-pattern>を通じて、フロントエンドが 127.0.0.1:8080/shop_sys2/user を送信したことをバックグラウンドに認識させます。 /ログインリクエスト、
その後、<servlet-name>user_login</servlet-name> で取得した user_login に従って、 <servlet></servlet> のコンテンツ内で<servlet-name> user_login </servlet-name> を見つけます。
ロジックを対応するサーブレットに入力させて処理します [このステップは、<servlet-class>servlet.userLogin</servlet-class> のコンテンツ servlet.userLogin によって決定されます。!!!]、そして特定のuserLogin.java の void doPost にクエリ データベースがあります (パラメータは省略されています)。
ここの説明が理解できない場合は、下の図を見れば理解できるかもしれません。
<servlet>
<servlet-name>user_login</servlet-name>
<servlet-class>servlet.userLogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>user_login</servlet-name>
<!-- 登录 -->
<url-pattern>/user/login</url-pattern>
</servlet-mapping>