1 はじめに
動物は何千年もの間人間のペットであり、特に猫と犬はその性質から人間に愛され、賞賛されており、多くの慣用句、物語、格言がそれらに関連しています。しかし、近年、生活のスピードの加速により人々のプレッシャーが増し、ペットの世話をする時間や場所がなくなったことから、ペットを遺棄する家庭が増加し、野良動物が増加しています。それは動物の命やその生存にさえ影響を与えるだけでなく、人間の生命にも影響を及ぼします。北京の「娯楽ニュース」によると、獣医師の専門家らは、野良猫や野良犬は病気を広める可能性が高いとし、「路上で野良猫や野良犬がペストや他のウイルス、ノミ、その他の寄生虫を運ぶ確率は、野良猫や野良犬に感染する可能性よりもはるかに高い」と述べた。家庭用ペット。」さらに、多数の野良猫や野良犬は、都市環境、交通、公衆衛生の安全に重大な隠れた危険をもたらしており、これは生命軽視でもあります。同時に、適切なペットが見つからなかったことを後悔する家族もいます。
現在、動物の救出には、救出エリアの狭さ、多額の投資、遠隔地、情報の更新・公開の難しさなど多くの課題があります。こうした状況は、動物救助活動に携わる動物にとって「収入が増えて産出量が減る」という状況をもたらし、保護施設の経済とスペースにおいてますます深刻な問題を引き起こしている。今日、ネットワーク技術の急速な発展により、電子商取引は人々にますます大きな影響を与えており、衣料品の売買から住宅取引に至るまで電子商取引を通じて実行できるようになりました。人々は家にいて多くの個人的な用事を済ませることにますます慣れてきています。インターネットの利点を生かし、動物の養子縁組と支援を組み合わせたネットワークベースのペットの養子縁組・支援システムの開発が急務となっている。
この論文では、SSM に基づいた野良猫と野良犬の救助システムを開発するプロセス全体について説明します。ユーザーはインターネット上のプラットフォームにアクセスすることで、自分のニーズや家族環境、ペットの状態などに応じて救助方法を決めることができる。もちろん、ウェブサイト管理者は、動物自身とユーザー自身の状況を考慮して、ユーザーによる動物の保護を阻止する権利を有し、動物の保護を動的に管理し、それに応じてメンバーが引き取る権利を有するかどうかを決定することもできます。人々は、養子縁組のフィードバックのためにプラットフォームを通じて動物の生の写真をアップロードできます。
2. 開発技術
2.1 B/Sフレームワーク
B/Sアーキテクチャとは、ブラウザ-Webサーバー(Broswer-Server)を指し、プレゼンテーション層、ビジネスロジック層、データアクセス層の3層アーキテクチャを採用したソフトウェアシステムアーキテクチャです。B/Sアーキテクチャでは、ユーザーインターフェイスは完全にブラウザ経由で実装され、ビジネスロジックの一部はフロントエンドで実装されますが、主要なビジネスロジックはサーバーサイドで実装され、いわゆる30%アーキテクチャを形成します。 。B/Sアーキテクチャシステムでは、ユーザーはブラウザを通じてネットワーク上に分散した多数のサーバーにリクエストを送信し、サーバーはブラウザのリクエストを処理してユーザーが必要とする情報をブラウザに返します。残りのデータ要求、処理、結果の返却、動的 Web ページの生成、データベースへのアクセス、アプリケーション プログラムの実行などはすべて Web サーバーによって完了します。Windows ではオペレーティング システム内にブラウザ テクノロジが組み込まれているため、この構造は今日のアプリケーション ソフトウェアで好まれる構造になっています。
2.2 JSPテクノロジー
JSP の正式名称は JavaServer Pages で、Sun Microsystems が作成した動的 Web ページ技術標準であり、Web サーバー上に構築され、クライアントから送信された命令を受け取り、その内容に応じて HTML やその他の Web ページを動的に生成します。指示を要求者に返します。JSP は研究開発担当者のニーズに応じて独自に作成でき、さまざまな言語を別の方法で実行できるため、汎用的です。
JSP は動的標準であるため、通常の静的標準と比較して多くの利点があり、たとえば、JSP は静的ページにコードを埋め込んでいつでも変更できたり、静的ページをテンプレートとして使用して一部のコンテンツの動的生成を実現したりできます。同時に、より強力なインタラクティブ性も備えています。また、組み込み関数を呼び出すための「action」と呼ばれる XML タグも導入されています。タグライブラリはプラットフォーム内で動的に利用でき、プラットフォーム外のさまざまな環境への適応性も備えており、その使いやすい機能は多くの開発者に愛用されています。
2.3 MVC フレームワーク
MVC の正式名称は Model View Controller で、Model-View-Controller の略であり、ビジネス ロジック、データ、インターフェイス表示を分離する手法を使用してコードを整理し、ビジネス ロジックを収集するソフトウェア設計のモデルです。ビジネス ロジックを書き直すことなく、カスタム インターフェイスとユーザー インタラクションを改善およびパーソナライズします。MVC は、従来の入力、処理、出力機能を論理 GUI 構造にマッピングするために独自に開発されました。
2.4 MySQL
MySQL は、マルチスレッド対応の Web サーバー上で処理できる中小規模のリレーショナル データベース管理システムであり [13]、ORACLE によって開発されたソフトウェアであり、Web アプリケーションの中で最も優れた RDBMS アプリケーションの 1 つです。
MySQL では、データを複数のテーブルに格納できます。これらのテーブルは小さな倉庫に相当し、さまざまな倉庫が絡み合います。この「織り交ぜる」接続方法により、データの柔軟性が大幅に向上します。MySQL は SQL 言語を使用しており、無料版があり、公開されており、Apache を使用して良好な開発環境を構築できます。MySQL には、低コスト、高速、サイズが小さいという利点があります。アプリケーションの面では、セキュリティが高く、開発スピードが速いという利点もあり、コストを節約したい一部の企業や個人ユーザーにとって、MySQL を選択することは非常に良い選択です。
3. 機能的なデザイン
このシステムのメンバーは観光客、利用者、管理者の3つの役割に分かれています。システム構造図は次のとおりです。
管理者権限:
(1) 管理者は、主に規約に違反したユーザーや長期間ログインしていないユーザーのユーザー情報を削除するユーザー管理権限を有します。
(2) 管理者は、主に新規ペット情報の公開、死亡ペット情報の削除、ペット引き取り状況情報の修正、利用者が解放したペットのレビュー等、ペットを管理する権限を有します。
(2) 管理者は、注文状況の変更、注文の見直し、無理な注文の取消し、注文の確認等の注文を管理する権限を有します。
(3) 管理者は、ペット カテゴリ情報の追加、削除、変更など、ペット カテゴリを管理する権限を持ちます。
(4) 管理者は、運賃区分情報の追加、削除、変更などの貨物区分を管理する権限を有します。
(5) 管理者は、ペットの譲渡を管理する権限を有し、主に譲渡情報の変更を行うことができる。
ユーザーの権利:
(6) ユーザーは、ウェブサイト上のすべてのペット情報を閲覧し、保護を必要としているペットに関する情報を投稿する権限を有します。
(7) ユーザはペットをキーワードで検索する権限を持ちます。
(8) 個人情報の管理:個人登録情報の変更を行います。
(9) パスワード管理: パスワードの取得、パスワードの変更。
(10) 個人のお気に入りを追加、表示、または削除します。
(11) 選択したペットをペットカートに入れます。
(12) ペットカート内のペットの閲覧・追加・削除
(13) 採用の場合は直接オーダーを提出し、採用の場合はオーダーを提出し、必要な受け取り情報を記入します。
(14) 直接スポンサーの場合は、ペットスポンサー情報を直接変更します。
(15) 送料を含めた合計金額を確認する
(16) スポンサーペットの毎月の消費明細を確認します。
(17) 管理者が再訪問できるように、引き取ったペットの最近の写真をアップロードします。
(18) メッセージ情報管理:メッセージを追加する
(19) ログアウト
訪問者の許可:
(1) 訪問者は、主にペット情報を閲覧するために、ウェブサイト上のすべてのペット情報を閲覧する権利を有します。
(2) 観光客はキーワードでペットを検索する権限を持っています。
(3) 訪問者は会員登録する権利を有します。
4. 機能的なレンダリング
4.1 ホームページ
4.2 採用センター
4.3 ログイン
4.4 登録
4.5 バックグラウンド管理者ログイン
5. コアコード
@Controller
@RequestMapping("adopt")
public class AdoptAnimalController {
@Autowired
private AdoptAnimalService animalService;
@Autowired
private PetService petService;
@Autowired
private UsersService usersService;
@RequestMapping("adopts.action")
@ResponseBody
public Message getAdoptAnimals(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
PageHelper.startPage(pn,4);
AdoptAnimal animal=new AdoptAnimal();
List<AdoptAnimal> adoptAnimals = animalService.findByState(1);
PageInfo page=new PageInfo(adoptAnimals,2);
return Message.success().add("pageInfo",page);
}
@RequestMapping("ByAgree.action")
@ResponseBody
public Message getAdoptStates(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
PageHelper.startPage(pn,4);
int state=2;
List<AdoptAnimal> adoptAnimals = animalService.findByState(state);
PageInfo page=new PageInfo(adoptAnimals,2);
return Message.success().add("pageInfo",page);
}
@RequestMapping("ByDisAgree.action")
@ResponseBody
public Message getAdoptDisagress(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
PageHelper.startPage(pn,4);
int state=0;
List<AdoptAnimal> adoptAnimals = animalService.findByState(state);
PageInfo page=new PageInfo(adoptAnimals,2);
return Message.success().add("pageInfo",page);
}
@RequestMapping("create.action")
@ResponseBody
public Message createAdopt(HttpServletRequest request){
Pet pet = (Pet)request.getSession().getAttribute("pet");
Users user = (Users)request.getSession().getAttribute("user");
pet.setState(1);
AdoptAnimal animal=new AdoptAnimal();
animal.setUser(user);
animal.setPet(pet);
animal.setState(1);
animal.setAdoptTime(new Date());
int i = animalService.addAdoptAnimal(animal);
int t=petService.updateState(pet);
if(i>0&&t>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("delete.action")
@ResponseBody
public Message deleteAdopt(Integer id){
if(animalService.deleteAdoptAnimal(id)>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("update.action")
@ResponseBody
public Message updateAdoptAnimal(AdoptAnimal animal){
if(animalService.updateAdoptAnimal(animal)>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping(value = "disAgree.action", method = RequestMethod.GET)
@ResponseBody
public Message updateAdoptState(Integer id) throws MessagingException {
AdoptAnimal animal = animalService.findById(id);
animal.setState(0);
Pet pet = animal.getPet();
pet.setState(0);
int i = animalService.updateAdoptState(animal);
int t=petService.updateState(pet);
if(i>0&&t>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping(value = "agree.action",method = RequestMethod.GET)
@ResponseBody
public Message updateAdoptStates(Integer id) throws MessagingException {
AdoptAnimal animal = animalService.findById(id);
animal.setState(2);
Pet pet = animal.getPet();
pet.setState(2);
int a = animalService.updateAdoptState(animal);
int b=petService.updateState(pet);
if(a>0&&b>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("findById.action")
@ResponseBody
public Message findById(Integer id){
AdoptAnimal animal = animalService.findById(id);
if(animal!=null){
return Message.success().add("animal",animal);
}else{
return Message.fail();
}
}
@RequestMapping("findByAdoptTime.action")
@ResponseBody
public Message findByAdoptTime(String adoptTime) throws ParseException {
PageHelper.startPage(1,4);
List<AdoptAnimal> adoptAnimals = animalService.findByAdoptTime(adoptTime);
if(adoptAnimals!=null){
PageInfo page=new PageInfo(adoptAnimals,3);
return Message.success().add("pageInfo",page);
}else{
return Message.fail();
}
}
@RequestMapping("findByName.action")
@ResponseBody
public Message findByName(@RequestParam(value = "pn",defaultValue = "1")Integer pn,@RequestParam(value = "userName") String userName,@RequestParam(value = "state") Integer state) throws ParseException {
PageHelper.startPage(1,4);
List<Users> users = usersService.findByName(userName);
List<AdoptAnimal> adoptAnimals = animalService.findByName(users,state);
if(adoptAnimals!=null){
PageInfo page=new PageInfo(adoptAnimals,3);
return Message.success().add("pageInfo",page);
}else{
return Message.fail();
}
}
}
@Controller
@RequestMapping("pet")
public class PetController {
@Autowired
private PetService petService;
@RequestMapping("pets.action")
@ResponseBody
public Message getPets(@RequestParam(value = "pn",defaultValue = "1")Integer pn){
PageHelper.startPage(pn,3);
List<Pet> pets = petService.getPets();
System.out.println(pets);
PageInfo page=new PageInfo(pets,2);
return Message.success().add("pageInfo",page);
}
@RequestMapping("petState.action")
@ResponseBody
public Message findByState(@RequestParam(value = "pn",defaultValue = "1")Integer pn){
PageHelper.startPage(pn,3);
int state=0;
List<Pet> pets = petService.findByState(0);
System.out.println(pets);
PageInfo page=new PageInfo(pets,2);
return Message.success().add("pageInfo",page);
}
@RequestMapping(value = "create.action")
@ResponseBody
public Message createPet(Pet pet,@RequestParam(value = "file") MultipartFile file, HttpServletRequest request){
String load = FileLoad.load(file,request);
pet.setPic(load);
if(petService.addPet(pet)>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("delete.action")
@ResponseBody
public Message deletePet(Integer id){
if(petService.deletePet(id)>0){
return Message.success();
}else {
return Message.fail();
}
}
@RequestMapping("update.action")
@ResponseBody
public Message updatePet(Pet pet){
if(petService.updatePet(pet)>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("findById.action")
@ResponseBody
public Message findById(Integer id){
Pet pet = petService.findById(id);
if(pet!=null){
return Message.success().add("pet",pet);
}else{
return Message.fail();
}
}
@RequestMapping("findByPet.action")
@ResponseBody
public Message findByPet(Integer id, HttpServletRequest request){
Pet pet = petService.findById(id);
System.out.println(pet);
String pic = pet.getPic();
String[] split = pic.split(",");
List<String> pics=new ArrayList<>();
for(int i=0;i<split.length;i++){
pics.add(split[i]);
}
request.getSession().setAttribute("pics",pic);
request.getSession().setAttribute("pet",pet);
if(pet!=null){
return Message.success().add("pet",pet);
} else{
return Message.fail();
}
}
@RequestMapping("findByPetType.action")
@ResponseBody
public Message findByName(@RequestParam(value = "pn",defaultValue = "1")Integer pn,String petType){
PageHelper.startPage(pn,4);
List<Pet> pets = petService.findByPetType(petType);
if(pets!=null){
PageInfo page=new PageInfo(pets,3);
return Message.success().add("pageInfo",page);
}else{
return Message.fail();
}
}
}
@Controller
@RequestMapping("apply")
public class ApplyController {
@Autowired
private ApplyService applyService;
@RequestMapping("applys.action")
@ResponseBody
public Message getBlog(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
// 引入PageHelper分页插件
// 在查询之前只需要调用,传入页码,以及每页的大小
PageHelper.startPage(pn,3);
List<Apply> applys = applyService.getApply();
System.out.println(applys);
// startPage后面紧跟的这个查询就是一个分页查询
// 使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了。
// 封装了详细的分页信息,包括有我们查询出来的数据,传入连续显示的页数
PageInfo page=new PageInfo(applys,2);
return Message.success().add("pageInfo",page);
}
@RequestMapping("create.action")
@ResponseBody
public Message addApply(Apply apply){
apply.setApplyTime(new Date());
apply.setState(2);
int i = applyService.addApply(apply);
if(i>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("delete.action")
@ResponseBody
public Message deleteApply(Integer id){
int i = applyService.deleteApply(id);
if(i>0){
return Message.success();
}else {
return Message.fail();
}
}
@RequestMapping("update.action")
@ResponseBody
public Message updateApply(Apply apply){
if(applyService.updateApply(apply)>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("findById.action")
@ResponseBody
public Message findById(Integer id){
Apply apply=applyService.findById(id);
if(apply!=null){
return Message.success().add("apply",apply);
}else{
return Message.fail();
}
}
@RequestMapping("findByState.action")
@ResponseBody
public Message findByTime(@RequestParam(defaultValue ="1",value = "pn") Integer pn,Integer state){
PageHelper.startPage(pn,4);
List<Apply> states = applyService.findByState(state);
if(states!=null){
PageInfo page=new PageInfo(states,3);
return Message.success().add("pageInfo",page);
}else{
return Message.fail();
}
}
}
6. 参考文献
7. まとめ
本システムは、野良犬猫保護システムの機能をJSPをベースに実現しています。このシステムの開発中に、私は多くの恩恵を受けてきました。まず、コード仕様の重要性を痛感しました。特に大規模なプロジェクトでは数百もの関数が使用される場合があり、書かれたコードが標準化されていないと、後の検査に大きな支障をきたすことになります。また、完全なコードのテストも非常に重要であり、一部のエラーはかなり後になるまで発見されない可能性があります。2 つ目は、ソフトウェア設計の重要性を認識していることです。私が以前担当していたプロジェクトは迅速な開発タイプのものが多く、ソフトウェアのロジック設計にあまり時間を費やす必要がなく、開発をしながら次の設計に進むことができることが多いです。 。しかし、今回はソフトウェアの設計が非常に重要であることに気づきました。最後はデバッグ方法の重要性ですが、システムのデバッグプロセスは開発プロセスよりもはるかに面倒です。サーバーに送信されるすべての操作やリクエストには、実際には多数の小さなコードの実行が含まれるため、正しいデバッグ方法を採用できない場合、プログラム内のエラーを発見することが困難になります。
また、動物救護所の役割を追加するなど、拡張可能な機能も多数備えています。ペットを管理する場合、スケジュール管理には不備が多く、注文管理にも不備が存在します。時間が限られているのでまだ機能を完璧にすることはできませんが、今後の取り組みで必ずもっと完璧なシステムを作ることができると思います。
好き、好き、コレクション、私信への注目 著者コミュニケーション